Построчное считывание из txt файла - VB
Формулировка задачи:
Доброго времени суток!
Столкнулся с такой проблемой. Пишу программу тестирования и необходимо чтобы при каждой работе с программой. вопросы были в разном порядке. Решил что проще всего будет организовать путем считывания вопросов из файла txt(один вопрос=одной строке). Но вот как считывать строки random'но ума не приложу. Т.е. необходимо при нажатии кнопки "Следующий вопрос" в Label1.Caption был новый случайный вопрос(ну и желательно чтобы не повторялись вопросы при нажатии на кнопку "Следующий вопрос"). Всего вопросов-30
Таким образом естественно считывает только первую строку. Догадок никаких нет.
Заранее признателен за помощь))
Листинг программы
- For i = 1 To 30
- i = FreeFile
- Open App.Path & "\int.txt" For Input As #i
- Line Input #i, MyText
- Label1.Caption = MyText & vbCrLf
- Next i
- Close #i
Решение задачи: «Построчное считывание из txt файла»
textual
Листинг программы
- Option Explicit
- Const countQ As Integer = 30 'Количество вопросов
- Dim Q(1 To countQ) As String
- Dim Ans(1 To countQ) As String
- Dim NumRndQ(1 To countQ) As Long
- Dim NumQ As Integer, i As Integer
- Private Sub Form_Load()
- Dim ff As Integer, s As String
- ff = FreeFile: NumQ = 0
- Randomize
- Open App.Path & "\int.txt" For Input As #ff
- 'do while not eof(ff)
- For i = 1 To countQ 'Количество строк в файле должно быть не менее количество вопросов, иначе будет ошибка
- Line Input #ff, s 'считываем построчно вопросы
- Q(i) = Split(s, "?")(0)
- Ans(i) = Split(s, "?")(1)
- Next i
- 'loop
- Close #ff
- For i = 1 To countQ
- NumRndQ(i) = i
- Next i
- Call Unsort(NumRndQ)
- Call NextQuestion
- End Sub
- Private Sub Command2_Click()
- Call NextQuestion
- End Sub
- Public Sub NextQuestion()
- If NumQ >= countQ Then MsgBox "Больше вопросов нет!": Exit Sub
- NumQ = NumQ + 1
- Label1.Caption = "Вопрос № " & NumQ & " " & Q(NumRndQ(NumQ)) 'Выводим вопросы на Label
- Dim i As Integer, n As Integer, A() As Long
- n = UBound(Split(Ans(NumQ), ","))
- ReDim A(0 To n)
- For i = 0 To n
- A(i) = Split(Ans(NumQ), ",")(i)
- Next i
- Call Unsort(A)
- For i = 0 To n
- Label2(i).Caption = A(i) 'Выводим варианты ответов на Label2
- Next i
- End Sub
- Public Sub Unsort(List() As Long)
- Dim i As Long, min As Long, max As Long
- Dim pos As Long, tmp As Long
- min = LBound(List): max = UBound(List)
- For i = min To max - 1
- pos = Int((max - i + 1) * Rnd + i)
- tmp = List(pos)
- List(pos) = List(i)
- List(i) = tmp
- Next i
- End Sub
- Private Sub Label2_Click(Index As Integer)
- If CStr(Label2(Index).Caption) = CStr(Split(Ans(NumQ), ",")(0)) Then
- MsgBox "Правильно"
- Else
- MsgBox "Неправильно"
- End If
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д