我在这里有些卡住,我想做的是阅读一个文本文件,找到包含X =和Y =的行,然后将X =更改为X = 1,将Y =更改为Y = 1
到目前为止,我已经获得了这段代码
Dim MyPath As String = "C:\Users\kiko4\Desktop\text.txt"
Dim Rdr As New StreamReader(MyPath)
Dim ln As String
Dim NewFile As New StringBuilder
ln = Rdr.ReadLine
Do Until ln Is Nothing
If ln.StartsWith("X=", "Y=") And ComboBox1.Text = "1" Then ln = "X=1" & "Y=1"
NewFile.AppendLine(ln)
ln = Rdr.ReadLine
Loop
Rdr.Close()
File.WriteAllText(MyPath, NewFile.ToString)
MsgBox("Successfully changed the resolution.", MsgBoxStyle.Information)
End Sub
因此这导致仅更改X并保持原样保留Y,是否可以同时更改两行?
答案 0 :(得分:0)
这就是我固定的方式,可以按预期工作,同时更改了两个值,感谢大家的帮助:)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim MyPath As String "C:\Users\kiko4\AppData\Local\FortniteGame\Saved\Config\WindowsClient\text.txt")
Dim Rdr As New StreamReader(MyPath)
Dim ln As String
Dim ac As String
Dim NewFile As New StringBuilder
ln = Rdr.ReadLine
ac = Rdr.ReadLine
Do Until ln Is Nothing
If ln.StartsWith("ResolutionSizeX=") Then ln = "ResolutionSizeX=" + TextBox1.Text
NewFile.AppendLine(ln)
ln = Rdr.ReadLine
If ac.StartsWith("ResolutionSizeY=") Then ac = "ResolutionSizeY=" + TextBox2.Text
NewFile.AppendLine(ac)
ac = Rdr.ReadLine
Loop
Rdr.Close()
File.WriteAllText(MyPath, NewFile.ToString)
MsgBox("Successfully changed the resolution.", MsgBoxStyle.Information)
End Sub
End Class
答案 1 :(得分:0)
在遇到困难时,尝试采用其他方法...试试:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim SR As New StreamReader("C:\Users\kiko4\Desktop\text.txt")
Dim Result As String = SR.ReadToEnd()
SR.Close()
Dim Lines As String() = Result.Split(Environment.NewLine)
Dim TestLine As String
Dim ReplacedLine As String
For Each line As String In Lines
TestLine = line
If TestLine.Contains("X=") Then
ReplacedLine = TestLine.Replace("X=", "X=" & ComboBox1.Text)
Result = Result.Replace(TestLine, ReplacedLine)
ElseIf TestLine.Contains("Y=") Then
ReplacedLine = TestLine.Replace("Y=", "Y=" & ComboBox1.Text)
Result = Result.Replace(TestLine, ReplacedLine)
End If
Next
Dim SW As New StreamWriter("C:\Users\kiko4\Desktop\text.txt")
SW.Write(Result)
SW.Close()
End Sub
请随时询问您不了解的任何事情。
有用的希望
答案 2 :(得分:0)
使用StreamReaders / Writers很不错,而且肯定是最好的方法 当您尝试一次遍历多行时。 但是,在这种情况下,这实际上不是必需的,因为OP只是尝试替换文件中的所有事件,所以行根本没有关系。
从可读性/长度的角度来看,最好是这样:
Dim inPath As String = "C:\Users\kiko4\Desktop\text.txt"
Dim trText As String = File.ReadAllText(inPath)
If trText.Contains("X=") AndAlso trText.Contains("Y=") Then File.WriteAllText(inPath, trText.Replace("X=", "X=1").Replace("Y=", "Y=1"))
(读取文件中的所有文本并将其作为单个字符串保存到trText,如果trText包含要替换的字符串,则将具有替换值的trText的内容写入文件)
或者,如果您100%确保所传递的每个文件都包含搜索值,那么您甚至可以在一行中完成该操作:
File.WriteAllText("C:\Users\kiko4\Desktop\text.txt", File.ReadAllText("C:\Users\kiko4\Desktop\text.txt").Replace("X=", "X=1").Replace("Y=", "Y=1"))
如果文件中不包含“ X =”和“ Y =”,则该会爆炸。