csvファイルのカンマを数えて任意の文字列を抜き出すまでは出来たのですがそこから構造体に格納するまでがこちらのサイトでも検索しましたがよくわかりません。
ご指摘のほどよろしくお願いします。
csvデータ
番号,名前,住所,電話,年齢,性別
1,佐藤,東京,1234,33,A
2,田中,,5678,22,
3,坂井,名古屋,,,B
・
・
番号,住所,電話,年齢を格納する場合
struct k_data {
char no[4];/* 出来れば番号を右詰めにしたい */
char add[20];
int tel;
int age;
} kaiin[256];
/* 文字列を抜き出す↓ */
int main(void)
{
FILE *fp1,*fp2;
char dat[256];
char *ch;
int cnt;
/* fp1 ファイルオープン */
/* fp2 ファイルクローズ */
while (fgets(dat, 256, fp1) != NULL) {
cnt = 0;
for (ch = dat; *ch != '\0'; ch++) {
if (*ch ==',') {
if (cnt == 0) {
putc(*ch, fp2);
}
if (cnt == 2) {
putc(*ch, fp2);
}
if (cnt == 3) {
putc(*ch, fp2);
}
if (cnt == 4) {
putc('\n', fp2);
}
cnt++;
} else {
if (cnt == 0) {
putc(*ch, fp2);
}
if (cnt == 2) {
putc(*ch, fp2);
}
if (cnt == 3) {
putc(*ch, fp2);
}
if (cnt == 4) {
putc(*ch, fp2);
}
}
}
putc('\0', fp2);
}
fclose(fp2);
fclose(fp1);
}
No.1ベストアンサー
- 回答日時:
まず、取得データをファイルに書き込むのではなく、内部に格納バッファを用意してそこに一時バッファとして格納してください。
CSV仕様上、改行('\n')が要素の終端を表しますので、まず、CSVファイルから1行づつバッファに読み込み、そのバッファデータからカンマ検索実施の上各構造体メンバにセットすればよいと思います。
No.2
- 回答日時:
#include <stdio.h>
#include <stdlib.h>
struct k_data{
char no[4];
char add[20];
int tel;
int age;
};
int main(void)
{
FILE *fp = fopen("data.txt", "r");
struct k_data kaiin[256];
char tels[16], ages[16];
int i;
if(!fp) return 1;
for(i = 0; i < 256 ; i ++){
kaiin[i].no[0] = kaiin[i].add[0] = tels[0] = ages[0] = '\0';
if(fscanf(fp, "%[^,]%*c%*[^,]%*c%[^,]%*c%[^,]%*c%[^,]%*c%*[^\n] ",
kaiin[i].no, kaiin[i].add, tels, ages) == EOF) break;
kaiin[i].tel = strtol(tels, NULL, 10);
kaiin[i].age = strtol(ages, NULL, 10);
printf("(%4s)(%20s)(%8d)(%8d)\n",
kaiin[i].no, kaiin[i].add, kaiin[i].tel, kaiin[i].age);
}
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) Dateserialで データ抽出 2 2022/06/26 21:07
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ガンマ変換 C言語でプログラ...
-
複数ファイルの同時読み込みの...
-
CSVファイルの内容を構造体に格...
-
C言語でファイルの内容を strto...
-
CRC32の計算方法
-
ファイル出力で改行を入れたい!
-
【C言語】ファイルを読み込んで...
-
fopenでファイル名に、変数を使...
-
バイナリファイルの読み込み(C...
-
なぜCSQとCIP形式ではコ...
-
辞書順にソートしたいのですが...
-
c言語でのfscanfについて
-
エラーがわかりません、、
-
テキストファイル内に対して, ...
-
C言語 Segmentation fault
-
C言語 csv 配列
-
OpenGLによる描画内容をBMP出力
-
C言語でセグメンテーションエ...
-
バイナリファイルでの時刻表示
-
C言語にてXMLファイルから任意...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語でのfscanfについて
-
C言語でファイル読み書きを早く...
-
fopenでファイル名に、変数を使...
-
複数ファイルの同時読み込みの...
-
fgets( ) の返り値は何?
-
テキストファイル内に対して, ...
-
ファイルへの書込み処理が異常...
-
C言語にてXMLファイルから任意...
-
ファイル出力で改行を入れたい!
-
C言語でセグメンテーションエ...
-
エラーがわかりません、、
-
ガンマ変換 C言語でプログラ...
-
自己相関関数を求めるプログラ...
-
VisualStudioでのファイルの入...
-
同時にファイル読み込み 書き込み
-
c言語 ファイルから数字を読み...
-
大量の入力ファイルを扱うとき...
-
ファイルが読み込めない・・・
-
【C言語】ファイルを読み込んで...
-
a*(1-exp(-bx))+cの近似の方法
おすすめ情報