• ベストアンサー

VBでのテキストファイルの 読み込み & 書き出し について

テキストファイルの中味を全部読み込んで、テキストボックスに表示するというコードをOpenステートメントを使って書いています。 その際、1つの種類のデータを1つのテキストファィルとして書き出し&読み込み しているのですが、これですと種類が増えていくとともにテキストファイルの 数もどんどん増えてしまい効率が悪いです。 で、それらを1つのテキストファイルにまとめておいて、中をセクションに 区切って、それを読み込み&書き出しする方法はあるのでしょうか? データが1行ですと分かるのですが、それぞれが長いテキストデータを1つの テキストファイルに区切って書き出し&読み込みする方法が分かりません。 どなたか教えてください!!!!!!! よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • you-m
  • ベストアンサー率58% (190/327)
回答No.3

例えば、セクションの区切りについて、次のようなルールにしたとします。 行頭に[SectionXXX]という文字列がある事。 XXXはセクションを表す3桁の数字 この場合は、000から999まで有効ですね。 順番に取得する場合は、数字の手前までの文字列を比較して、ループを回せば、数字がいくつであっても全部取り込めます。 特定のセクションを指定して取り出す場合は、予めどこかでその数字(これは文字列として格納する)を指定する変数にぶち込んで、ループの中で更に比較して、該当する物だけを取り出せばよいと。 この場合、比較する文字列は、 "[Section" & strNum みたいな感じになりますね。 この変数には、例えばテキストボックスにセクションNoを入力するようにしておいて、この値があったらこの変数にいれるとか、そんな風にすれば、よさげです。 どうでしょうか?

fujiyama2002
質問者

補足

回答ありがとうございます。う~ん、正直難解ですねぇ。 IfとLoopを組み合わせるというところがどうも・・・。 勉強が足りなくてすみません。 本を読みながら試行錯誤してみます。

その他の回答 (5)

  • msystem
  • ベストアンサー率42% (79/186)
回答No.6

正直目的とあうかどうか分かりませんが、INIファイルを使用するのもひとつの選択肢だと思います。 INIファイルだと、APIを使用すれば、比較的楽に属性をテキストファイルに保存することができますよ。

  • ninja972
  • ベストアンサー率0% (0/2)
回答No.5

申し訳ありません。 呼び捨ててしまいました。 ごめんなさい...

fujiyama2002
質問者

補足

いえいえどういたしまして。 みなさんのご意見を参考にして、私なりに考えてみました。 同じセクションの行頭に特定の文字を挿入しました。 [Section1]デ-タ1デ-タ1デ-タ1デ-タ1デ-タ1 [Section1]デ-タ1デ-タ1デ-タ1 [Section1]デ-タ1デ-タ1 [Section2]デ-タ2デ-タ2デ-タ2デ-タ2 [Section2]デ-タ2デ-タ2 [Section3]デ-タ3デ-タ3デ-タ3デ-タ3デ-タ3 [Section3]デ-タ3デ-タ3デ-タ3デ-タ3デ-タ3デ-タ3 [Section3]デ-タ3デ-タ3デ-タ3デ-タ3デ-タ3デ-タ3 で、例えば[Section2]の文字列だけを抜き出してテキストボックスに表示 するコードを下のようにしてみました。 Dim aa, readdata, bb As String Open App.Path & "\" & "test.txt" For Input As #1 Do Until EOF(1) Line Input #1, aa bb = Left(aa, 6) If bb = "[Section2]" Then readdata = readdata & aa & vbCrLf End If Loop Close #1 Text1.Text = readdata こんな感じでどうでしょうか? 多分もっと効率のいいコードがあるかも知れませんが、へっぽこの私には これが限界です。

  • ninja972
  • ベストアンサー率0% (0/2)
回答No.4

fujiyama2002と同じく文字列の連結でデータを取得しています。 自分はセクションの数が限られている為、一度配列にセットし 後から再度取りこむ形を取っています。 数が決められない場合はyou-mさんがおっしゃる様に、 先頭より順読みし、ループとIF文で取得すれば・・・ と思います。                           以上

  • ninja972
  • ベストアンサー率0% (0/2)
回答No.2

you-mさんと同様に自分も区切り文字 [Excel]や[Access]といった括弧書きで 区別しております。

fujiyama2002
質問者

補足

