テキストファイルの中の一行をランダムに表示させたいのですが、そのとき最後の行番号は動的に変化するので、どのように表示させたらよいのかわかりません。
ご存知の方が居られれば教えてください。
よろしくお願いします。
テキストがそんなに大きくないなら、ReadAllで一気読みし、
vbCrLfをデリミタにしてSplitし、UBoundとLboundの間で
乱数作って配列要素を選択すればいいでしょう。
テキストが大きいなら、一度空読みして行数を数え、
その範囲で乱数作って、乱数で指定された位置まで空読みして
目的行を取得すればよろしいかと・・・。
Sayさん、ご回答ありがとうございます。
いろいろ調べて、solit関数などの使い方はわかったのですが、UboundとLboundの間で乱数を作るというのがまだよく分かりません。
できれば、もう少し詳しく教えて頂けないでしょうか。
また、行番号を使わなくてもランダムに選べる方法があれば、分かる人誰かお願いします。
Option Base = 1 でない限り
Splitで取得した配列のLBoundは0でしょうから、
Int(Rnd() * (UBound(配列名) + 1))で生成できます。
>Option Base = 1 でない限り
>Splitで取得した配列のLBoundは0でしょうから
Option Base = 1 でも LBound の最小値は 0 だったと思うのですが?
>Option Base = 1 でも LBound の最小値は 0 だったと思うのですが?
すみません。私の勘違いです。 ごめんなさい。
うぅ・・・すいませんが、VBは始めたばかりなのでよくわかりませんでした・・・。
要は、プレーヤーが打ち込んだ言葉を保存したテキストファイルから、ランダムにその中の1つを選ぶプログラムを作りたいんです・・。
紛らわしい書き方してすいませんでした。
何か簡単な方法があれば、教えてください。
下に簡単なソースを書きます。
Private Sub Command1_Click()
Dim intFileNo As Integer
Dim intIndex As Integer
Dim strArray() As String
intFileNo = FreeFile
'ファイルを開く
Open "C:\TEST.TXT" For Input As #intFileNo
'ファイルの終わりまでループ
Do Until EOF(intFileNo)
'配列を中身を保持したまま再定義する
ReDim Preserve strArray(intIndex)
'1行読む&配列に格納
Line Input #intFileNo, strArray(intIndex)
intIndex = intIndex + 1
Loop
Close #intFileNo
Randomize
'UBound(strArray) = 配列の最大値(ファイルの最終行)
'Int(配列の最大値 * Rnd) = 0 から 配列の最大値までの乱数を発生
'strArray(0 から 配列の最大値までの乱数を発生) = ランダムに1行を選択
MsgBox strArray(Int(UBound(strArray) * Rnd))
End Sub
こんな感じで良いですか?
ありがとうございます!
ついにできました!!
うちのはVB.NETなので、それ風に書き直したらできました。
皆さん本当にありがとうございました。
ツイート | ![]() |