• 締切済み

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

vb2005でテキストファイルを開き任意の行の編集を行いたい 最終行に追加する方法はわかったのですが 任意の行の編集方法がどのように実装してよいのかわかりません 編集したいテキストファイルは 各行の長さはまちまちです 普段は追記で文章が追加されますが 一定行になると再び最初の行(もしくは指定の行)から 上書きというのは可能なのでしょうか?

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

一部のみ書き換えといったことも出来なくないですが元の文字列と修正後の文字列の長さが違うとアウトです ファイルの大きさがさほど大きくないなら、一度全てのテキストを読み込んで行ごとに修正があるかどうか判定して書き戻す といった手法が有効です ファイルの大きさに左右されないように作成するには 入力用のストリームと(別名ファイルとしての)出力用のストリームを用意して 入力ストリームから順次1行ごとの入力を行います ... 1) 修正するのかどうかの判定を行い出力用文字列を生成します 出力ストリームに順次出力します 入力が終了するまで 1)に戻って処理します 入力ストリームを閉じる 出力ストリームを閉じる 入力ファイルを削除します 出力ファイルを元ファイルの名前に変更 といった処理でしょう なお適宜エラー処理などをする必要があります こちらの場合の制限はハードディスクなどに元ファイルと同じ以上の空き容量が必要です

mono-001
質問者

お礼

各行の文字列が同じ(固定長)なら可能ということなのですね その方法で検討してみます ありがとうございました。

回答No.1

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

mono-001
質問者

お礼

配列に取り込んでやる方法だと大量のデータ持ちますよね。 書き込まれたテキストファイルの各行が固定長なら変更可能らしいので その方向で検討します。 ありがとうございました。

