
表題の実現方法について、どうしてもわからなかったので、質問を挙げさせていただきます。
会社から、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も見ています
-
C for Linuxでの設定ファイル読み込み
C言語・C++・C#
-
GetPrivateProfileStringでiniファイル読込む処理を詳しく知りたいのですが・・・
C言語・C++・C#
-
ファイル書込みで一行もしくは部分的に上書きする
PHP
-
-
4
C言語で、メモリを解放しないで終わるプログラム
C言語・C++・C#
-
5
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
6
C言語 配列の長さの上限
C言語・C++・C#
-
7
iniファイルのキーと値を取得するにはどうすれば?
C言語・C++・C#
-
8
wsprintf関数の使い方について
C言語・C++・C#
-
9
設定ファイルを扱うライブラリについて
C言語・C++・C#
-
10
int型の内容をbyteの配列にコピー
Java
-
11
文字列から空白を取り除きたいのですが
C言語・C++・C#
-
12
C言語での引数の省略方法
C言語・C++・C#
-
13
コマンド(例えばls)の出力結果を文字列で取得するプログラムの作成方法
C言語・C++・C#
-
14
ヘッダーファイル『windows.h』について
C言語・C++・C#
-
15
fgetsで拾われる改行文字を削除したい
C言語・C++・C#
-
16
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
17
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
18
16進数を10進数に簡単に変換する関数は?
C言語・C++・C#
-
19
Windows上で、シグナル(SIGTERM )を送信したい(C、C++)
C言語・C++・C#
-
20
[C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
相手側の携帯が電源切れてる時...
-
1コールだけ鳴るけど切れる電話...
-
風俗に行ったとして、そこで嬢...
-
会社の先輩とLINE プライベート...
-
毎月記念日をlineで祝うのって...
-
遠くにいる友達とLINE交換する...
-
いきなりラインのトークに「新...
-
ラインの 非表示削除について質...
-
face book で女性の方からline ...
-
LINEで好きな人が「笑」を全然つ...
-
LINE for iPad の認証について
-
半年付き合ってきた彼女をブロ...
-
lineでブロックした相手は、以...
-
line の引き継ぎ方法を教えてく...
-
よく05(04)lineって見かけるん...
-
アセンブルでエラー「error: in...
-
先輩のライン(男性)を追加した...
-
ある男子から、ライン追加され...
-
固定電話を解約しようと思い、N...
-
ラインナップとラインアップは...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
相手側の携帯が電源切れてる時...
-
1コールだけ鳴るけど切れる電話...
-
face book で女性の方からline ...
-
ラインナップとラインアップは...
-
遠くにいる友達とLINE交換する...
-
Windowsのバッチファイルで正規...
-
よく05(04)lineって見かけるん...
-
「一番上、真ん中、下」を示す英語
-
生産ラインの品質を表す直行率...
-
python flask から fastapiへの...
-
いきなりラインのトークに「新...
-
ある男子から、ライン追加され...
-
毎月記念日をlineで祝うのって...
-
3ヶ月前に別れた彼とはカカオト...
-
タイトルの改行
-
会社の先輩とLINE プライベート...
-
まだそんなに親しくない相手と...
-
法線(normal line)はなぜそう...
-
LINEで好きな人が「笑」を全然つ...
-
2000年生まれなのですが 00line...
おすすめ情報