• 締切済み

csvファイルを構造体に格納したいです

ファイル内容 ******************** あいう,,さしす たちつ,なにぬ,はひふ まみむ,, あいう,win, ******************** #include <stdio.h> #include <string.h> #define MBF 256 struct tb{ char aaa[32]; char bbb[32]; char ccc[32]; }; int main(){ struct tb tbl[20]; struct tb *tp; int ntb,itb; FILE* fi; FILE* fo; char buff[MBF]; // 入力 fi = fopen("sample.csv","r"); // 検査省略 if( fi == NULL ){ printf( "%sファイルが開けません\n" ); return -1; } ntb = 0; while ( fgets(buff,MBF,fi ) != NULL ) { strcpy(tbl[ntb].aaa,strtok(buff,",")); strcpy(tbl[ntb].bbb,strtok(NULL,",")); strcpy(tbl[ntb].ccc,strtok(NULL,",")); ntb++; } fclose( fi ); // 出力 fo = fopen("csvo.csv","w"); if( fo == NULL ){ printf( "%sファイルが開けません\n" ); return -1; } for ( itb=0;itb<ntb;itb++ ) { tp = tbl+itb; fprintf(fo,"%s%s%s",tp->aaa,tp->bbb,tp->ccc); } fclose( fo ); return 0; } csvファイルないようが以下であれば格納できるけど、すごく困ってます。 ******************** あいう,かきく,さしす たちつ,なにぬ,はひふ まみむ,やゆよ,らりる ********************

みんなの回答

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

3に満たない場合にNullとするのか? 3を越える場合には、越えた部分を切り捨てるのか? もしや登場するものすべてを集めて3個ずつにするのか? このあたりの仕様が確定してないんでしょ? 一度、すべての項目を連結してから3個区切りするのがよさそうですね。 (テキストエディタで改行部分をカンマと置換するなど)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

「どのようなデータの時」「どうお困り」なのでしょうか? ダブルクォートで囲まれている場合 "123","456","789" 列数が3ではない場合 "123","345" "123","456","aaa","sss" など?

win09
質問者

補足

まず、回答ありがとうございました。 ダブルクォートで囲まれてないです。 ファイル1例: 1,2,3 2,3, 1, 1,3 3,, 難しいと思いますがm(_ _)m カンマの数と全部数値があるとしたら上の処理でいけるんですけど・・・ ファイル1の例みたいにカンマの数も合ってないし、データも 入ってるものもあるし、入ってないものもあるから お願いいたします!

関連するQ&A