我想检查记事本中的特定列并将所有列替换为零,我有以下代码
Dim vtext As String
Dim sum As Integer
Dim vstring(-1) As String
Dim p1 As String() = {vbTab}
Dim vData As String = ""
Using sr As New StreamReader("C:\Users\310238479\Desktop" + "\" + database(i) + ".txt")
While sr.Peek <> -1
lines.Add(sr.ReadLine)
End While
End Using
For Each line As String In lines
vstring = line.Split(p1, StringSplitOptions.RemoveEmptyEntries)
If (vstring.Length = 11) Then
If (vstring(10) <> "0") Then
vstring(10) = "0"
End If
End If
Next
Using sw As New StreamWriter("C:\Users\310238479\Desktop" + "\" + database(i) + ".txt")
For Each line As String In lines
sw.WriteLine(line)
Next
End Using
假设是工作但不知何故我不能让它工作,我保证扩展没有问题。请给我一些建议。
答案 0 :(得分:1)
首先,这与记事本无关。记事本只是一个文本文件编辑器。周围有很多这样的应用程序。文本文件是文本文件。
其次,不要使用循环来读取和写入文件的行,而只需使用File.ReadAllLines
和File.WriteAllLines
在一行代码中执行每一行。
至于问题,你的问题在于:
For Each line As String In lines
vstring = line.Split(p1, StringSplitOptions.RemoveEmptyEntries)
If (vstring.Length = 11) Then
If (vstring(10) <> "0") Then
vstring(10) = "0"
End If
End If
Next
你遍历大概是List(Of String)
的东西,并且对于每个项目,你将它分成一个String
数组,然后可能改变该数组的一个元素。这一切都很好,但你只需丢弃该数组,不要对你后来写回文件的List(Of String)
进行任何更改。如果要将不同的文本写回文件,则必须实际更改写回文件的文本。这意味着用修改后的数组的连接内容替换原始行,例如
For i = 0 To lines.Count - 1
vstring = lines(i).Split(p1, StringSplitOptions.RemoveEmptyEntries)
If (vstring.Length = 11) AndAlso (vstring(10) <> "0") Then
vstring(10) = "0"
lines(i) = String.Join(ControlChars.Tab, vstring)
End If
Next