こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

VB2005でテキストファイルの操作

vb2005でテキストファイルを開き任意の行の編集を行いたい
最終行に追加する方法はわかったのですが
任意の行の編集方法がどのように実装してよいのかわかりません

編集したいテキストファイルは
各行の長さはまちまちです

普段は追記で文章が追加されますが
一定行になると再び最初の行(もしくは指定の行)から
上書きというのは可能なのでしょうか?

投稿日時 - 2008-05-09 18:16:40

QNo.4009552

困ってます

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

一部のみ書き換えといったことも出来なくないですが元の文字列と修正後の文字列の長さが違うとアウトです

ファイルの大きさがさほど大きくないなら、一度全てのテキストを読み込んで行ごとに修正があるかどうか判定して書き戻す
といった手法が有効です

ファイルの大きさに左右されないように作成するには
入力用のストリームと(別名ファイルとしての)出力用のストリームを用意して
入力ストリームから順次1行ごとの入力を行います ... 1)
修正するのかどうかの判定を行い出力用文字列を生成します
出力ストリームに順次出力します
入力が終了するまで 1)に戻って処理します
入力ストリームを閉じる
出力ストリームを閉じる
入力ファイルを削除します
出力ファイルを元ファイルの名前に変更
といった処理でしょう
なお適宜エラー処理などをする必要があります

こちらの場合の制限はハードディスクなどに元ファイルと同じ以上の空き容量が必要です

投稿日時 - 2008-05-09 22:45:55

お礼

各行の文字列が同じ(固定長)なら可能ということなのですね

その方法で検討してみます

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

投稿日時 - 2008-05-10 12:22:15

ANo.1

不可能ではありません。
ただ、「単純に元のファイルの一部のみを変える」という発想からは外れて下さい。
やり方としては、
・一度、元のファイルの内容を全部読んで憶えておき、そこから1行分ずつ
 取り出して、元のファイルに「Outputモードで」必要に応じて編集しながら
 書き込んでいく
・元のファイルを1行ずつ読みながら編集し、すぐにファイルには書かないで
 String型変数にCrLfを付けながら順に文字列連結して格納する。
 全部編集・格納が終わったら、溜めておいたString型変数の内容を一気に
 「Outputモードで」書き込む
 (String型変数1つに全部押し込んでいくのがイヤなら、1行ごとの情報を
 配列に、要素を増やしながら溜めていく、って手も ありますが…面倒ですよね)
・元のファイルの名前を変えて、元のファイルをInputモードで開き、本来のファイル名のは
 同時にOutputモードで開く。元のファイルを1行ずつ読んで編集し、1行ごとに
 本来のファイル名の方に書いていく。
 全部書き終わって両方Colseしたら元のファイルは消す
の、いずれかって感じです。
とにかく、基本は「全部書き直し」と思ってください。
(バイナリモードで開いて探す事も出来なくは ないでしょうが、
 どうせ編集位置より後は全て ずらさないといけないし…)

投稿日時 - 2008-05-09 22:01:56

お礼

配列に取り込んでやる方法だと大量のデータ持ちますよね。

書き込まれたテキストファイルの各行が固定長なら変更可能らしいので
その方向で検討します。

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

投稿日時 - 2008-05-10 12:23:39

あなたにオススメの質問