使用vb.net替换记事本文本的制表符分隔列

时间:2016-05-27 02:21:03

标签: vb.net

我想检查记事本中的特定列并将所有列替换为零,我有以下代码

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

假设是工作但不知何故我不能让它工作,我保证扩展没有问题。请给我一些建议。

1 个答案:

答案 0 :(得分:1)

首先,这与记事本无关。记事本只是一个文本文件编辑器。周围有很多这样的应用程序。文本文件是文本文件。

其次,不要使用循环来读取和写入文件的行,而只需使用File.ReadAllLinesFile.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