在vb.net中搜索文本文件以查找未知文本

时间:2016-05-10 10:10:11

标签: vb.net loops text replace

我有一个文本文件,其中包含我想要查找和替换的信息,并保存到新文件中。 文本文件中充满了大量文本,但其中的某个地方包含的视图编号如下所示。

- " Name="View 12"
- A few lines lower down it will contain:
-" Name="View 21"

我需要能够搜索第一个视图名称(按照文本文件中的顺序,而不是视图的数字顺序),并将第一个名称替换为“Page 1”,第二个名称替换为“Page 1”第2页“,第3页”,“第3页”等。

目前我正在使用Replace函数来查找char并替换为新的char。

我可以将“视图”部分更改为“页面”而不是数字。 这是我目前的代码。 我不知道如何搜索视图编号,因为它可能是任何东西。 这可能是因为我弄乱了循环,或者我没有使用正确的功能。有人有任何想法或建议吗?感谢。

    Dim oldChar As String
    Dim newViewName As String

    For anInt = 1 To 40

        oldChar = ("Name=""View " & anInt)
        newViewName = ("Name=""Page " & i)

        While anInt = 1
            fileReader = My.Computer.FileSystem.ReadAllText("C:\Documents\Views.txt").Replace(oldChar, newViewName)
            My.Computer.FileSystem.WriteAllText("C:\Documents\New.txt", fileReader, False)
            anInt = 2
            i = 2
        End While

        fileReader = My.Computer.FileSystem.ReadAllText("C:\Documents\New.txt").Replace(oldChar, newViewName)
        My.Computer.FileSystem.WriteAllText("C:\Documents\New.txt", fileReader, False)
        i = i + 1
    Next anInt

更新:

我得到的问题是编号。如果文本中的视图顺序是

- View 1
- View 3
- View 5
- View 7

然后我可以愉快地改变“视图”。但这个数字并没有按顺序改变。在这种情况下,它保持相同的顺序,1,3,5,7。我希望它阅读:

- Page 1
- Page 2
- Page 3
- Page 4

2 个答案:

答案 0 :(得分:0)

由于我们不知道您的文本文件究竟是什么样子,因此很难给出好的建议。但是,我会将textfile读入一个字符串然后拆分文本文件。然后我会使用contains函数来查找Name。这段字符串我将替换为新文本和下一个数组elemt我将替换为数字。

以下是一个例子:

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles   Button1.Click
    Dim oldtext1 As String
    Dim newViewName As String
    Dim i As Integer = 0
    Dim counter As Integer = 0
    Dim testext As String = ""
    Dim str As String()
    oldtext1 = "Name=""View "
    newViewName = ("Name=""Page ")
    testext = My.Computer.FileSystem.ReadAllText("C:\Users\gerhard\Desktop\test1.txt")
    str = testext.Split(" "c)
    For i = 0 To str.Length - 1
        If str(i).Contains("Name") Then
            counter += 1
            str(i) = "Name=""Page "
            str(i + 1) = counter.ToString
        End If
    Next
    For Each word As String In str
        Debug.Print(word)
    Next

End Sub

答案 1 :(得分:0)

编辑:

问题是每次循环i时都会增加anInt。你需要它,只有在发生替换时才会增加

If My.Computer.FileSystem.ReadAllText("C:\Documents\New.txt").Contains("Name=""View " & anInt) Then i += 1

就像极简主义者所说的那样,多一点信息会有所帮助

我刚刚浏览了文本文件的每一行。如果它包含匹配的字符串,请将其替换。无论哪种方式,该行都会被写入新文件。

    Dim sr As IO.StreamReader
    Dim filename As String = System.IO.Path.Combine(My.Computer.FileSystem.SpecialDirectories.MyDocuments, "Views.txt")
    Dim newfilename As String = System.IO.Path.Combine(My.Computer.FileSystem.SpecialDirectories.MyDocuments, "new.txt")
    Dim newfile As System.IO.StreamWriter = My.Computer.FileSystem.OpenTextFileWriter(newfilename, True)
    Dim pageNumber As Integer = 1

    If IO.File.Exists(filename) Then
        sr = IO.File.OpenText(filename)

        Do While sr.Peek <> -1
            Dim thisLine As String = sr.ReadLine
            If thisLine.Contains("Name=""View ") Then
                newfile.WriteLine(thisLine.Replace("Name", "Page " & pageNumber.ToString))
                pageNumber += 1
            Else
                newfile.WriteLine(thisLine)
            End If
        Loop
        sr.Close()
        newfile.Close()
    End If

这是假设Name=将在不同的行上进行,正如您所说的那样。

如果你想要安全,我会避免.Replace,并考虑删除和插入子串,以避免意外更换你不应该的东西。