関連するQ&A

  • VB2005でファイル操作(2)

    前回の質問を踏まえて 記述されているテキストは各行長さ固定にし いったんすべてを取り込み(StreamReader) 取り込んだデータの編集したい行を編集して 編集したデータを書き込みする(StreamWriter) 上記方法を取れば可能になったのですが これですとファイルのサイズが大きくなると 動作に支障をきたす可能性がありそうです すべてを取り込んで編集したい箇所を編集して書き込む方法でなく ピンポイントに任意の行を指定してそこの行だけ上書き編集するような 都合のいい方法はないのでしょうか?(INIファイルの操作みたいに)

  • テキストファイルの最終行を消すには。

    C#を使っていますが、だいたい同じだと 思いますのでVBで質問します。 テキストファイルの最終行を 消したいのですが、いい方法は、 ないでしょうか。 (指定行を消す方法でも) お願いします。

  • テキスト操作

    できるかどうか曖昧なのでこの場で質問させていただきます。 VBからテキストに書き込みを行う処理なんですが、 まず 111111 と先頭行に書かれたテキストファイルがあります。 これから新たに先頭行に"2222222"を追加します。 (ここからVBの処理で) 222222 111111 また先頭行に"333333"を追加します。 ここで"11111111"を削除します。 333333 222222 つまりテキストファイルが3行以上に達すると下から削除していく動きです。(ところてん式に押し出すイメージですね) こうゆう動きってVBで可能でしょうか? 僕が調べた限りでは不可能な気がします。 もし、代替案があればご指導いただきたいと思ってます。

  • vb2008 テキストファイルを開くには?

    vb2008 テキストファイルを開くには? VB2008を使用している者です。今回もアドバイス宜しくお願い致します。 あるテキストファイルをOPENしたいと思っているのですが、やり方がわかりません。 VB2008でファイルを開く方法として一般的なのがOpenFileDialogを使用した方法ですが、 これだといちいち開きたいファイルを指定しなければなりません。その都度ファイルを 指定するのではなく、開きたいファイルをピンポイントで開きたいのです。 いろいろ検索しましたが、全くヒットしませんでした。 皆様のご指導、宜しくお願い致します。

  • バッチによるテキストファイル操作について

    バッチファイルにて、テキストファイルの任意の行を削除したいのですが、コマンドはどのように記述すれば良いでしょうか? 初心者の為、方法が良くわかりません。  具体的には5000行のテキストファイルから1~20行目を削除したいと考えています。 ちなみにOSはXPと2000の両方です。 以上、どなたか宜しくお願いいたします。

  • VBでUNIX上のテキスト・ファイルを読む方法は?

    UNIX上のテキスト・ファイルを指定された条件でセレクトして PC側のAccessファイルに書きこみたいのですが, VBプログラムから直接UNIX上のテキスト・ファイルを読む方法って あるのでしょうか? どなたか,コードの書き方などご存知でしたら教えてください。

  • vbからのファイル操作について

    VB6.0について質問です。 VBでファイル操作をしてファイルを削除したいのですがどのような関数を使うと実現できますか? 現在指定したファイルをShellExecuteを使って開くところまではできたのですが削除の方法がわからず困っています。 お知恵をおかしください><

  • VB.NET テキストファイルにデータを書き込み

    テキストファイル("c:\test.txt")に「かきくけこ」と全角5文字で1行のデータがあるとします。 このテキストファイルに「あいうえお」を先頭に追加で書き込みたいのですが、どうすればいいのでしょうか? あくまで「かきくけこ」を変数化せずファイルに直接、書き込む方法がある場合、教えてください。 'テキストファイルを開いたときの内容 あいうえお かきくけこ ちなみにですが、テキストファイル("c:\test.txt")に「かきくけこ」と全角5文字で1行のデータがあるとして、 末尾に「さしすせそ」を追加で書込みする方法は下記の通りでした。 'ファイルを書き込み用に開く、指定したファイルがない場合は作成する dim fsFile As System.IO.FileStream = _ System.IO.File.OpenWrite("c:\test.txt") 'StreamWriterオブジェクトを作成し、テキストデータが書き込めるようにする Dim sw As System.IO.StreamWriter = _ New System.IO.StreamWriter(fsFile) 'ファイルの末尾に移動する sw.BaseStream.Seek(0, System.IO.SeekOrigin.End) 'データを書き込む sw.WriteLine("さしすせそ") 'ファイルを更新する sw.Flush() 'ファイルを閉じる sw.Close() fsFile.Close() 'テキストファイルを開いたときの内容 かきくけこ さしすせそ

  • VB6.0でTextファイルをExcel出力

    お世話になります。 VB6.0でTextファイル(カンマ区切りのデータが入っているもの)をExcelに出力するものを作成しました。 基本的に読込んだファイルをArrayで型を指定してExcelに出力する形です。 ですが、印刷するときにA4横に収まらない長さになってしまったので、 Textファイルの1行のデータをExcelには2行にして出力させることは可能ですか? Textファイルのデータはこんなのです。 XXXX,SS,SS,AA,DD,WW,Fed,fk,aaa,aqee このような形で数百件入っています。 何か参考になりそうなものがあったら教えてください。 よろしくお願いします。

  • テキストファイルを後ろから読む方法(VB2008)

    やりたいことを先に書くと、最終的には Linuxのtailに毛が生えたようなアプリをつくりたいと思っています。 開発環境はVB2008 Express Editionです。 で、まずはテキストファイルを後方から読む方法でつまっています。 指定した行数を後方から読むようにしたいと思っています。 最初は全行をいったん読み込んで配列に入れて処理という 書き方をしたのですが、大きなファイルの際にメモリを大量に消費し、 処理速度も遅くなったのでボツになりました。 今はとりあえず、バイナリで後ろから読み込んで改行文字列を 自分で見つけて処理をするという原始的な方法を思い浮かべていますが、 今っぽくないプログラミングであるような気がしています。 このようなことを実現する便利なクラス・機能やエレガントな記述等を 教えていただきたいと思っています。 よろしくお願いします。

専門家に質問してみよう