Построчное считывание из txt файла - VB
Формулировка задачи:
Доброго времени суток!
Столкнулся с такой проблемой. Пишу программу тестирования и необходимо чтобы при каждой работе с программой. вопросы были в разном порядке. Решил что проще всего будет организовать путем считывания вопросов из файла txt(один вопрос=одной строке). Но вот как считывать строки random'но ума не приложу. Т.е. необходимо при нажатии кнопки "Следующий вопрос" в Label1.Caption был новый случайный вопрос(ну и желательно чтобы не повторялись вопросы при нажатии на кнопку "Следующий вопрос"). Всего вопросов-30
Таким образом естественно считывает только первую строку. Догадок никаких нет.
Заранее признателен за помощь))
Решение задачи: «Построчное считывание из 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д