Заполнение массива из.txt файла VB 6.0

Я потерян, я пытаюсь заполнить массивы и получить несоответствие типов

Я пытаюсь заполнить 4 массива из одного файла

В текстовом документе содержится 500 строк, каждая из которых содержит 4 различных типа данных, разделенных знаком ","

Пример формата файла.txt --->

груша, яблоко, виноград, апельсин
яблоко, груша, апельсин, виноград

ЭСТ...

Вот мой код:

Private Sub CmdRun_Click()
Dim ticketid(500) As Variant
Dim theatreid(500) As Variant
Dim ticketamount(500) As Variant
Dim paymethod(500) As Variant

Open "C:\Users\Dylaan\Desktop\School Solution\tickets.txt" For Input As #1

Do While Not EOF(1)

Input #1, ticketid(), theatreid(), ticketamount(), paymethod()

lstticketid.AddItem ticketid()
lsttheatreid.AddItem theatreid()
lstticketamount.AddItem ticketamount()
lstmethod.AddItem paymethod()

Exit Do
Loop

Close #1

End Sub

Зачем?

3 ответа

Взгляните на это:

Private Sub CmdRun_Click()

    Dim ticketid(500) As Variant
    Dim theatreid(500) As Variant
    Dim ticketamount(500) As Variant
    Dim paymethod(500) As Variant

    dim ix as integer

    Open "C:\Users\Dylaan\Desktop\School Solution\tickets.txt" For Input As #1

    ix = 0
    Do While Not EOF(1)

        Input #1, ticketid(ix), theatreid(ix), ticketamount(ix), paymethod(ix)

        lstticketid.AddItem ticketid(ix)
        lsttheatreid.AddItem theatreid(ix)
        lstticketamount.AddItem ticketamount(ix)
        lstmethod.AddItem paymethod(ix)

        ix = ix + 1
    Loop

    Close #1

End Sub

И, конечно, вы должны рассмотреть возможность использования

freefile (чтобы получить дескриптор файла)

а также возможность того, что есть больше записей, чем ожидалось...

Set fso = CreateObject("Scripting.FileSystemObject")
Set srcfile = fso.GetFile("c:\myfile.txt")
If err.number = 0 then Set TS = srcFile.OpenAsTextStream(1, 0)
Src=ts.readall
Arr1=Split(Src, vbcrlf)
For Each thing in Arr1
    Arr2=Split(thing, ",")
    For Each thing2 in Arr2
          msgbox thing2
    Next
Next

Это vbscript, но он будет работать в VB6. Мы используем команду split.

Некоторые комментарии к вашему коду:

  • Вам не нужно объявлять эти массивы как варианты, вы можете объявить их как массивы строк.
  • Поскольку файл всего 500 строк, вы можете прочитать его сразу.
  • Ваша настоящая проблема - команда ввода: она не может читать в массивах сразу.
  • То же самое относится и к списку: вы не можете добавить массив сразу.

С учетом всего вышесказанного взгляните на следующий тестовый проект:

'1 form with:
'  1 command button   : name=Command1
'  4 listbox controls : name=List1 name=List2 name=List3 name=List4
Option Explicit

Private Sub Command1_Click()
  Dim strData As String
  strData = ReadFile("c:\temp\file.txt")
  ShowData strData
End Sub

Private Sub Form_Resize()
  Dim sngWidth As Single
  Dim sngCmdHeight As Single
  Dim sngLstWidth As Single, sngLstHeight As Single
  sngWidth = ScaleWidth
  sngCmdHeight = 315
  sngLstHeight = ScaleHeight - sngCmdHeight
  sngLstWidth = sngWidth / 4
  List1.Move 0, 0, sngLstWidth, sngLstHeight
  List2.Move sngLstWidth, 0, sngLstWidth, sngLstHeight
  List3.Move 2 * sngLstWidth, 0, sngLstWidth, sngLstHeight
  List4.Move 3 * sngLstWidth, 0, sngLstWidth, sngLstHeight
  Command1.Move 0, sngLstHeight, sngWidth, sngCmdHeight
End Sub

Private Function ReadFile(strFile As String) As String
  Dim intFile As Integer
  Dim strData As String
  intFile = FreeFile
  Open strFile For Input As #intFile
    strData = Input(LOF(intFile), #intFile)
  Close #intFile
  ReadFile = strData
End Function

Private Sub ShowData(strData As String)
  Dim lngLine As Long
  Dim strLine() As String
  Dim strPart() As String
  strLine = Split(strData, vbCrLf)
  For lngLine = 0 To UBound(strLine)
    strPart = Split(strLine(lngLine), ",")
    If UBound(strPart) = 3 Then
      List1.AddItem strPart(0)
      List2.AddItem strPart(1)
      List3.AddItem strPart(2)
      List4.AddItem strPart(3)
    Else
      'not the correct number of items
    End If
  Next lngLine
End Sub

Когда вы нажимаете на Command1, он будет читать текстовый файл из c:\temp\file.txt

После этого он разделит данные, чтобы сформировать массив строк, перебрать все строки, разделить каждую строку на части и показать части в списках, если в строке ровно 4 части.

Другие вопросы по тегам