Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

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