你可以看到我刚打开下面的文件,但我最近发现它正在读取上面打开的文件,我已经关闭了。
Dim TestNO As Integer
Dim myLines As New List(Of String)
Dim sb As StringBuilder
FileOpen(10, "F:\Computing\Spelling Bee\testtests.csv", OpenMode.Input)
Dim Item() As String = Split(fullline, ",")
Dim MaxVal As Integer = Integer.MaxValue
Do Until EOF(10)
fullline = LineInput(10)
If Item(7) > MaxVal Then
MaxVal = Item(7)
TestNO = MaxVal
End If
Loop
这是我打开和关闭以前文件的地方。
Dim flag As Boolean = False
FileOpen(1, "F:\Computing\Spelling Bee\stdnt&staffdtls\stdnt&staffdtls.csv",
OpenMode.Input)
Do Until EOF(1)
fullline = LineInput(1)
Dim item() As String = Split(fullline, ",")
If enteredusername = item(0) And enteredpassword = item(1) Then
Console.WriteLine()
Console.Clear()
Console.WriteLine("Welcome," & item(3) & item(4))
Threading.Thread.Sleep(1000)
Console.Clear()
flag = True
If item(2) = "p" Then
FileClose(1)
pupilmenu()
ElseIf item(2) = "s" Then
FileClose(1)
staffmenu()
ElseIf item(2) = "a" Then
FileClose(1)
adminmenu()
答案 0 :(得分:0)
FileOpen
,EOF
和LineInput
都是旧的VB6风格方法,主要是为了向后兼容。最好使用System.IO
命名空间中提供的新.NET类。例如,这个相同的任务很容易执行:
For Each line As String In File.ReadAllLines("F:\Computing\Spelling Bee\stdnt&staffdtls\stdnt&staffdtls.csv")
Dim fields() As String = line.Split(","c)
If (enteredUserName = fields(0)) And (enteredPassword = fields(1)) Then
' ...
End If
Next
请注意,我还使用了line.Split
而不是Split(line)
,这也是一种旧的VB6风格的方法。最好使用新的String.Split
方法。
File.ReadAllLines
方法打开文件,读取文件的全部内容,关闭文件,然后将所有数据作为字符串数组返回,数组中的每个项目都是一行文件。这是一种读取整个文件的简单方法。但是,如果它是一个特别大的文件,最好使用FileStream
对象一次读取一行。
另外,值得一提的是,自己阅读CSV文件可能很复杂。它们并不总是像简单地分割逗号一样简单。例如,以下是有效CSV行的示例:
Bill, "Red, White, and Blue", Smith
如您所见,该行只包含三个字段,但它包含四个逗号。此外,引号不应被视为第二个字段中值的一部分。读取CSV文件的最简单方法是使用TextFieldParser
类来处理所有这些怪癖。