テキストファイルの内容を一部書き換える

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

テキストファイルの内容を一部書き換える

#1

投稿記事 by ichi » 13年前

C言語で、テキストファイルを読み込むだけでなく、さらにある条件で内容を書き変えたいのですが、書き方が分かりません。

テキストの内容が、左に番号、右に(1か0)が書かれていて、それが番号100まで続いています。

1 0
2 0
3 1
4 0
5 1
・・・
10 1
・・・
100 1

例えば今は番号4のところが0となっていますが、そこを1に書き変えるにはどのように書けば良いのか教えて頂けますか。よろしくお願いします。

アバター
へろりくしょん
記事: 92
登録日時: 13年前
住所: 福岡

Re: テキストファイルの内容を一部書き換える

#2

投稿記事 by へろりくしょん » 13年前

C にはファイルの途中だけを書き換えるなんて芸当は出来ませんので、一度全部読んで、ちょこちょこっと書き換えて、で、全部書き出す。 という方法を採るのが一般的です。

texter

Re: テキストファイルの内容を一部書き換える

#3

投稿記事 by texter » 13年前

読み込むファイルを"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;
}

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: テキストファイルの内容を一部書き換える

#4

投稿記事 by ISLe » 13年前

'0'を'1'に書き換えるだけならファイルの該当データの上書きで済ますこともできます。
fopenでファイルを"r+b"モードで開いてfseekで書き換えたいデータの位置を指定してfputcで上書きしてください。
バイナリモードで文字コードや改行を適切に扱う必要があります。

閉鎖

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