こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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ファイルないようが以下であれば格納できるけど、すごく困ってます。
********************
あいう,かきく,さしす
たちつ,なにぬ,はひふ
まみむ,やゆよ,らりる
********************

投稿日時 - 2009-11-15 15:24:54

QNo.5449860

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

3に満たない場合にNullとするのか?
3を越える場合には、越えた部分を切り捨てるのか?
もしや登場するものすべてを集めて3個ずつにするのか?
このあたりの仕様が確定してないんでしょ?


一度、すべての項目を連結してから3個区切りするのがよさそうですね。
(テキストエディタで改行部分をカンマと置換するなど)

投稿日時 - 2009-11-15 20:10:58

ANo.1

「どのようなデータの時」「どうお困り」なのでしょうか?

ダブルクォートで囲まれている場合
"123","456","789"

列数が3ではない場合
"123","345"
"123","456","aaa","sss"

など?

投稿日時 - 2009-11-15 15:29:45

補足

まず、回答ありがとうございました。
ダブルクォートで囲まれてないです。
ファイル1例:
1,2,3
2,3,
1,
1,3
3,,

難しいと思いますがm(_ _)m
カンマの数と全部数値があるとしたら上の処理でいけるんですけど・・・
ファイル1の例みたいにカンマの数も合ってないし、データも
入ってるものもあるし、入ってないものもあるから

お願いいたします!

投稿日時 - 2009-11-15 17:21:50