Построчное считывание из txt файла - VB

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Столкнулся с такой проблемой. Пишу программу тестирования и необходимо чтобы при каждой работе с программой. вопросы были в разном порядке. Решил что проще всего будет организовать путем считывания вопросов из файла txt(один вопрос=одной строке). Но вот как считывать строки random'но ума не приложу. Т.е. необходимо при нажатии кнопки "Следующий вопрос" в Label1.Caption был новый случайный вопрос(ну и желательно чтобы не повторялись вопросы при нажатии на кнопку "Следующий вопрос"). Всего вопросов-30
Листинг программы
  1. For i = 1 To 30
  2. i = FreeFile
  3. Open App.Path & "\int.txt" For Input As #i
  4. Line Input #i, MyText
  5. Label1.Caption = MyText & vbCrLf
  6. Next i
  7. Close #i
Таким образом естественно считывает только первую строку. Догадок никаких нет. Заранее признателен за помощь))

Решение задачи: «Построчное считывание из txt файла»

textual
Листинг программы
  1. Option Explicit
  2. Const countQ As Integer = 30 'Количество вопросов
  3. Dim Q(1 To countQ) As String
  4. Dim Ans(1 To countQ) As String
  5. Dim NumRndQ(1 To countQ) As Long
  6. Dim NumQ As Integer, i As Integer
  7.  
  8. Private Sub Form_Load()
  9.     Dim ff As Integer, s As String
  10.     ff = FreeFile: NumQ = 0
  11.     Randomize
  12.     Open App.Path & "\int.txt" For Input As #ff
  13.         'do while not eof(ff)
  14.        For i = 1 To countQ   'Количество строк в файле должно быть не менее количество вопросов, иначе будет ошибка
  15.            Line Input #ff, s 'считываем построчно вопросы
  16.            Q(i) = Split(s, "?")(0)
  17.             Ans(i) = Split(s, "?")(1)
  18.         Next i
  19.         'loop
  20.    Close #ff
  21.     For i = 1 To countQ
  22.          NumRndQ(i) = i
  23.     Next i
  24.     Call Unsort(NumRndQ)
  25.     Call NextQuestion
  26. End Sub
  27.  
  28. Private Sub Command2_Click()
  29.     Call NextQuestion
  30. End Sub
  31.  
  32. Public Sub NextQuestion()
  33.     If NumQ >= countQ Then MsgBox "Больше вопросов нет!": Exit Sub
  34.     NumQ = NumQ + 1
  35.     Label1.Caption = "Вопрос № " & NumQ & "   " & Q(NumRndQ(NumQ)) 'Выводим вопросы на Label
  36.    Dim i As Integer, n As Integer, A() As Long
  37.     n = UBound(Split(Ans(NumQ), ","))
  38.     ReDim A(0 To n)
  39.     For i = 0 To n
  40.          A(i) = Split(Ans(NumQ), ",")(i)
  41.     Next i
  42.     Call Unsort(A)
  43.     For i = 0 To n
  44.          Label2(i).Caption = A(i) 'Выводим варианты ответов на Label2
  45.    Next i
  46. End Sub
  47.  
  48. Public Sub Unsort(List() As Long)
  49. Dim i As Long, min As Long, max As Long
  50. Dim pos As Long, tmp As Long
  51. min = LBound(List): max = UBound(List)
  52.     For i = min To max - 1
  53.         pos = Int((max - i + 1) * Rnd + i)
  54.         tmp = List(pos)
  55.         List(pos) = List(i)
  56.         List(i) = tmp
  57.     Next i
  58. End Sub
  59.  
  60. Private Sub Label2_Click(Index As Integer)
  61.     If CStr(Label2(Index).Caption) = CStr(Split(Ans(NumQ), ",")(0)) Then
  62.          MsgBox "Правильно"
  63.     Else
  64.          MsgBox "Неправильно"
  65.     End If
  66. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.308 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут