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

C言語による「テキストファイルの読み書き(fprintf)」について質問です
ずぶの初心者ですが、既知のファイルの1行目に指定した文字列を付加させるプログラムを作りたいと思っています。
以下のように作りました。

------------------------------------------------------------

#include <stdio.h>

int main(void)
{

FILE *fp;

fp = fopen("test.csv","r+");

fprintf(fp,"コントロールカラム1,コントロールカラム2,・・・(略)・・・,コントロールカラム56\n");

fclose(fp);

return 0;
}

------------------------------------------------------------

このとき「test.csv」の内容が以下のようであったとします。(容量は1MBくらいです。)
001,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj
002,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj
~(略)
5000,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj

この状態でプログラムをコンパイルして実行すると、「test.csv」の内容が以下のようになってしまいます。(一行目が消える)
AAA,BBB,CCC,DDD,EEE
002,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj
~(略)
5000,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj

またcsvの行が増える度に妙な挙動になっていきます・・・(一行あいたり、先頭行が5行ほど消えたり)

希望する動作としては
コントロールカラム1,コントロールカラム2,・・・(略)・・・,コントロールカラム56
001,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj
002,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj
~(略)
5000,aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj

のようになるようにしたいのですがどのようにすればよいのでしょうか。
よろしくお願いします。
(使用ソフト:Borland C++ Compiler, Cpad)
参考にしたサイトの項目:http://homepage3.nifty.com/mmgames/c_guide/17-01 …

A 回答 (2件)

ファイルの書き込みの際、最後に追加することはできますが、最初に挿入することはできません。



読み込みと書き込みの2つのfp(ex. fpr,fpw)を準備し、fpwには最初に”コントロール・・・”を書き込み、その後、fprから読み込んだ内容を1行ずつ書き込んでください。
    • good
    • 0
この回答へのお礼

#define _CRT_SECURE_NO_DEPRECATE 1
#include <stdio.h>

int main(void)
{
FILE *fp, *fp2;
char buf[81];

fp = fopen( "test.csv", "r" );
if( fp == NULL )
{
puts( "test.csvが開けません" );
return 1;
}
fp2 = fopen( "test2.csv", "w" );
fprintf(fp,"コントロールカラム1,コントロールカラム2,・・・(略)・・・,コントロールカラム56\n");
if( fp2 == NULL )
{
puts( "test2.csvが開けません" );
return 1;
}


while( 1 )
{
fgets( buf, 81, fp );
if( feof( fp ) ){ break; }
fputs( buf, fp2 );
}

fclose( fp2 );
fclose( fp );
return 0;
}

------------------------------------------------------------
以上のようにする事で希望の動作ができました。
一度読み込んでから書き込む、という発想がなく、助かりました。
ありがとうございます。

お礼日時:2008/07/14 12:56

>既知のファイルの1行目に指定した文字列を付加させるプログラムを作りたいと思っています。


であれば、書き出し(fprintf)ではなく、一連の動作として「読み込み」と「追加の処理」を行った後に「書き出し」なんだけど、
その部分のソースはなぜないの?
    • good
    • 0
この回答へのお礼

「末尾に追加」が出来るなら「先頭に挿入」もできるんじゃないか、
との考えが頭の中の前提にあったため、
一度読み込み、書き出すという発想がありませんでした。
ありがとうございます。

お礼日時:2008/07/14 12:57

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