CSVファイルの読み書き

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
shiro4ao

CSVファイルの読み書き

#1

投稿記事 by shiro4ao » 15年前

CSVファイルの読み書きを勉強しています。
しかし、実行すると途中で止まってしまいました。(応答なし?)
何がおかしいのでしょうか・・・?

=================ここから=====================================
#include <stdio.h>

int main(void)
{
FILE *fpin,*fpout;
char *fnameout = "export.csv";
char *fnamein = "import.csv";
char s1,s2,s3;
int n11,n12,n13,n21,n22,n23,n31,n32,n33;

fpin = fopen(fnamein, "r" );
if( fpin == NULL ){
printf( "ファイルが開けません\n");
return -1;
}
fscanf( fpin, "%s,%d,%d,%d\n", &s1,&n11,&n12,&n13);
fscanf( fpin, "%s,%d,%d,%d\n", &s2 ,&n21,&n22,&n23);
fscanf( fpin, "%s,%d,%d,%d\n", &s3 ,&n31,&n32,&n33);
fclose( fpin);

fpout = fopen(fnameout, "w" );
if( fpout == NULL ){
printf( "ファイルが開けません\n");
return -1;
}
fprintf( fpout, "%s,%d,%d,%d\n", s1,n11,n12,n13);
fprintf( fpout, "%s,%d,%d,%d\n", s2,n21,n22,n23 );
fprintf( fpout, "%s,%d,%d,%d\n", s3,n31,n32,n33);
fclose( fpout );

return 0;
}
==============ここまで==================================
=============import.csv=======
test1,1,4,7
test2,2,5,8
test3,3,6,9
=============ここまで========
画像

シエル

Re:CSVファイルの読み書き

#2

投稿記事 by シエル » 15年前

char型の変数に入りきってない

shiro4ao

Re:CSVファイルの読み書き

#3

投稿記事 by shiro4ao » 15年前

シエルさんありがとうございます!
charのs1,s2,s3を配列にしました。

================= ここから=====================================
#include <stdio.h>

int main(void)
{
FILE *fpin,*fpout;
char *fnameout = "export.csv";
char *fnamein = "import.csv";
char s1[10],s2[10],s3[10]; //変更箇所
int n11,n12,n13,n21,n22,n23,n31,n32,n33;

fpin = fopen(fnamein, "r" );
if( fpin == NULL ){
printf( "ファイルが開けません\n");
return -1;
}
fscanf( fpin, "%s,%d,%d,%d\n", &s1,&n11,&n12,&n13);
fscanf( fpin, "%s,%d,%d,%d\n", &s2 ,&n21,&n22,&n23);
fscanf( fpin, "%s,%d,%d,%d\n", &s3 ,&n31,&n32,&n33);
fclose( fpin);

fpout = fopen(fnameout, "w" );
if( fpout == NULL ){
printf( "ファイルが開けません\n");
return -1;
}
fprintf( fpout, "%s,%d,%d,%d\n", s1,n11,n12,n13);
fprintf( fpout, "%s,%d,%d,%d\n", s2,n21,n22,n23 );
fprintf( fpout, "%s,%d,%d,%d\n", s3,n31,n32,n33);
fclose( fpout );

return 0;
}
==============ここまで==================================

実行できたようでしたが、結果がおかしなことになりました・・・
============export.csv============================
,2,0,4253508
,4215195,1245016,4253484
test03,3,6,9,5,4251648,512
===========ここまで==============================

shiro4ao

Re:CSVファイルの読み書き

#4

投稿記事 by shiro4ao » 15年前

申し訳ありません。自己解決しました。

文字列の部分は","をふくんでしまうようなので、","を含まないようにスレパ良いようでした。
具体的には
==============================================================
fscanf( fpin, "%[^,],%d,%d,%d\n", &s1,&n11,&n12,&n13);
fscanf( fpin, "%[^,],%d,%d,%d\n", &s2 ,&n21,&n22,&n23);
fscanf( fpin, "%[^,],%d,%d,%d\n", &s3 ,&n31,&n32,&n33);
=============================================================
%[^]を用いればうまくいきました。

シエルさんありがとうございました。

シエル

Re:CSVファイルの読み書き

#5

投稿記事 by シエル » 15年前

%[/url]のフォーマット指定子って、スキャン集合って言うんですね。
まったく知りませんでした。便利ですね。
指摘した私がこんなこと言うのはすごい恥ずかしいですが、ありがとうございます(笑)

shiro4aoさんがこのフォーマット指定子を使わなかったら、
私がこのフォーマット指定子を知るのがいつになったことやら…

shiro4ao

Re:CSVファイルの読み書き

#6

投稿記事 by shiro4ao » 15年前

なんとか解決できました!
「解決」にするのを忘れていました・・・
ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る