ページ 11

ファイルポインタで内容を書き換える

Posted: 2009年11月04日(水) 02:37
by array
いつもお世話になっております。

自分のやりたいことが、上手く伝えることが出来ないのですが

ファイルを1行ずつ読み込んでいく場合、ファイルポインタを利用して
変数内に格納できますが

ファイルポインタから読み込まれるデータをあらかじめ書き換えること
はできないでしょうか

fopen()に「+」オプションを付けるのではなく、実際にファイルの内容は
書き換えず、fgets()を使用したときに、実際読み込まれるデータを変えたい
と思っています。
/* 読み込みテキスト*/
----- test.txt -----
aaaaa                 ← 読み込まれるデータ
bbbbb

/*   プログラム    */
#include <stdio.h>

int main(void)
{
	FILE *fp;  /* ファイルポインタ */
	char str[256];
	
	fp = fopen( "test.txt", "r" );
	if( fp == NULL )
	{
		return 1;
	}
	
	/* ここに内容を変える処理を */

	// 一行読み込む
	fgets( str, 256, fp );

	fclose( fp );

	// 表示
	printf( "%s", str );	// 「aaaaa」を「ccccc」など表示されるようにしたい

	return 0;
}

Re:ファイルポインタで内容を書き換える

Posted: 2009年11月04日(水) 08:19
by toyo
読み込んだ値が不要ならそもそも読み込む必要はないのでは
またcccccという値はどこから得たらいいのでしょうか
aaaaをccccではなくて実際にやりたいことを具体的に書いてもらったほうがわかりやすいですが

Re:ファイルポインタで内容を書き換える

Posted: 2009年11月04日(水) 08:47
by non
目的はわかりませんが、入力バッファの値を書き換えたいということみたいですね。
不可能ではないと思いますが、機種に依存するし、私にはわかりません。
目的によっては、他の方法があるのでは?

Re:ファイルポインタで内容を書き換える

Posted: 2009年11月04日(水) 13:11
by array
nonさんの言うように、入力バッファの値を書き換えたいと言うことだと思います。

ccccという値は、プログラム上で指定できれば良いと考えています。


目的を説明したら、ややこしくなるかと思いあえて省かせてもらいましたが用途は
PHPのテンプレートエンジンにつかいます。
{IF 名前}
   ブロック処理
{IFEND 名前}
{IFEND 名前}、この行は、どこまでがブロックなのか示すものなので、読み込む必要は
あるのですが、見つけた後は不要になるので読み込ませないようにしたいと考えています。


そのためには、ファイルの内容は書き換えず。ファイルから読み込む時の値が変る処理が
必要だと考えています。

Re:ファイルポインタで内容を書き換える

Posted: 2009年11月04日(水) 13:18
by Mist
難しく考えないで読み捨て(読んでも何もしない)ればいいだけだと思いますけど。
読み捨てだとまずい理由がありますか?

Re:ファイルポインタで内容を書き換える

Posted: 2009年11月04日(水) 13:26
by array
nonさん。有難うございます

入力バッファについて調べていたら、メモリ上に展開したファイル内容を行単位で処理できる
みたいです。

まだ試していませんが、大丈夫だと思います♪

Re:ファイルポインタで内容を書き換える

Posted: 2009年11月04日(水) 13:36
by array
Mistさん

投稿が重なってしまいましたorz

一応、IFの条件の真偽が

偽の場合、これはファイルポインタを{IFEND 名前}まで進めて読み捨てで大丈夫です。

真の場合、IFが入れ子になっていると不便です。

動作が処理がややこしくなります。

というのも、{IF 名前}を保持していて、{IFEND 名前}が
見つかった時に、読み捨てを行う処理だと、入れ子になっている場合、{IFEND 名前}が
見つかるまで、{IF 名前}の保持数が増え続けます。
さらには、{IFEND 名前}と一致するか比較する回数も増えて、効率も落ちてしまいます。

あまりイメージできないかもしれませんが、読み捨て処理は最終手段と考えています。

Re:ファイルポインタで内容を書き換える

Posted: 2009年11月04日(水) 13:47
by non
うまく行く方法が見つかったなら良かったですね。
うまくいったら、どうやったか載せてください。

私も、入力バッファを強制的に空にする方法とか知りたいと思いますし。

Re:ファイルポインタで内容を書き換える

Posted: 2009年11月04日(水) 13:57
by array
難航していますが外出しないといけないので帰宅後
再度ためしてみます。