dポイントプレゼントキャンペーン実施中!

【C&C++】指定行のみファイル書き込み

先ほどの質問に答えてくれた方ありがとうございましたm(_ _)m
後日(明日?)改めてお礼を書かせていただきます。

次の質問なのですが、(csv)ファイルを読み込み指定した行だけ(csv)ファイルに書き込むやり方です。
ファイルの内容は「文字列(1),文字列(12),数値(9),文字列(30)」となっており
0,000000000000,000000000,あああ
1,111111111111,111111111,いいいいい
2,222222222222,222222222,ううう
0,333333333333,333333333,えええええええええええええええ
のように並んでいます。
このとき、最初の文字列が'0'の時のみファイルに書き込むにはどのような処理を行えばよいのでしょうか?

どうかよろしくお願いします。

A 回答 (4件)

念のため


>書いてある条件下限定なら 上の部分を
と書きましたが

>ファイルの内容は「文字列(1),文字列(12),数値(9),文字列(30)」となっており
この数字部分がバイト数だとした場合の話です(サンプル見る限りではバイト数と判断しました)
文字数だったらsの配列不足csvファイルの内容次第でまともに動かない条件が発生します
(1文字 = 1バイトではないということを理解してれば判る話)

その辺りは自分で治してください
    • good
    • 0

>while( ( ret = fscanf( fp, "%[^,],%d,%d,%f,%f", s, &n1, &n2, &f1, &f2 ) ) != EOF ){


>if (s == "test01"){
^^^^^^^^^^^^^^^^^^
>printf( "%s,%d,%d,%f,%f", s, n1, n2, f1, f2 );
>}

書いてある条件下限定なら 上の部分を
while( fgets( s, sizeof(s), fp ) != NULL) ){
>if (s[0] == '0'){
>printf( "%s", s );
>}
で十分のはず
書いてある条件外の条件が入ると色々問題箇所があります


>if (s == "test01"){
(C++ではあり得ますが)少なくても C の構文として
この条件に引っかかることはあり得ないはずです
strcmp関数を使うなどしてください
    • good
    • 0

全行を別ファイルに出力するプログラムはできているんですかね?



If文で先頭項目がゼロか判定し、成立するときだけ「出力する命令」を実行すればOK。

この回答への補足

ありがとうございます。
・・・・・・。

最初の1文字のやつをchar型のdivとかいう変数だったと仮定して、
if ( div == '0' )
のようにして、その後に出力の処理を書けば出来ますかね?

頭悪い質問ですいません(汗)

補足日時:2010/05/05 23:47
    • good
    • 0

>次の質問なのですが、(csv)ファイルを読み込み指定した行だけ(csv)ファイルに書き込むやり方です。



どのような処理をするか、さっき投稿されている質問とまったく同じだと思うんですけど、
どこら辺で困っているのかを具体的に補足にどうぞ。

この回答への補足

csvファイル「comma.csv」の内容
test01,10,11,1.0,1.1
test02,20,21,2.0,2.1
test03,30,31,3.0,3.1

これは参考にしたどこかのサイトのもので、ファイル出力ではなく標準出力のやつなんですが、

#include <stdio.h>

int main(void)
{
FILE *fp;
char *fname = "comma.csv";
char s[100];
int ret, n1, n2;
float f1, f2;

fp = fopen( fname, "r" );
if( fp == NULL ){
printf( "%sファイルが開けません\n", fname );
return -1;
}

while( ( ret = fscanf( fp, "%[^,],%d,%d,%f,%f", s, &n1, &n2, &f1, &f2 ) ) != EOF ){
printf( "%s,%d,%d,%f,%f", s, n1, n2, f1, f2 );
}

fclose( fp );
return 0;
}
というソースに、if文で最初の文字列指定すればその列だけ出るのかなと思って下のように試してみたんですが何にも出力されなくなってしまいました。どのようにすればよいのでしょう?

#include <stdio.h>

int main(void)
{
FILE *fp;
char *fname = "comma.csv";
char s[100];
int ret, n1, n2;
float f1, f2;

fp = fopen( fname, "r" );
if( fp == NULL ){
printf( "%sファイルが開けません\n", fname );
return -1;
}

while( ( ret = fscanf( fp, "%[^,],%d,%d,%f,%f", s, &n1, &n2, &f1, &f2 ) ) != EOF ){
if (s == "test01"){
^^^^^^^^^^^^^^^^^^
printf( "%s,%d,%d,%f,%f", s, n1, n2, f1, f2 );
}
}

fclose( fp );
return 0;
}

お忙しいでしょうがどなたかお願いしますm(_ _)m

補足日時:2010/05/05 23:37
    • good
    • 0

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