電子書籍の厳選無料作品が豊富!

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

A 回答 (2件)

3に満たない場合にNullとするのか?


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


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

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



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

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

など?

この回答への補足

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

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

お願いいたします!

補足日時:2009/11/15 17:21
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!