セクションの区切りを入れておいて読み込むという考え方は理解できるのですが、 どうすればいいのかが分かりません。 例えば、 [section 1] データ1データ1データ1データ1データ1データ1 データ1データ1データ1データ1データ1データ1 データ1データ1データ1データ1データ1データ1 データ1データ1データ1データ1データ1データ1 [section 2] データ2データ2データ2データ2データ2データ2 データ2データ2データ2データ2データ2データ2 データ2データ2データ2データ2データ2データ2 というテキストファイルがあったとして、[section 1]の部分の読み込みは Open App.Path & "\test.txt" For Input As #1 Do Until data = "[section 2]" Line Input #1, data alldata = alldata & data & vbCrlf Loop Close #1 aaa = Replace(alldata, "[section 2]", "") bbb = Replace(aaa, "[section 1]", "") text1.text = bbb     (初心者なので変なコードですが・・・) というふうに、次にくるセクションの頭までを指定して読み込めば良いと思う のですが、[section 2]の部分だけを読み込みたい時のコードが全く分かりません。 上記のやり方では、先頭のセクションだけを読み込むことは可能ですが、 以降のセクションだけを抜き出すのはできません。 ここが今ひとつ理解できないところです。 初心者なもので、へっぽこですみません。 どうか教えてください!!! お願いいたします。

  • you-m
  • ベストアンサー率58% (190/327)
回答No.1

やり方というか、やり方自体自分で決めれば済む事だと思いますよ。 例えば、セクションの区切りの行には、行頭に(本文で使われないような)特定のパターンを入れておいて、読み込むときには、一つのセクションを読み出すのに、そのパターンを判定するループにすればいいでしょう。 同様に書き出す場合も、一つのセクションを書き込んだら、そのパターンを含んだ区切りをいれるとか。 どうでしょうか?

fujiyama2002
質問者

補足

回答いただき、ありがとうございます。 現在、ninja972さんに質問させていただいた内容で悩んでいます。 ご助言を!!!!!!!

