CSVファイルの中身は1行ごとに「名前,電話番号,住所」が記述されていてそれぞれの情報を構造体にコピーする形です。
線形リストで各個人のデータを管理したいと思っています。
構造体は以下のように宣言しました。
C言語
1typedef struct prifo_t { 2 char name[NAME_LEN]; /* 名前 */ 3 char tel[TEL_LEN]; /* 電話番号 */ 4 char address[ADD_LEN]; /* 住所 */ 5 struct prifo_t *next; 6}prifo;
https://www.grapecity.com/tools/support/powernews/column/clang/031/page02.htm
http://simd.jugem.jp/?eid=49
上記サイトを参考にしてCSVファイルの読み込みとリストの生成のイメージはつかめたのですが、
リストを生成しながらデータを格納する方法が分かりません。
以上、ご教授お願いします。
2017/08/16 追記
下記のようにコードを記述したところ正常に動作しました。
CSVファイル ほげ,000-0000-0000,ほげほげ ぴよ,111-1111-1111,ぴよぴよ ほげら,222-2222-2222,ほげらっちょ
C言語
1#include <stdio.h> 2#include <stdlib.h> 3 4#define NAME_LEN 40 5#define TEL_LEN 16 6#define ADD_LEN 200 7#define FNAME "address.csv" /* ファイルの名前 */ 8 9typedef struct prifo_t { 10 char name[NAME_LEN]; /* 名前 */ 11 char tel[TEL_LEN]; /* 電話番号 */ 12 char address[ADD_LEN]; /* 住所 */ 13 struct prifo_t *next; 14}prifo; 15 16int main(void) 17{ 18 FILE *fp; 19 prifo *header, *pfp; 20 21 /* ファイルを読み込む */ 22 if ((fp = fopen(FNAME, "r")) == NULL) 23 { 24 printf(FNAME"を開くことが出来ません\n"); 25 exit(1); 26 } 27 28 /* 構造体にファイルのデータをコピー */ 29 pfp = (prifo*)malloc(sizeof(prifo)); 30 header = pfp; /* リストの先頭のアドレスを記憶 */ 31 while (fscanf(fp, "%[^,],%[^,],%[^\n]\n", pfp->name, pfp->tel, pfp->address) != EOF) 32 { 33 pfp->next = (prifo*)malloc(sizeof(prifo)); 34 pfp = pfp->next; 35 } 36 pfp->next = NULL; 37 fclose(fp); 38 39 /* テスト用 */ 40 for (pfp = header; pfp->next != NULL; pfp = pfp->next) 41 { 42 printf("%s %s %s\n", pfp->name, pfp->tel, pfp->address); 43 } 44 return 0; 45}
実行結果 ほげ,000-0000-0000,ほげほげ ぴよ,111-1111-1111,ぴよぴよ ほげら,222-2222-2222,ほげらっちょ
追記終わり
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/15 14:45