我有一个文本文件,其中包含我想要查找和替换的信息,并保存到新文件中。 文本文件中充满了大量文本,但其中的某个地方包含的视图编号如下所示。
- " 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
答案 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
,并考虑删除和插入子串,以避免意外更换你不应该的东西。