C言語で、テキストファイルを読み込むだけでなく、さらにある条件で内容を書き変えたいのですが、書き方が分かりません。
テキストの内容が、左に番号、右に(1か0)が書かれていて、それが番号100まで続いています。
1 0
2 0
3 1
4 0
5 1
・・・
10 1
・・・
100 1
例えば今は番号4のところが0となっていますが、そこを1に書き変えるにはどのように書けば良いのか教えて頂けますか。よろしくお願いします。
テキストファイルの内容を一部書き換える
Re: テキストファイルの内容を一部書き換える
C にはファイルの途中だけを書き換えるなんて芸当は出来ませんので、一度全部読んで、ちょこちょこっと書き換えて、で、全部書き出す。 という方法を採るのが一般的です。
Re: テキストファイルの内容を一部書き換える
読み込むファイルを"data.txt"、出力するファイルを"temp.txt"ます。C言語ではファイルの一部を消したりできないので、一時的に新しくファイルを作成することになります。作成したファイルを煮るなり焼いたり(temp.txtの内容をdata.txtに上書きしたり)、すればあなたのお望みどおりにできます。
"data.txt" を読み込んで "temp.txt" に 番号4の0の部分 を 1 に直して書き込むプログラムをC言語のコードで書くと次のようになります。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int a,b;
FILE *out,*inp;
inp = fopen("data.txt","r");
out = fopen("temp.txt","w");
// ファイル終端まで読み込む
while(fscanf(inp,"%d %d",&a,&b) != EOF) {
if(a == 4) b = 1;
fprintf(out,"%d %d\n",a,b);
}
return EXIT_SUCCESS;
}
"data.txt" を読み込んで "temp.txt" に 番号4の0の部分 を 1 に直して書き込むプログラムをC言語のコードで書くと次のようになります。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int a,b;
FILE *out,*inp;
inp = fopen("data.txt","r");
out = fopen("temp.txt","w");
// ファイル終端まで読み込む
while(fscanf(inp,"%d %d",&a,&b) != EOF) {
if(a == 4) b = 1;
fprintf(out,"%d %d\n",a,b);
}
return EXIT_SUCCESS;
}
Re: テキストファイルの内容を一部書き換える
'0'を'1'に書き換えるだけならファイルの該当データの上書きで済ますこともできます。
fopenでファイルを"r+b"モードで開いてfseekで書き換えたいデータの位置を指定してfputcで上書きしてください。
バイナリモードで文字コードや改行を適切に扱う必要があります。
fopenでファイルを"r+b"モードで開いてfseekで書き換えたいデータの位置を指定してfputcで上書きしてください。
バイナリモードで文字コードや改行を適切に扱う必要があります。