アプリ版:「スタンプのみでお礼する」機能のリリースについて

テキストファイルの中味を全部読み込んで、テキストボックスに表示するというコードをOpenステートメントを使って書いています。

その際、1つの種類のデータを1つのテキストファィルとして書き出し&読み込み
しているのですが、これですと種類が増えていくとともにテキストファイルの
数もどんどん増えてしまい効率が悪いです。

で、それらを1つのテキストファイルにまとめておいて、中をセクションに
区切って、それを読み込み&書き出しする方法はあるのでしょうか?

データが1行ですと分かるのですが、それぞれが長いテキストデータを1つの
テキストファイルに区切って書き出し&読み込みする方法が分かりません。

どなたか教えてください!!!!!!!
よろしくお願いします。

A 回答 (6件)

例えば、セクションの区切りについて、次のようなルールにしたとします。



行頭に[SectionXXX]という文字列がある事。
XXXはセクションを表す3桁の数字
この場合は、000から999まで有効ですね。

順番に取得する場合は、数字の手前までの文字列を比較して、ループを回せば、数字がいくつであっても全部取り込めます。

特定のセクションを指定して取り出す場合は、予めどこかでその数字(これは文字列として格納する)を指定する変数にぶち込んで、ループの中で更に比較して、該当する物だけを取り出せばよいと。
この場合、比較する文字列は、
"[Section" & strNum
みたいな感じになりますね。

この変数には、例えばテキストボックスにセクションNoを入力するようにしておいて、この値があったらこの変数にいれるとか、そんな風にすれば、よさげです。

どうでしょうか?

この回答への補足

回答ありがとうございます。う~ん、正直難解ですねぇ。
IfとLoopを組み合わせるというところがどうも・・・。

勉強が足りなくてすみません。
本を読みながら試行錯誤してみます。

補足日時:2002/03/07 22:11
    • good
    • 0

正直目的とあうかどうか分かりませんが、INIファイルを使用するのもひとつの選択肢だと思います。


INIファイルだと、APIを使用すれば、比較的楽に属性をテキストファイルに保存することができますよ。
    • good
    • 0

申し訳ありません。


呼び捨ててしまいました。
ごめんなさい...

この回答への補足

いえいえどういたしまして。

みなさんのご意見を参考にして、私なりに考えてみました。
同じセクションの行頭に特定の文字を挿入しました。


[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

こんな感じでどうでしょうか?
多分もっと効率のいいコードがあるかも知れませんが、へっぽこの私には
これが限界です。

補足日時:2002/03/08 23:21
    • good
    • 0

fujiyama2002と同じく文字列の連結でデータを取得しています。


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

                          以上
    • good
    • 0

you-mさんと同様に自分も区切り文字


[Excel]や[Access]といった括弧書きで
区別しております。

この回答への補足

セクションの区切りを入れておいて読み込むという考え方は理解できるのですが、
どうすればいいのかが分かりません。

例えば、

[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]の部分だけを読み込みたい時のコードが全く分かりません。
上記のやり方では、先頭のセクションだけを読み込むことは可能ですが、
以降のセクションだけを抜き出すのはできません。
ここが今ひとつ理解できないところです。

初心者なもので、へっぽこですみません。
どうか教えてください!!!
お願いいたします。

補足日時:2002/03/07 20:17
    • good
    • 0

やり方というか、やり方自体自分で決めれば済む事だと思いますよ。



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

どうでしょうか?

この回答への補足

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

補足日時:2002/03/07 20:20
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!