テキストファイルの一部を変更して上書きするには?


YOSHIKI  2003-10-26 07:53:33  No: 5431  IP: [192.*.*.*]

テキストファイルの一部を変更して更新するにはどのようにすればいいですか?
ファイルの読み書きは理解しているのですが

例:
test.txtの中身が
Visual Basic
Visual C++
Borand Delphi

で、
Visual Basic
Perl
Borand Delphi

にするみたいな感じです。
何か情報ありましたらお願いします。

編集    削除
たかみちえ  URL  2003-10-26 08:01:59  No: 5432  IP: [192.*.*.*]

テキストファイルとはそういうものです。ファイルを全部読むか、それとも途中まで読んでやめるかしかできません(途中の行から読み始めて、途中でやめるということはできない)。

  ファイルをいったん全文読み込んで、変更したい部分を見つけて、書き換えて上書き保存

  しかないと思います。

編集    削除
YOSHIKI  2003-10-26 08:19:16  No: 5433  IP: [192.*.*.*]

さっそくのレスありがとうございます。

とりあえず、
Readln(txt, str);
でstrに読み込んだ文字列を収納しています。
そのあと、Memo1に書き出しています。(ちゃんと読めてるか確認のため(^^;))

で、さっきの例で言うと、
Visual Basic
Visual C++
Borand Delphi
のVisual C++の部分だけPerlに変更して上書きをしたいのです。
その「上書き」というのはどのようにすればいいのですか?
一度全部読み込んでそれをstr1、str2、str3へそれぞれ収納して、(今回の例では)str2がVisual C++なのでtsr2をPerlに変更し、Writelnでstr1、str2、str3としていまして…

編集    削除
たかみちえ  URL  2003-10-26 08:29:40  No: 5434  IP: [192.*.*.*]

そのまま全部読み込んで、最後に変更を加えた後、書き込み処理をすればいいだけです。

  ところで、TStringListは使わないのですか?(最初にあんなこと言っておいて、何なのですけど…)
わざわざ確認にTMemoコンポーネントを使ってるのならば、
それのほうが楽で確実だと思いますけど…。

編集    削除
LupinⅢ  URL  2003-10-26 10:23:45  No: 5435  IP: [192.*.*.*]

TStringListのLoadFromFileメソッドでファイルをロードできます。
その後にループ処理で文字列置き換え処理を行い、
最後にSaveToFileメソッドで上書きすればOKだと思います。

編集    削除
たなか  2003-11-14 02:36:44  No: 5436  IP: [192.*.*.*]

>テキストファイルとはそういうものです。ファイルを全部読むか、
>それとも途中まで読んでやめるかしかできません(途中の行から読み始めて、
>途中でやめるということはできない)。
これはちょっと違います。
ヘルプの「ファイル管理ルーチン」を参照してください。
FileWriteで指定した個所から指定した文字数文だけ更新出来ます。

StringListを使えば楽ですが、大きなファイルを更新する場合のオーバーヘッドは無視できません。

編集    削除