CIniFile類,讀取INI檔案
2008年04月26日 星期六 上午 10:27/*==================================================================
= 檔名:CIniFile類定義檔案 =
= 主要功能:可以讀取.修改變數數值,可以設定新的組,新的變數 =
= 修改日期:2002-12-28 =
= 作者:阿皮 =
= E_Mail:
====================================================================*/
#ifndef _CINIFILE_H_
#define _CINIFILE_H_
//使用者介面說明:在成員函式SetVarStr和SetVarInt函式中,當iType等於零,則如果使用者制定的引數在ini檔案中不存在,
//則就寫入新的變數.當iType不等於零,則如果使用者制定的引數在ini檔案中不存在,就不寫入新的變數,而是直接返回FALSE;
class CIniFile
{
public:
CIniFile();
virtual ~CIniFile();
private:
CIniFile(const CIniFile &);
CIniFile & operator = (const CIniFile &);
public:
//建立函式
BOOL Create(const CString &strFileName);
//得到變數整數型數值
BOOL GetVarInt(const CString &,const CString & ,int &);
//得到變數字串型數值
BOOL GetVarStr(const CString &,const CString & ,CString & );
//重新設定變數整數型數值
BOOL SetVarInt(const CString &,const CString & ,const int &,const int iType = 1);
//重新設定變數字串型數值
BOOL SetVarStr(const CString &,const CString &, const CString &,const int iType = 1);
private:
BOOL GetVar(const CString &,const CString &,CString &);
BOOL SetVar(const CString &,const CString &,const CString &,const int iType = 1);
int SearchLine(const CString &,const CString &);
private:
// vector <CString> FileContainer;
CArray <CString,CString> FileContainer;
BOOL bFileExsit;
CStdioFile stfFile;
CString strInIFileName;
};
#endif
/*==================================================================
= 檔名:CIniFile類實現檔案 =
= 修改日期:2002-12-28 =
= 作者:阿皮 =
= E_Mail:[email protected] msn:[email protected] =
====================================================================*/
#include "stdafx.h"
#include "CIniFile.h"
CIniFile::CIniFile():bFileExsit(FALSE)
{
}
CIniFile::~CIniFile()
{
if(bFileExsit)
{
if(stfFile.Open(strInIFileName,CFile::modeCreate | CFile::modeWrite) && FileContainer.GetSize() > 0)
{
CString strParam;
for(int i = 0; i< FileContainer.GetSize();i++)
{
strParam = FileContainer[i];
// stfFile.WriteString(strParam);
stfFile.WriteString(strParam+"/n");
}
}
stfFile.Close();
}
if(FileContainer.GetSize() > 0)
{
FileContainer.RemoveAll();
}
}
BOOL CIniFile::Create(const CString & strFileName)
{
bFileExsit = FALSE;
strInIFileName = strFileName;
if(!stfFile.Open(strFileName,CFile::modeRead))
{
return bFileExsit;
}
CString strFileLine;
while(bFileExsit = stfFile.ReadString(strFileLine))
{
if(bFileExsit == FALSE)
return bFileExsit;
FileContainer.Add(strFileLine);
}
stfFile.Close();
bFileExsit = TRUE;
return bFileExsit;
}
BOOL CIniFile::GetVar(const CString & strSection,const CString & strVarName,CString &strReturnValue)
{
if(bFileExsit == FALSE || FileContainer.GetSize() < 0)
return bFileExsit;
int iLine = SearchLine(strSection,strVarName);
if(iLine > 0)
{
CString strParam = FileContainer[iLine -1];
strReturnValue = strParam.Mid(strParam.Find("=") + 1);
return TRUE;
}
return FALSE;
}
BOOL CIniFile::GetVarStr(const CString & strSection,const CString & strVarName,CString &strReturnValue)
{
return(GetVar(strSection,strVarName,strReturnValue));
}
BOOL CIniFile::GetVarInt(const CString & strSection,const CString & strVarName,int & iValue)
{
CString strReturnVar;
if(GetVar(strSection,strVarName,strReturnVar))
{
strReturnVar.TrimLeft();
int iLen = strReturnVar.GetLength();
iValue = atoi(strReturnVar.GetBuffer(iLen));
return TRUE;
}
return TRUE;
}
BOOL CIniFile::SetVar(const CString & strSection,const CString & strVarName,const CString & strVar,const int iType)
{
if(bFileExsit == FALSE )
return bFileExsit;
if(FileContainer.GetSize() == 0)
{
FileContainer.Add("[" + strSection + "]");
FileContainer.Add(strVarName + "=" + strVar);
return TRUE;
}
int i = 0;
int iFileLines = FileContainer.GetSize();
//for(pInterator;pInterator != FileContainer.end();++pInterator)
//{
while(i< iFileLines)
{
CString strValue = FileContainer.GetAt(i++);
strValue.TrimLeft();
if((strValue.Find("[") >=0) && (strValue.Find(strSection) >=0))
{
while(i < iFileLines)
{
CString strSectionList = FileContainer[i++];
strSectionList.TrimLeft();
if(strSectionList.Find("//") >=0)//找到註釋行
continue;
if(strSectionList.Find(strVarName)>=0)//找到
{
CString strParam = strVarName + "=" + strVar;
//FileContainer.SetAt(i-1,strParam);
FileContainer[i-1] = strParam;
return TRUE;
}
if(strSectionList.Find("[",0)>=0)//在原來檔案的SECTION中,沒有相應的變數需要新增而且,這種情況下,下邊還有別的section
{
//處理流程是這樣的,首先把當前的數值依次向後移動,然後在當前位置加入新出現的數值
if(iType !=0)
return FALSE;
CString strParam;
FileContainer.Add(strParam);
int iPre = FileContainer.GetSize()-1;
while(iPre >= i)
{
CString strBehind = FileContainer[iPre -1];
FileContainer[iPre] = strBehind;
iPre --;
}//*/
strParam = strVarName + "=" + strVar;
FileContainer.SetAt(i-1,strParam);
return TRUE;
}
if(i == iFileLines && iType == 0)
{
FileContainer.Add(strVarName + "=" + strVar);
return TRUE;
}
}
}
}
if(iType == 0)
{
FileContainer.Add("[" + strSection + "]");
FileContainer.Add(strVarName + "=" + strVar);
}
return TRUE;
}
BOOL CIniFile::SetVarStr(const CString & strSection,const CString & strVarName,const CString & strValue,const int iType)
{
return SetVar(strSection,strVarName,strValue,iType);
}
BOOL CIniFile::SetVarInt(const CString & strSection,const CString & strVarName,const int & iValue,const int iType)
{
CString strVar;
strVar.Format("%d",iValue);
return (SetVar(strSection,strVarName,strVar,iType));
}
int CIniFile::SearchLine(const CString & strSection,const CString & strVarName)
{
if(FileContainer.GetSize() > 0)
{
int i = 0;
int iFileLines = FileContainer.GetSize();
while(i< iFileLines)
{
CString strValue = FileContainer[i++];
strValue.TrimLeft();
if(strValue.Find("[") >=0 && strValue.Find(strSection,1)>=0)
{
while(i < iFileLines)
{
CString strSectionList = FileContainer[i++];
strSectionList.TrimLeft();
if(strSectionList.Find("//") >=0)//找到註釋行
continue;
if(strSectionList.Find(strVarName)>=0)//找到
{
return i;
}
if(strSectionList.Find("[",0) >= 0)//另外一個段落出現,尋找失敗
{
return -2;
}
}
}
}
}
return -1;
}
相關推薦
CIniFile類,讀取INI檔案
2008年04月26日 星期六 上午 10:27/*=================================================================== 檔名:CIniFile類定義檔案
伺服器公共庫開發--讀取ini檔案格式的類
/******************************************************************** created: 2008/07/28 filename: config.h author: Lichuang
Linux下讀取Ini檔案類
#include "Ini.h" /****************************************************************************** * 功 能:建構函式 * 參 數:無 * 返回值:無 * 備 注: *********************
17.18.實現一個讀取INI檔案的類
開發環境: vs2013, win10 經過很多次修改,和對一些錯誤的學習,才搞定了這麼一個類: 比如說LPCTSTR的賦值,new和delete要成對出現,字元陣列和字串的庫函式去取代自己寫字串處理函式等, wcsncpy_s用法,string類的賦值運算子等。 標頭檔案
IDEA編寫wordcount,讀取hdfs檔案,執行在Spark叢集例子
前期:已安裝好hadoop叢集和spark叢集,hadoop2.6.5,spark2.3.1,jdk1.8. scala2.1.0 第一步:在idea編寫scala程式,並且要打包(pom檔案的build標籤中配置好maven打包程式碼,可以定義主類也可以在提交的時候再定義){補充:可以在s
改良昨天的指令碼,讀取CSV檔案生成散點圖
需要讀取的CSV檔案,資料參考以下表頭順序 讀取成功後生成散點圖檔案 “散點圖.html" 開啟網頁檔案時,同目錄下需要有 echarts.min.js 散點圖效果: 程式碼如下: # -*- coding: utf-8 -*- """ 讀取cs
基於GDAL庫,讀取.grd檔案(以海洋地形資料為例)C++版
技術背景 海洋地形資料主要是通過美國全球地形起伏資料(GMT)獲得,資料格式為grd(GSBG)二進位制資料,開啟軟體通過是Surfer軟體,surfer軟體可進行資料的編輯處理,以及進一步的視覺化表達等功能操作;由於Surfer軟體不支援二次開發,沒有提供相應的SDK供開發者進行使用,所以這一切只能通
通用工具類,獲取配置檔案資訊
創作不易,請勿抄襲,轉載請註明出處。如有疑問,請加微信 wx15151889890,謝謝。 [本文連結:]https://blog.csdn.net/wx740851326/article/details/83744404 之前已經寫過了這個文章,現在把整個類粘出來 文章也用markdo
Asp.net Core 和類庫讀取配置檔案資訊
Asp.net Core 和類庫讀取配置檔案資訊 看乾貨請移步至.net core 讀取配置檔案公共類 首先開一個腦洞,Asp.net core 被使用這麼長時間了,但是關於配置檔案(json)的讀取,微軟官方似乎並沒有給出像.net framework讀取web.config那樣簡單且完美。嚴重懷
.NET CORE 類庫讀取配置檔案繫結到類
前言,好記性不如爛筆頭 1,NuGet管理器新增 三個引用Microsoft.Extensions.Configuration,Microsoft.Extensions.Configuration.Binder,Microsoft.Extensions.Configurat
java檔案操作 (1)——判別指定檔案是否存在,讀取檔案修改時間和大小,讀取文字檔案內容,向文字檔案中寫入指定內容
任務要求: 完成一個java application應用程式,判別指定路徑下指定檔名的檔案是否存在。 如果指定檔案存在,讀取並分別顯示其修改時間和檔案大小等屬性。 以文字方式開啟某一指定路徑指定檔名的文字檔案,讀取其內容並顯示。 以文字方式向某
Spark_Spark on YARN 提交配置檔案,讀取配置檔案
Spark ON YARN 的官方文件,基於Spark 2.1.1 To use a custom log4j configuration for the application master or executors, here are the options
springboot 專案框架搭建(三):工具類中讀取配置檔案
一.原因 編寫一個服務類的工具類,想做成一個靈活的配置,各種唯一code想從配置檔案中讀取,便有了這個坑。 二.使用@value獲取值為null, 這是因為這個工具類沒有交給spring boot 來管理,導致每次都是new 一個新的,所以每次取出來的
基於GDAL庫,讀取.nc檔案(以海洋表溫資料為例)
對於做海洋資料處理的同學,會經常遇到nc格式的檔案,nc檔案的格式全稱是NetCDF,具體的詳細解釋請查詢官網【https://www.unidata.ucar.edu/software/netcdf/docs/index.html】,一般從全球大洋資料庫裡面下載的溫鹽、風場及雲量等資料,基本上是nc檔案
【node學習】koa2搭建簡單的伺服器,讀取json檔案開啟圖表專案
需求:用koa2搭建一個簡單的伺服器,能夠讀取json檔案開啟echarts圖表專案。我們知道,不能直接開啟圖表檔案,可以使用hbuilder這種自帶內建伺服器的編輯器,或者vscode的live-server外掛開啟。如果不想在電腦上下載很多編輯器,可以手動用node搭建一個。 1.安裝k
c# 賬號密碼加密, 寫入讀取ini檔案
[DllImport("kernel32")] private static extern int GetPrivateProfileString(string section, string key, string def, StringBu
Java SE程式打包成jar包或exe程式時,讀取配置檔案的處理
該Java SE程式打包成JAR包或exe程式的時候,配置檔案不能放在裡面;因為會時不時的修改配置檔案裡面的內容,所以必須放在外邊,以備隨時更改! Main main = new Main();
c語言實現讀取ini檔案操作
二、實現檔案 //ini.c #include "ini.h" #include <string.h> #include <stdio.h> content* pContent; char gfilename[255]; void iniGetInt(const char* lpSe
C#類庫:ini檔案操作類
C#類庫 ——ini檔案操作類 1.類庫介紹 在開發應用軟體時,ini檔案常用於軟體的相關配置,以下為ini檔案的相關結構及示例;ini檔案具有節(section)和鍵(key)兩個層級,節用”[]”包含,然後下一行為對應鍵名以及鍵值,
Java讀取ini檔案的值
IniFile iniFile=new BasicIniFile(); File f = new File(""); String cf = null; cf = f.getCanonicalPath(); File file=new File(c