関連するQ&A

  • ファイルの読み込みについて

    いつもお世話になっています。 早速質問なのですが、VBのファイル処理において固定長データのテキストファイル読み込みの処理で、 固定長データの改行コードがChr(10)になっているデータがあります。 下記のどのOpenステートメントを使用しても、1行読み込みではなく全行読み込まれてしまうのです。 ↓ファイルモード (1)Open strInFile For Input As #intInFile (2)Open strInFile For Random As #intInFile Len=文字数 (3)Open strInFile For Binary As #intInFile ちなみに読み込みのモードは ・Line Input ステートメント ・Get ステートメント の2つを使用してみました。 改行コードの種類に依存せずにデータを1行読み込む方法を教えていただきたいです。

  • 参照するテキストファイルの数

    決め打ちのSQL文を記述したテキストファイルをOpenステートメントで 読み込み、テキストボックスへ表示させています。 できるだけVBのコードをメンテしないようにしたいので、テキストファイルで SQLを持っているのですが、いろんなパターンのSQL文がありテキストファイルが 8ファイルくらいになってしまいます。 参照する為のテキストファイルは、何ファイルくらいまでが理想なんでしょうか? いくつもあってもかまわないのでしょうか? 教えていただけませんでしょうか?? よろしくお願いいたします。

  • VB6.0 でのテキストファイルの表示

    .net では、readstream でがばっととって、テキストボックス(読み取り専用)に表示しました。 これと同様のことをVB6.0でチャレンジしたのですが、テキストボックスに表示されるのは最初の一行だけでした。マルチラインのテキストボックス設置後 Private sub command1_click() Dim data as string Open "ファイルパス" for input as #256 Do while EOF(256) line input #256, data loop text1.text=data としたところ、ファイル内の最初の一行目に位置する「%」のみが表示されました。 readonlyもつかえないみたいなので、Listを使うのがよいのでしょうか?ご教示下さい

  • (ACCESS VBA)あるテキストファイルのデータを別のテキストに写す

    すいませんがたびたび質問させていただいていmynannです ACCESS VBAについての質問です まず商品マスタクエリに 商品コード 価格 001 \100 002 \150 003 \200 というデータがあり テキストファイル「text01.txt」に 「こちらのアドレスが商品のページです↓  http://goo.ne.jp/syouhin/」 この商品マスタの商品コードとtext01.txtで 「こちらのアドレスが商品のページです↓  http://goo.ne.jp/syouhin/001.html」 というようなファイルを出力するようなモジュールをつくろうと思っています 実際には商品コードは複雑ですし テキストファイルももっとたくさんの文章です で特に何を聞きたいかというと テキストファイルのテキストデータをどうやって 扱えばいいかがよくわかりません OPENステートメントとかつかうんでしょうか、、? どなたか助けてください!

  • VB6.0 テキストファイルの操作について

    最近FileSystemObjectを覚えた者です。そこで質問なんですが、 FileSystemObjectを使用すると様々なテキストファイルの操作が可能ですが、Openステートメントでも同じようなことができると思うのですが、この二つの手法の長所と短所と、使用例など教えていただけたらと思います。よろしくお願いします。

  • VBでCSVファイルを読み込む方法(最速方法は?)

    こんにちは。VB6.0(SP5)、Windows2000でVBの勉強をしています。 VBのテキストボックスに入力したデータをCSVファイルに保存する時、もうすでに登録されていたらエラーを出したいと思っています。 そこで、CSVファイルを読み込み、同じかどうか確認したいと思っていますが、どの方法で処理するのが早く効率的なのでしょうか。 ファイル形式・・・csvで50行×3列 ----------- aaa,1,2 bbb,3,4 ・・・50行程度のデータ ----------- テキストボックスに入力したデータ・・・例えば"ccc" 1.Open ファイル名 For Input As #fileNum でEOFまで読み、配列に入れ、その後1列目のデータが"ccc"かどうか確認する 2.Open ファイル名 For Input As #fileNum で読みながら、1列目のデータが"ccc"かどうか確認し、EOFまで繰り返す 3.DAOを利用し、SELECT文であるかないか確認する(DAO2.5) の3つの方法を試してみましたが、あるパソコンで行うとDAOが早いのに別のパソコンだとDAOが1番遅いなど、どれが効率的なのかよくわかりませんでした。 このような処理をしたい場合、みなさんはどのような方法で処理されますか? 上記以外の方法でも構いません。アドバイスよろしくお願いします。

  • VBで指定テキストファイルの読込

    タイトル通り、指定したパス先のテキストファイルを読み込みたいのですが、 OpenFileDialogで開くやり方しかわかりません。 ボタンを押すと読み込んでテキストボックスに表示させる方法を教えて頂きたいです。

  • VBで複数のテキストを結合するときの問題

    教えてください!お願いします。 VB6を使って、複数のテキストファイル(~.txtで保存しているもの)を 一つずつ読み込んで、それらを結合して1つのファイルにして リッチテキストボックスに表示する、というツールを作成しています。 一応うまく出来たのですが、ただ、結合した時にそれぞれのテキストの 間にどうしても1行ブランクが入ってしまうんです。 このブランク行を削除して、結合したファイルの継ぎ目がきれいに 続いて表示されるようにする方法はありますでしょうか? ブランク行を全て削除してしまうのではなく、ファイルとファイルの 間に挿入されてしまうブランク行だけをなくしたいのです。 ちなみに Open App.Path & "\" & List1.List(List1.ListIndex) For Input As #FileNum Do Until EOF(FileNum) Line Input #FileNum, ddd gggg = gggg & ddd & vbCrLf Loop Close #FileNum このようにリストに載っているテキストファイルを全部読み込んで、 If Dir(書き出すテキストファイル) = "" Then Open 書き出すテキストファイル For Output As #FileNum Print #FileNum, gggg Close #FileNum Else Open 書き出すテキストファイル For Append As #FileNum Print #FileNum, gggg Close #FileNum End If 書き出すファイルが存在しなければそのまま保存し、書き出すファイルが あれば、そのファイルに追記するというコードにしています。

  • テキストファイルウィザードを使用したCSVファイル読み込みの挙動について【Excel2003】

    テキストファイルウィザードを使用したCSVファイル読み込みの挙動について【Excel2003】 <CSVファイル例> "aaaa","bbb<改行コード 0d0A>bb","ccc" 上記のようなCSVファイルを、 ダブルクリックにてExcel起動すれば正常に表示されますが、 テキストファイルウィザード(データ→外部データ取り込み→データの取り込み) を使用して、読み込みを行うと改行されて表示されてしまいます。 これは、Excelの仕様なのでしょうか? ご存知の方いらっしゃいましたら教えていただけますでしょうか? 現在の本質的な問題は、 ------------------------------------------------------------------- Excel2003にて、文字コードがUTF-8のCSVファイルを下記方法にて読み込む ・テキストファイルウィザードを使用 ・文字コードをUTF-8 ・カンマ区切り設定 で読み込みを行うと文字化けしないで表示されるのですが ダブルコーテーション中のデータ内に改行コード0d0aが含まれると 改行されてしまいます。 ------------------------------------------------------------------- と言う現象の調査をしております。

    • 締切済み
    • PHP
  • 改行コードの入っていないテキストファイルが開けるテキストエディタは?

    1レコードが256バイトのテキストデータが格納されているファイルがあるのですが、このファイルには改行コードが入っていません。 テキストエディタにてファイルの中身を確認したいのですが、メモ帳ですときれいに表示できません。 1行256バイトで表示できるフリーのテキストエディタをどなたかご存知でしょうか。 ご存知の方がいらっしゃいましたら教えてください。 お願いします。