Arrays 从.txt文件VB 6.0填充数组

Arrays 从.txt文件VB 6.0填充数组,arrays,loops,vb6,listbox,eof,Arrays,Loops,Vb6,Listbox,Eof,我迷路了,我尝试填充数组并接收到类型不匹配 我试图从一个文件中填充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

我迷路了,我尝试填充数组并接收到类型不匹配

我试图从一个文件中填充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
为什么?

这是vbscript,但将在VB6中工作。我们正在使用split命令

这是vbscript,但将在VB6中工作。我们正在使用split命令。

看看这个:

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(获取文件句柄)

还有可能出现比预期更多的记录…

看看这个:

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(获取文件句柄)


还有可能会有比预期更多的记录…

对代码的一些注释:

  • 您不需要将这些数组声明为变量,您可以将它们声明为字符串数组
  • 由于文件只有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个部分)。

有关代码的一些注释:

  • 您不需要将这些数组声明为变量,您可以将它们声明为字符串数组
  • 由于文件只有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个部分)