• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:INIファイルからのデータ読込みについて)

INIファイルからのデータ読込みについて

このQ&Aのポイント
  • INIファイルからのデータ読込み方法とデータの格納方法について教えてください。
  • セクションで区切られたINIファイルを読み込み、各種変数にデータを格納する方法を教えてください。
  • INIファイルのデータを読み込んで初期値設定に利用する方法について詳しく教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kb-nike
  • ベストアンサー率36% (72/200)
回答No.3

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; }

noname#107905
質問者

お礼

kb-nikeさん、回答ありがとうございました。 コメントいただいたソースを元に、実行仕様にアレンジしたところ、無事動きました。 ちなみに、fgets()の引数lineとfpが逆のようです。 とても助かりました。 ありがとうございました。

その他の回答 (4)

  • hidebun
  • ベストアンサー率50% (92/181)
回答No.5

こんなのもあるけど。 http://code.jellycan.com/simpleini/ クロスプラットフォームでMIT License.

  • kb-nike
  • ベストアンサー率36% (72/200)
回答No.4

訂正です。 [NETWORK]のセクションの3回目のfgets()とAnumへのコピーは不要です。

回答No.2

同志社大学のかなり古いゼミの内容が公開されています。 見た感じANSI準拠ぽいんで使えるんでは? ライセンスとかは解りません。 http://mikilab.doshisha.ac.jp/dia/seminar/2001/pdf/program1.pdf

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「INI ファイルの読み込み」と「読み込んだ値を適切に設定する」のとでは違うんだけど, 例えば Boost.PropertyTree で読み込んでなんとかする.

関連するQ&A