作者tropical72 (藍影)
看板C_and_CPP
標題Re: [問題] linux C/C++ 讀設定檔
時間Fri Dec 24 21:54:16 2010
※ 引述《mself (mself)》之銘言:
: 開發平台(Platform): (Ex: VC++, Gcc, Linux, ...)
: Linux
: 問題(Question):
: 想請問如何用 C/C++ 讀取一個設定檔
: 餵入的資料(Input):
: 設定檔是一個文字檔,內容是字串跟設定值,例如:
: height 5
: width 10
: lenght 30
: ...
基本上這問題和什麼平台似乎沒有太大關係,
你的需求似乎只是要從設定檔裡面讀出參數值而已,
於是重點應在於當初設定檔的規範是怎麼寫的,
不同的規範方式就有不同的讀取方式,
而您的方法的確是簡單、常用的方法,
(我的話是改成 !stricmp("height", str), 不分大小寫)
我另外提出三方法如下說明
1. height = 5
這種方法處理前要先把空白全吃掉,
每次都要用 strtok 方式去抓 "=",
比對 "=" 前面的字串是要給哪個變數。
2. 直接寫入定義欄位
早期的單機遊戲不少是用這種方式,
直接寫入 binary 值,
所以看到很多遊戲破解都會跟你說
00h~04h:血量
05h~06h:等級
這種方式是直接定義好欄位,寫入 binary ,
不過相對的,佔用欄位(byte 數)要事先設定好,
太多就浪費;太少就容易溢位。
3. ini 讀取
這點我不知道 C/C++ 有沒有直接支援 ini 讀取
不過 AutoIt(用VC寫的)裡面有
IniReadSection、IniReadSectionName、IniWriteSection
到時寫入和讀取都非常方便,
可以考慮它的做法,自己寫一個 Class 出來去讀。
至於您提及有沒有更方便的方式?
那可以那些欄位識別字全都省掉
5
2
1
fscanf(fp, "%d %d %d", &h, &w, &num);
只是我想這種方式您也不滿意就是了,
如果設定檔的目的是要給其它使用者易讀、易寫的話,
這種方式就不適用。
--
YouLoveMe() ? LetItBe() : LetMeFree();
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.76.142
推 mself:謝謝~ 12/24 22:44
推 tomap41017:stricmp第一次看到,請問是標準函式嗎? 12/24 23:08
→ tomap41017:以查詢過但有點不清楚,是c or c++專有的??感謝樓主 12/24 23:08
推 LPH66:是 string.h 裡的函式沒錯 12/24 23:14
→ tropical72:其實我也不知道是不是標準,c++ reference 沒收錄, 12/24 23:18
→ tropical72:不過許多 compiler 都提供這個(目前還沒找到沒提供的) 12/24 23:19
推 Bencrie:如果設定檔很複雜,看要不要考慮用flex & bison XD 12/24 23:55