1. 程式人生 > >Linux下讀取Ini檔案類

Linux下讀取Ini檔案類

#include "Ini.h"
/******************************************************************************
* 功  能:建構函式
* 參  數:無
* 返回值:無
* 備  注:
******************************************************************************/
CIni::CIni( )
{
 memset( m_szKey,0,sizeof(m_szKey) );
 m_fp = NULL;
}

/******************************************************************************
* 功  能:解構函式
* 參  數:無
* 返回值:無
* 備  注:
******************************************************************************/

CIni::~CIni()
{
 m_Map.clear();
}

/******************************************************************************
* 功  能:開啟檔案函式
* 參  數:無
* 返回值:
* 備  注:
******************************************************************************/
INI_RES CIni::OpenFile(const char* pathName, const char* type)
{
 string szLine,szMainKey,szLastMainKey,szSubKey;
 char strLine[ CONFIGLEN ] = { 0 };
 KEYMAP mLastMap;
 int  nIndexPos = -1;
 int  nLeftPos = -1;
 int  nRightPos = -1;
    m_fp = fopen(pathName, type);

    if (m_fp == NULL)
    {
  printf( "open inifile %s error!\n",pathName );
        return INI_OPENFILE_ERROR;
    }

 m_Map.clear();

 while( fgets( strLine, CONFIGLEN,m_fp) )
 {  
  szLine.assign( strLine );
  //刪除字串中的非必要字元
  nLeftPos = szLine.find("\n" );
  if( string::npos != nLeftPos )
  {
   szLine.erase( nLeftPos,1 );
  }
  nLeftPos = szLine.find("\r" );
  if( string::npos != nLeftPos )
  {
   szLine.erase( nLeftPos,1 );
  }   
  //判斷是否是主鍵
  nLeftPos = szLine.find("[");
  nRightPos = szLine.find("]");
  if(  nLeftPos != string::npos && nRightPos != string::npos )
  {
   szLine.erase( nLeftPos,1 );
   nRightPos--;
   szLine.erase( nRightPos,1 );
   m_Map[ szLastMainKey ] = mLastMap;
   mLastMap.clear();
   szLastMainKey =  szLine ;
  }
  else
  {  


   //是否是子鍵
   if( nIndexPos = szLine.find("=" ),string::npos != nIndexPos)
   {
    string szSubKey,szSubValue;
    szSubKey = szLine.substr( 0,nIndexPos );
    szSubValue = szLine.substr( nIndexPos+1,szLine.length()-nIndexPos-1);
    mLastMap[szSubKey] = szSubValue ;
   }
   else
   {
    //TODO:不符合ini鍵值模板的內容 如註釋等
   }
  }

 }
 //插入最後一次主鍵
 m_Map[ szLastMainKey ] = mLastMap;

    return INI_SUCCESS;
}

/******************************************************************************
* 功  能:關閉檔案函式
* 參  數:無
* 返回值:
* 備  注:
******************************************************************************/
INI_RES CIni::CloseFile()
{


    if (m_fp != NULL)
    {
        fclose(m_fp);
  m_fp = NULL;
    } 

    return INI_SUCCESS;
}

/******************************************************************************
* 功  能:獲取[SECTION]下的某一個鍵值的字串
* 參  數:
*  char* mAttr  輸入引數    主鍵
*  char* cAttr  輸入引數 子鍵
*  char* value  輸出引數 子鍵鍵值
* 返回值:
* 備  注:
******************************************************************************/
INI_RES CIni::GetKey(const char* mAttr, const char* cAttr, char* pValue)
{

    KEYMAP mKey = m_Map[ mAttr ];

 string sTemp = mKey[ cAttr ];

 strcpy( pValue,sTemp.c_str() );

    return INI_SUCCESS;
}

/******************************************************************************
* 功  能:獲取整形的鍵值
* 參  數:
*       cAttr                     主鍵
*      cAttr                     子鍵
* 返回值:正常則返回對應的數值 未讀取成功則返回0(鍵值本身為0不衝突)
* 備  注:
******************************************************************************/
int CIni::GetInt(const char* mAttr, const char* cAttr )
{
 int nRes = 0;

 memset( m_szKey,0,sizeof(m_szKey) );

 if( INI_SUCCESS == GetKey( mAttr,cAttr,m_szKey ) )
 {
  nRes = atoi( m_szKey );
 }
 return nRes;
}

/******************************************************************************
* 功  能:獲取鍵值的字串
* 參  數:
*       cAttr                     主鍵
*      cAttr                     子鍵
* 返回值:正常則返回讀取到的子鍵字串 未讀取成功則返回"NULL"
* 備  注:
******************************************************************************/
char *CIni::GetStr(const char* mAttr, const char* cAttr )
{
 memset( m_szKey,0,sizeof(m_szKey) );

 if( INI_SUCCESS != GetKey( mAttr,cAttr,m_szKey ) )
 {
  strcpy( m_szKey,"NULL" );
 }

 return m_szKey;

}

用法:比如讀取 [Section1] key1=1 key2=abcdw [Section2] key1=3 key2=ddba CIni ini; ini.OpenFile(“./Test.ini”,”r” ); char *pVal1 = ini.GetStr(“Section1”,”key2”); int nKey = ini.GetInt(“Section2”,”key1”); 再封裝一下 #define INIINT( a ,b ) ini.GetInt(a,b) #define INISTR(a,b) ini.GetStr(a,b) 讀取所有的欄位都可以用 以下形式
int a=INIINT(…… ) strcpy( szTemp,INIStr(a,b) )

