我的项目中有一个名为
this.txt
的文件。该文件包含绘图的坐标。
文件中的每一行都有 4 个值。每个值之间,有一个字符分隔值。
例如:
109 n 66 m 110 a 67 b
这里,每个值之间有一个字符。
在我的程序中,我使用
this.txt
读取文件 StreamReader
。
并对行数进行 for 循环。在这个循环中,文本中的每一行我都将其保存在一个数组中。 我在值之间放置字符,以使用
Substring
函数将值放入变量中。
这是我的代码:
Imports System.IO
Public Class Form1
Dim array2(200) As String
Dim theLine1 As String
Dim theLine2 As String
Dim theLine3 As String
Dim theLine4 As String
Private Sub btn_Read_Click(sender As Object, e As EventArgs) Handles btn_Read.Click
Dim sw2 As New StreamReader("this.txt")
Dim lineCount = File.ReadAllLines("this.txt").Length
For t = 0 To lineCount
array2(t) = sw2.ReadLine
theLine1 = array2(t).Substring(0, array2(t).IndexOf("n")).Trim()
theLine2 = array2(t).Substring(array2(t).IndexOf("n") + 1, array2(t).IndexOf("m")).Trim()
theLine3 = array2(t).Substring(array2(t).IndexOf("m") + 1, array2(t).IndexOf("a")).Trim()
theLine4 = array2(t).Substring(array2(t).IndexOf("a") + 1, array2(t).IndexOf("b")).Trim()
Next
End Sub
End Class
程序直接读取第一个值并将其放入
theLine1
变量中。但是在下一个值中,程序读取了第二个值和第三个值并将其放入 theLine2
变量中。使用前面的示例:109 n 66 m 110 a 67 b
程序将
66 m 110
放入 theLine2 变量中。我不想要这样,我也不知道为什么会这样。我只想将下一个值放入 theLine2
变量中。
当程序到达
theLine3
变量时也是如此。该程序向我显示错误。
这是错误:
“System.ArgumentOutOfRangeException”类型的未处理异常 发生在 mscorlib.dll 中
附加信息:索引和长度必须引用位置 在字符串内。
据我了解,您想要逐行提取字母之间的数字。在您的子字符串函数中,您应该将长度指定为第二个参数,表示“我需要查看多远”。但是,号码前面仍然有一个字母。使用
Split
来代替会更容易。
您也不需要
Stream Reader
。由于您没有使用 Using
,您可能会锁定该文件,以防止再次手动打开它。
我将数字变量声明为整数并将它们保留为本地变量。如果您在全球范围内需要它们,请随时将其改回来。
我还添加了检查以确保相应的读取行中始终有内容。
txt 文件中的行:
205 n 92 m 308 a 110 b
76 n 201 m 44 a 89 b
312 n 57 m 102 a 123 b
219 n 68 m 150 a 81 b
Public NotInheritable Class Form1
Private Sub btn_Read_Click(sender As Object, e As EventArgs) Handles btn_Read.Click
Dim path As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\new 1.txt"
If Not System.IO.File.Exists(path) Then
Return
End If
Dim lines As String() = System.IO.File.ReadAllLines(path, System.Text.Encoding.UTF8)
For i As Integer = 0 To lines.Length - 1 Step 1
If String.IsNullOrEmpty(lines(i)) Then
Continue For
End If
Dim numbers As String() = lines(i).Split({"n"c, "m"c, "b"c, "a"c, " "c}, StringSplitOptions.RemoveEmptyEntries)
If numbers.Length < 4 Then
Continue For
End If
Dim firstValue As Integer = Integer.Parse(numbers(0))
Dim secondValue As Integer = Integer.Parse(numbers(1))
Dim thirdValue As Integer = Integer.Parse(numbers(2))
Dim fourthValue As Integer = Integer.Parse(numbers(3))
Debug.WriteLine(firstValue.ToString() + " " + secondValue.ToString() + " " + thirdValue.ToString() + " " + fourthValue.ToString())
Next
End Sub
End Class
结果:
205 92 308 110
76 201 44 89
312 57 102 123
219 68 150 81