![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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 …
No.1ベストアンサー
- 回答日時:
ファイルの書き込みの際、最後に追加することはできますが、最初に挿入することはできません。
読み込みと書き込みの2つのfp(ex. fpr,fpw)を準備し、fpwには最初に”コントロール・・・”を書き込み、その後、fprから読み込んだ内容を1行ずつ書き込んでください。
#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;
}
------------------------------------------------------------
以上のようにする事で希望の動作ができました。
一度読み込んでから書き込む、という発想がなく、助かりました。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Visual Basic(VBA) 【VBA】特定の文字で改行(次の行)に行きたい。 3 2022/04/11 17:20
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- JavaScript 指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードを教えてください 2 2023/04/27 17:58
- JavaScript JavaScript|特定URLだった時、特定の要素を変更するコードの書き方を教えてほしいです 2 2023/08/25 21:43
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vb.netで画面のコントロールId...
-
カメラスクロールするのを動画...
-
VBAのエラーについて、”実行時...
-
[C#] ContextMenuStrip を呼び...
-
ASP.netのエラー 2005から2008...
-
エクセル・VBA CheckBoxのオブ...
-
コントロール配列と同じような...
-
C#で角が丸いテキストボックス
-
chr関数の呼び出しで「プロ...
-
もしフォームヘッダーにコント...
-
WebBrowserコントロールの基本...
-
Groupboxの配下のコントロール...
-
ACCESS2010のVBAでフォーム内ク...
-
c# イベントハンドラ 統一
-
C# Form上に配置されたコントロ...
-
Excelで、コンボボックスで選択...
-
Visual Basic 6.0 でPanelを使...
-
ACCESSフォームにコント...
-
VBA ユーザーフォームの Keypre...
-
Excelコマンドボタン名を変数に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル・VBA CheckBoxのオブ...
-
カメラスクロールするのを動画...
-
vb.netで画面のコントロールId...
-
C#,vb.netで業務用アプリ開発と...
-
EXCELでactivexコントロールを...
-
フォーム上の現在アクティブな...
-
ExcelVBAでListViewが使用できない
-
コンボボックスの文字によるif...
-
C#で角が丸いテキストボックス
-
エクセルVBAでオプションボタン...
-
ユーザーフォームで動的(Me.Con...
-
VBAのフォームでTextBoxがいっ...
-
アクセス特有の書き方?
-
エクセル コントロールツール...
-
間違えて配置してしまったコン...
-
変数をコントロール型で使用す...
-
(VBA)スピンボタンの大量...
-
Labelコントロールの(左右)余...
-
excelのリストボックスで選択し...
-
Excel VBA で Richtextboxを使...
おすすめ情報