相關推薦

Linux讀取Ini檔案

#include "Ini.h" /****************************************************************************** * 功 能:建構函式 * 參 數:無 * 返回值:無 * 備 注: *********************

linux怎樣編輯檔案儲存檔案讀取內容

編輯檔案儲存檔案 首先開啟命令控制檯找到要編輯的檔案的路徑,執行命令ls找到自己要編譯的檔案 然後執行命令vi 檔名 這時如果想要修改檔案內容,就要按下鍵盤上“i”,在左下方就會變成INSERT,就可以修改了 寫個echo的程式碼,儲存Esc+:+w

伺服器公共庫開發--讀取ini檔案格式的

/********************************************************************    created:    2008/07/28    filename:     config.h    author:        Lichuang       

linux生成圖片檔案列表及讀取

一個很簡單的sh檔案就可以搞定 listfilepath=list.txt filepath=./sampledata/ find $filepath -name *.png > $listfilepath 然後在windows下就是使用.bat批處理檔案來進行

windows和linux讀取檔案換行符的一個坑——\r\n和\n

      拿同事的一個windows下的C程式,在Linux下跑,結果不正確。定位為讀取.ini配置檔案錯誤。該配置檔案是在windows下編輯的,網上查到資料,說是windows和linux下對換行符處理不同導致的。      

windows讀取配置檔案(.ini)

Windows系統中有很多.ini檔案,最重要的就是“System.ini”、“System32.ini”和“Win.ini”。該檔案主要存放使用者所做的選擇以及系統的各種引數。使用者可以通過修改INI檔案,來改變應用程式和系統的很多配置,如通訊埠的選擇等。在Windows

17.18.實現一個讀取INI檔案

開發環境: vs2013, win10 經過很多次修改,和對一些錯誤的學習,才搞定了這麼一個類: 比如說LPCTSTR的賦值,new和delete要成對出現,字元陣列和字串的庫函式去取代自己寫字串處理函式等, wcsncpy_s用法,string類的賦值運算子等。 標頭檔案

Linux讀取doc,docx檔案

docx檔案 利用python-docx包,好像暫時不支援python3。 # -*- coding:utf-8 -*- import sys import docx path = sys.argv[1] file = docx.Document(path

Linux解析配置檔案和GKeyFile讀取配置檔案

# this is just an example # there can be comments before the first group [First Group] Name=Key File Exampletthis value showsnesc

CIniFile讀取INI檔案

2008年04月26日 星期六 上午 10:27/*=================================================================== 檔名:CIniFile類定義檔案                            

Linux讀取RFID卡號(C串口編程)

start itl star tor 卡號 字節數 同時 描述符 lag 由於項目需要用到RFID、GPRS、攝像頭等模塊所以便看了一下,整理了一下學習思路,本篇先是整理一下串口讀取RFID卡號的程序思路,後面還會更其他的 RFID模塊: 本次采用的是125K的RF

Linux讀取位圖需要註意什麽

Linux 位圖 在Linux下讀取位圖遇到的問題,很好地體現了linux與Windows操作系統的不同。按理說位圖格式與操作系統無關,讀取也應該無關,實際上在位圖讀到內存中時已經不同。下面主要介紹自己在Linux下操作位圖遇到的問題。 (一)、位圖結構 位圖一開始是兩個結構體,包括位圖的詳細

Linux安裝.run檔案

Welcome To My Blog 實踐中學習Linux,今天安裝福昕PDF閱讀器,順便推薦下,很好用,可以任意勾勾畫畫。 官網下載安裝包FoxitReader2.4.1.0609_Server_x64_enu_Setup.run.tar.gz 1. 解壓 tar -zxvf

linux解壓縮檔案中文亂碼問題的解決

在windows上壓縮的檔案,是以系統預設編碼中文來壓縮檔案。由於zip檔案中沒有宣告其編碼,所以linux上的unzip一般以預設編碼解壓,中文檔名會出現亂碼。 雖然2005年就有人把這報告為bug, 但是info-zip的官方網站沒有把自動識別編碼列入計劃,可能他們不認為這是個問題。Sun對java中存在

自定義讀取配置檔案

#include<iostream> #include<string.h> #include<vector> #include<map> #include<set> #include <fstream> #include<

linux shell 讀取配置檔案

隨著linux接觸的越來越多,我們難免需要從一些配置檔案中進行讀取配置引數,linux中shell屬於指令碼型語言,讀取時沒有其它語言方便,特將用過的一種方式分享給大家 實戰程式碼: $ more a.txt name=hello world age=22 ip=192.168.

Linux的二進位制檔案比較工具

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

linux C 讀取目錄檔案並統計檔案

#include <stdio.h> #include <stdlib.h> #include <dirent.h> #include <errno.h> #include <string.h> #define MAX 1024

Linux檢視隱藏檔案命令

一般的Linux下的隱藏目錄使用命令ls -l是查看不出來的,只能檢視到檔案及資料夾 檢視Linux下的隱藏檔案需要用到命令 ls -al 其他檢視檔案目錄命令: ls -l ll ls -l / 個人網站:http://xudailong.

java上傳檔案linux 的 tomcat 檔案伺服器

linux 安裝 tomcat 伺服器,我安裝的是 tomcat 7,未測試其他版本 linux 安裝 tomcat 連線 https://mp.csdn.net/mdeditor/83987640# 本次使用的阿里雲 linux os7 , tomcat 7 + ssm 1、修改目