看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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