表題の実現方法について、どうしてもわからなかったので、質問を挙げさせていただきます。
会社から、INIファイルの内容を読み込んで、初期値設定に利用するように指示があり、実現方法がわからず、非常に困っています。
ライブラリを購入せずに、対応したいです。
どなたか、本内容にお詳しい方、ご教授下さい。
◆開発環境
言語:C
OS:Linux(Ubuntu 9.10)
IDE:eclipse
コンパイラ:gcc 4.4
◆質問
1.セクションで区切られたIniファイルを読み込み、読み込んだデータを各種変数に格納したい。
《想定Iniファイル》
Test.ini
[NETWORK]
IPADDR=192.***.***.***.*** → char *IPADDRに格納したい
PORT=**** → long PORTに格納したい
[PRM1]
Anum=*** → char *Anumに格納したい
Bnum=*** → char *Bnumに格納したい
Cnum=*** → char *Cnumに格納したい
[PRM2]
TIME1=****
TIME2=****
2.上記1の処理を関数とし、main関数からコールして、mainプログラムの起動時にINIファイル内容を読み込みたい。
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;
}
kb-nikeさん、回答ありがとうございました。
コメントいただいたソースを元に、実行仕様にアレンジしたところ、無事動きました。
ちなみに、fgets()の引数lineとfpが逆のようです。
とても助かりました。
ありがとうございました。
No.2
- 回答日時:
同志社大学のかなり古いゼミの内容が公開されています。
見た感じANSI準拠ぽいんで使えるんでは?
ライセンスとかは解りません。
http://mikilab.doshisha.ac.jp/dia/seminar/2001/p …
No.1
- 回答日時:
「INI ファイルの読み込み」と「読み込んだ値を適切に設定する」のとでは違うんだけど, 例えば Boost.PropertyTre
e で読み込んでなんとかする.お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- C言語・C++・C# このプログラミング誰か教えてくれませんか 2 2022/05/14 09:45
- C言語・C++・C# このプログラミング誰か教えてくれませんか 3 2022/05/13 17:27
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
GetPrivateProfileStringでiniファイル読込む処理を詳しく知りたいのですが・・・
C言語・C++・C#
-
C for Linuxでの設定ファイル読み込み
C言語・C++・C#
-
iniファイルのキーと値を取得するにはどうすれば?
C言語・C++・C#
-
-
4
設定ファイルを扱うライブラリについて
C言語・C++・C#
-
5
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
6
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
7
char*を初期化したいのですが
C言語・C++・C#
-
8
C++ 構造体の一括初期化 {0}
C言語・C++・C#
-
9
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
10
fopenで別ディレクトリにファイルをオープンしたい
C言語・C++・C#
-
11
charからLPTSTRへの変換方法
C言語・C++・C#
-
12
コマンド(例えばls)の出力結果を文字列で取得するプログラムの作成方法
C言語・C++・C#
-
13
Linuxでのスレッド間メッセージについて
C言語・C++・C#
-
14
#include <Windows.h>というヘッダファイルについて
C言語・C++・C#
-
15
C言語で、メモリを解放しないで終わるプログラム
C言語・C++・C#
-
16
_T(abcdef") の_Tってなんですか?"
C言語・C++・C#
-
17
関数から配列を返すには?
C言語・C++・C#
-
18
cout と cerrの違い
C言語・C++・C#
-
19
絶対パスの取得について
C言語・C++・C#
-
20
char型配列の最大要素数
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
1コールだけ鳴るけど切れる電話...
-
相手側の携帯が電源切れてる時...
-
ラインナップとラインアップは...
-
Windowsのバッチファイルで正規...
-
生産ラインの品質を表す直行率...
-
いきなりラインのトークに「新...
-
face book で女性の方からline ...
-
LINE追加で「該当するユーザー...
-
ある男子から、ライン追加され...
-
よく05(04)lineって見かけるん...
-
既婚女性にラインを聞くことに...
-
遠くにいる友達とLINE交換する...
-
python2.6で「cv2」のNameerror...
-
グループラインから個人宛に
-
半年付き合ってきた彼女をブロ...
-
「一点鎖線」を英語でいうと?
-
lineのワン切り、なぜ?
-
まだそんなに親しくない相手と...
-
あの噂の世界三大チェーンメー...
-
「一番上、真ん中、下」を示す英語
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
1コールだけ鳴るけど切れる電話...
-
相手側の携帯が電源切れてる時...
-
LINE追加で「該当するユーザー...
-
よく05(04)lineって見かけるん...
-
いきなりラインのトークに「新...
-
face book で女性の方からline ...
-
ラインナップとラインアップは...
-
Windowsのバッチファイルで正規...
-
遠くにいる友達とLINE交換する...
-
ある男子から、ライン追加され...
-
生産ラインの品質を表す直行率...
-
質問です。 先日クラスの女子に...
-
既婚女性にラインを聞くことに...
-
lineのワン切り、なぜ?
-
「一番上、真ん中、下」を示す英語
-
python flask から fastapiへの...
-
LINEで好きな人が「笑」を全然つ...
-
まだそんなに親しくない相手と...
-
先輩のライン(男性)を追加した...
-
スマホに外国の電話番号を登録...
おすすめ情報