- ベストアンサー
INIファイルからのデータ読込みについて
- INIファイルからのデータ読込み方法とデータの格納方法について教えてください。
- セクションで区切られたINIファイルを読み込み、各種変数にデータを格納する方法を教えてください。
- INIファイルのデータを読み込んで初期値設定に利用する方法について詳しく教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
Iniファイルのフォーマットが固定されているものとして…: (エラー処理は省いています。) (コンパイル確認はしていません:C標準関数を使っています。) #include <stdio.h> #include <stdlib.h> #include <string.h> #define LINELEN 256 typedef struct { //[NETWORK] char *IPADDR; long PORT; //[PRM1] char *Anum; char *Bnum; char *Cnum; //[PRM2] // ........ } t_Ini; int ReadIni(char *fname, t_Ini *IniData); int ReadIni(char *fname, t_Ini *IniData) { FILE *fp; char line[LINELEN]; char stemp[LINELEN]; if((fp = fopen(fp, "rt")) == NULL) return 0; while(fgets(fp, LINELEN, line) != NULL){ line[strlen(line)] = '\0'; if(strstr(line, "[NETWORK]") == line){ fgets(fp, LINELEN, line); line[strlen(line)] = '\0'; strcpy(IniData->IPADDR, line + strlen("IPADDR=")); fgets(fp, LINELEN, line); line[strlen(line)] = '\0'; IniData->PORT = strtol(line, NULL, 0); fgets(fp, LINELEN, line); line[strlen(line)] = '\0'; strcpy(IniData->Anum, line + strlen("Anum=")); } if(strstr(line, "[PRM1]") == line){ fgets(fp, LINELEN, line); line[strlen(line)] = '\0'; strcpy(IniData->Anum, line + strlen("Anum=")); fgets(fp, LINELEN, line); line[strlen(line)] = '\0'; strcpy(IniData->Bnum, line + strlen("Bnum=")); fgets(fp, LINELEN, line); line[strlen(line)] = '\0'; strcpy(IniData->Cnum, line + strlen("Cnum=")); } //.............................. } fclose(fp); return 1; } int main( int argc, char *argv[] ) { char *fname = "test.ini" t_Ini IniData; ReadIni(fname, IniData); return 0; }
その他の回答 (4)
- hidebun
- ベストアンサー率50% (92/181)
こんなのもあるけど。 http://code.jellycan.com/simpleini/ クロスプラットフォームでMIT License.
- kb-nike
- ベストアンサー率36% (72/200)
訂正です。 [NETWORK]のセクションの3回目のfgets()とAnumへのコピーは不要です。
- ICE_FALCON
- ベストアンサー率56% (63/111)
同志社大学のかなり古いゼミの内容が公開されています。 見た感じANSI準拠ぽいんで使えるんでは? ライセンスとかは解りません。 http://mikilab.doshisha.ac.jp/dia/seminar/2001/pdf/program1.pdf
- Tacosan
- ベストアンサー率23% (3656/15482)
「INI ファイルの読み込み」と「読み込んだ値を適切に設定する」のとでは違うんだけど, 例えば Boost.PropertyTree で読み込んでなんとかする.
お礼
kb-nikeさん、回答ありがとうございました。 コメントいただいたソースを元に、実行仕様にアレンジしたところ、無事動きました。 ちなみに、fgets()の引数lineとfpが逆のようです。 とても助かりました。 ありがとうございました。