テキストファイルの最後の行を表すには?

解決


トニー  2002-11-30 09:26:37  No: 105556

テキストファイルの中の一行をランダムに表示させたいのですが、そのとき最後の行番号は動的に変化するので、どのように表示させたらよいのかわかりません。
ご存知の方が居られれば教えてください。
よろしくお願いします。


Say  2002-11-30 10:26:25  No: 105557

テキストがそんなに大きくないなら、ReadAllで一気読みし、
vbCrLfをデリミタにしてSplitし、UBoundとLboundの間で
乱数作って配列要素を選択すればいいでしょう。

テキストが大きいなら、一度空読みして行数を数え、
その範囲で乱数作って、乱数で指定された位置まで空読みして
目的行を取得すればよろしいかと・・・。


トニー  2002-12-01 02:00:32  No: 105558

Sayさん、ご回答ありがとうございます。

いろいろ調べて、solit関数などの使い方はわかったのですが、UboundとLboundの間で乱数を作るというのがまだよく分かりません。
できれば、もう少し詳しく教えて頂けないでしょうか。

また、行番号を使わなくてもランダムに選べる方法があれば、分かる人誰かお願いします。


Say  2002-12-01 02:44:16  No: 105559

Option Base = 1 でない限り
Splitで取得した配列のLBoundは0でしょうから、
Int(Rnd() * (UBound(配列名) + 1))で生成できます。


旅人  2002-12-01 05:44:36  No: 105560

>Option Base = 1 でない限り
>Splitで取得した配列のLBoundは0でしょうから

Option Base = 1 でも LBound の最小値は 0 だったと思うのですが?


旅人  2002-12-01 05:51:01  No: 105561

>Option Base = 1 でも LBound の最小値は 0 だったと思うのですが?

すみません。私の勘違いです。 ごめんなさい。


トニー  2002-12-01 09:03:59  No: 105562

うぅ・・・すいませんが、VBは始めたばかりなのでよくわかりませんでした・・・。
要は、プレーヤーが打ち込んだ言葉を保存したテキストファイルから、ランダムにその中の1つを選ぶプログラムを作りたいんです・・。
紛らわしい書き方してすいませんでした。
何か簡単な方法があれば、教えてください。


oku  URL  2002-12-01 11:45:44  No: 105563

下に簡単なソースを書きます。

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

こんな感じで良いですか?


トニー  2002-12-01 21:49:07  No: 105564

ありがとうございます!
ついにできました!!
うちのはVB.NETなので、それ風に書き直したらできました。
皆さん本当にありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加