C言語関係掲示板

過去ログ

No.413.テキストファイルの書き換え

[戻る] [ホームページ]
No.2870

テキストファイルの更新について
投稿者---シスコ(2002/10/06 14:32:49)


こんにちは。シスコです。

テキストファイルの更新につて
教えてください。

Sample1.txt----------


TEST POSITION=12



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

上記のような内容のテキストファイルがあって
その中の、【TEST POSITION=12】という行を
【TEST POSITION=Nothing】と書き換えたいです。
文字の長さ(フィールド?DBじゃありません)
が同じでない場合、ランダムアクセスじゃ
だめで、新規に作成するということになるのですか?
それで、古いファイルを削除?でしょうか?

もし、よろしければ参考ソースをご掲示ください。

よろしくお願いします。


No.2872

Re:テキストファイルの更新について
投稿者---kamadoma(2002/10/06 20:26:10)


>こんにちは。シスコです。
>
>テキストファイルの更新につて
>教えてください。
>
>Sample1.txt----------
>・
>・
>TEST POSITION=12
>・
>・
>・
>---------------------
>
>上記のような内容のテキストファイルがあって
>その中の、【TEST POSITION=12】という行を
>【TEST POSITION=Nothing】と書き換えたいです。
>文字の長さ(フィールド?DBじゃありません)
>が同じでない場合、ランダムアクセスじゃ
>だめで、新規に作成するということになるのですか?
>それで、古いファイルを削除?でしょうか?
>
>もし、よろしければ参考ソースをご掲示ください。
>
>よろしくお願いします。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define IN_FILE  "c:\\sample1.txt"
#define OUT_FILE "c:\\sample2.txt" 

FILE *fileOpen(char *,char *);
void stringSeparate(char *,char,char *);

int main(void)
{
	FILE *in_fp;
	FILE *out_fp;
	char line[256];
	char leftString[256];

	/*ファイルオープン処理*/
	in_fp = fileOpen(IN_FILE,"r");
	out_fp = fileOpen(OUT_FILE,"w");

	/*ファイル読み込み処理*/
	while(fgets(line,256,in_fp) != NULL){
		if(memcmp(line,"TEST POSITION=",14) == 0){
			/*文字'='を区切り文字として、左側の文字列を取得する*/
			stringSeparate(line,'=',leftString);

			/*ファイル出力*/
			fprintf(out_fp,"%s=NOTHING\n",leftString);
		}
		else{
			/*そのまま出力*/
			fprintf(out_fp,"%s",line);
		}
	}

	/*ファイルクローズ処理*/
	fclose(in_fp);
	fclose(out_fp);

	/*入力ファイルを削除*/
	remove(IN_FILE);

	/*リネームをかける*/
	rename(OUT_FILE,IN_FILE);

	return 0;
}

FILE *fileOpen(char *p_filename,char *p_mode)
{
	FILE *fp;

	fp = fopen(p_filename,p_mode);
	if(fp == NULL){
		fprintf(stderr,"ファイル[%s]を開く事ができません。\n",p_filename);
		exit(1);
	}

	return fp;
}


void stringSeparate(char *p_line,char kugiriMoji,char *p_leftString)
{
	char tempLeftString[256];
	int i=0;

	/*文字列の終りまで*/
	while(*p_line != '\0'){
		/*文字'='でないとき*/
		if(*p_line != kugiriMoji){
			/*ワーク領域に一文字ずつ格納*/
			tempLeftString[i] = *p_line;

			/*ポインタを進める*/
			p_line++;

			/*添え字を進める*/
			i++;
		}
		else{
			/*左側の文字列取得*/
			strcpy(p_leftString,tempLeftString);
			p_leftString[i] = '\0';

			return;

		}
	}
}




No.2873

Re:テキストファイルの更新について
投稿者---シスコ(2002/10/06 22:37:52)


kamadomaさん。こんにちわ。
前回の質問に続いてご回答いただきありがとう御座います。

無事目的を達成できました。
やはり、今回のような更新を行う場合は、
一度違う名前で別のファイを作る必要が
あるのですね。

また、ソースの内容ですが、ご丁寧な
コメントをつけていただいたおかげで、
なんとか理解できそうです。

この調子でCの勉強をがんばりたいです。

ありがとうございました。

m(__)m