【问题标题】:Randomizing lines in a text file随机化文本文件中的行
【发布时间】:2026-01-11 04:00:01
【问题描述】:

我有一个文本文件,用于多选问答形式。我想一次调用 4 行并在标签中输出这 4 个值。出于演示目的,每一行都有一个单词,因此用户必须在选项 1 - 4 之间进行选择,例如

  1. 红色
  2. 蓝色
  3. 绿色
  4. 黄色

但是,我想为 3 个标签随机选择四个值,但我的文件将有足够的 6 个标签值,这样每次用户加载程序时它都不会重复问题。

Here 是我的文本文件的样子

Public Class Form1
Dim rand As New Random
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    Dim QuestionFile As New IO.StreamReader(CurDir() & "\" & "Questions.txt")
    Dim fileContentsQ As String = QuestionFile.ReadToEnd
    Dim fileListQ As New List(Of String)
    For Each Str As String In fileContentsQ.Split(CChar(vbCrLf))
        fileListQ.Add(Str)
    Next
    Dim randItem As Integer = rand.Next(0, fileListQ.Count - 1)
    Label1.Text = (fileListQ.Item(randItem))
    fileListQ.RemoveAt(randItem)
    'removes item from list so that it isn't repeated
    Dim randItem2 As Integer = rand.Next(0, fileListQ.Count - 1)
    Label2.Text = (fileListQ.Item(randItem))
    fileListQ.RemoveAt(randItem)
    Dim randItem3 As Integer = rand.Next(0, fileListQ.Count - 1)
    Label3.Text = (fileListQ.Item(randItem))
    fileListQ.RemoveAt(randItem)
End Sub

结束类

问题是每个标签只显示一个单词/行,而我希望它一次显示 4 个单词,例如 Label1 可能是(都在彼此下方):

红色
蓝色
绿色
黄色

【问题讨论】:

  • 您需要更清楚自己想要什么 - 例如,标签不会显示要点。但是您可能必须将这些集合粘合在一起才能一次显示它们
  • 该解析列表仅在表单加载中可用。如果有一个 Next 按钮来显示一个新问题,您将不得不再次阅读并解析该文件。您应该在last question 的答案中使用代码,布莱克伍德先生将其设为全局以供重用

标签: vb.net


【解决方案1】:

试试这个:

Dim lst As New List(Of String)(IO.File.ReadAllLines("Archivo.txt"))
Dim nst As New List(Of String)
Randomize()
While lst.Count > 0
     Dim rdi As Integer = CInt(Math.Floor(Rnd() * lst.Count))
     nst.Add(lst(rdi))
     lst.RemoveAt(rdi)
End While
IO.File.WriteAllLines("Archivo.txt", nst.ToArray, Encoding.Unicode)

希望对你有帮助。

【讨论】:

  • 欢迎来到 SO。请注意在问题的上下文中解释代码。