読取データ内の1行を削除する方法について


SSS  2004-12-14 20:02:34  No: 118315  IP: [192.*.*.*]

VB6.0を始めたばっかの超初心者です。

あるファイルを1行ずつ読取り、
削除対象の行を1行削除し、次データが詰まる(改行入らず)
ようにしたい(下記例)と考えているのですがよく分かりません。

どのようにすれば宜しいのでしょうか?
詳しい方教えて頂けないでしょうか。
宜しくお願い致します。

例)
【処理前】
A123
A456
B123
C123
C456

先頭がBであるデータを削除する。

【処理後】
A123
A456
C123
C456

編集 削除
ねろ  2004-12-14 21:25:18  No: 118316  IP: [192.*.*.*]

このプログラムの最も基本的な手順は
①データーを1行読み込む。
②データーの先頭がBかどうか判断する。
③Bでなければ別のファイル名でデーターを書き込む。
④①〜③をファイルの終わりまで繰り返す。
⑤読み込んだファイルを削除する。
⑥別のファイル名を、読み込んだ、ファイル名に変える。
となります。

編集 削除
SSS  2004-12-14 23:12:18  No: 118317  IP: [192.*.*.*]

レス有難う御座います!

>③Bでなければ別のファイル名でデーターを書き込む。
>⑤読み込んだファイルを削除する。
>⑥別のファイル名を、読み込んだ、ファイル名に変える。

→別のファイルを一時的に作成し、リネームするしか
  ないのでしょうか?

編集 削除
ガッ  2004-12-15 00:00:50  No: 118318  IP: [192.*.*.*]

まぁ、結論は見えているが…
一般的にリスト構造で、直前と直後へのポインタを持っていなくて、
「読み込み順」で順番が決まるのならば、
追加と削除は「直前まで読み込んで、追加/削除して、直後のを追加していく」
としか利用方法が無い様な感じがするぞ。
フォーマットを変えれば直ぐに解決するが…今回はムリそうに見える。

※誤(ry

編集 削除
ねろ  2004-12-15 08:15:56  No: 118319  IP: [192.*.*.*]

>別のファイルを一時的に作成し、リネームするしかないのでしょうか?
ファイルの読み書きに関して質問する場合は、処理するファイルの
およそのサイズを書きましょう。
サイズによってデーターをオンメモリーで処理するか否かが決まります。
ファイルのサイズが小さければファイルを配列に読み込み、選別後、
同じ名前のファイルに書き出す方法もあります。
オンメモリーで処理する、ファイルの大きさの大体の判断は、
実装しているメモリーの1/2〜1/3位でしょうか。

編集 削除
ひろ  2004-12-15 11:53:53  No: 118320  IP: [192.*.*.*]

NT系でディスクの空き容量が対象ファイルのサイズより大きいなら、
findstr コマンドの /V オプションを使って

findstr /V "削除行に含まれる文字列" 元ファイル > 結果ファイル

または

findstr /V /R "削除行にマッチする正規表現" 元ファイル > 結果ファイル

として、最後に結果ファイルで元ファイルを上書きするのが一番簡単ですね。
今回なら行の頭が "B" というのが削除条件なので

findstr /V /R "^B" 元ファイル > 結果ファイル

でいいのでは?

編集 削除
SSS  2004-12-16 18:36:37  No: 118321  IP: [192.*.*.*]

沢山のレス有難う御座います。
なんか皆さんの意見からすると別途ファイルを
作成しないと出来なそうですね・・・。

実際のファイルの容量は4Mくらいで
削除対象行及び削除対象とするパターンが沢山あるんです。

ヘルプで調べたのですが「DeleteLines」とかは上手く使用
出来ないですか?

編集 削除
ガッ  2004-12-17 02:01:34  No: 118322  IP: [192.*.*.*]

DeleteLinesってどのオブジェクトのメソッドだ?
…ディスク上のファイルに直接アクセスして、ディスク上のデータを書き換えられるのならそれに越したことはないが…
まぁ、最終的な目的がディスク上のデータでなくて、
メモリ上のデータを扱うなら、自分でそういう目的のクラスを作ったほうが楽だなw

※なんか誤爆っぽいなぁ…

編集 削除