Re: [問題] linux C/C++ 讀設定檔

看板C_and_CPP作者 (藍影)時間15年前 (2010/12/24 21:54), 編輯推噓4(404)
留言8則, 5人參與, 最新討論串2/3 (看更多)
※ 引述《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

12/24 22:44, , 1F
謝謝~
12/24 22:44, 1F

12/24 23:08, , 2F
stricmp第一次看到,請問是標準函式嗎?
12/24 23:08, 2F

12/24 23:08, , 3F
以查詢過但有點不清楚,是c or c++專有的??感謝樓主
12/24 23:08, 3F

12/24 23:14, , 4F
是 string.h 裡的函式沒錯
12/24 23:14, 4F

12/24 23:18, , 5F
其實我也不知道是不是標準,c++ reference 沒收錄,
12/24 23:18, 5F

12/24 23:19, , 6F
不過許多 compiler 都提供這個(目前還沒找到沒提供的)
12/24 23:19, 6F

12/24 23:55, , 7F
如果設定檔很複雜,看要不要考慮用flex & bison XD
12/24 23:55, 7F
文章代碼(AID): #1D5AOC24 (C_and_CPP)
文章代碼(AID): #1D5AOC24 (C_and_CPP)