2013-11-23 69 views
1

所以开始这是我已经写代码:逐行读取文本行进行字符串操作

 Dim MyFile As String = "Path" 
     Dim str_new As String 
     Dim str_old As String = File.ReadAllText(MyFile) 

     Dim sr As New StreamReader(MyFile) 
     Dim strLines As String() = Strings.Split(sr.ReadToEnd, Environment.NewLine) 
     Dim Character As Integer = 5 'Line 1 always has 5 characters 
     For i = 2 To strLines.Length 
      Dim PreviousLine As String = sr.ReadLine(i - 1) 
      Dim CurrentLine As String = sr.ReadLine(i) 
      If CurrentLine.Contains(TextBox1.Text/100) Then 
       If PreviousLine.Contains("divide") Then 
        Exit For 
       End If 
      End If 
      Character = Character + CurrentLine.Length 
     Next 
     sr.Close() 

     str_new = Replace(str_old, (TextBox1.Text/100), (TextBox3.Text/100), Character, 1) 

      Dim objWriter3 As New System.IO.StreamWriter(MyFile, False) 
      objWriter3.Write(str_new) 
      objWriter3.Flush() 
      objWriter3.Close() 

我试图想出一个办法来将一个长代码文件到行,然后检查每个为某些字符串行。如果当前行包含字符串,那么我会在上面和/或下面的行上进行额外的检查,以确保这是字符串的正确实例。最后,我想用不同的字符串替换该字符串的实例。

一个例子:文本文件

class 
... 
0.3 
divide <-- Previous Line 
0.3  <-- TextBox1.Text is 30 
.5 
end 
  1. 我想要的代码去过去的0.3
  2. 一审查找二审
  3. 检查前行的鸿沟
  4. 退出循环
  5. 将0.3的第二个实例替换为某个值

我一直在寻找这一段时间现在和任何帮助将不胜感激! 〜马特

修订:代码

 Dim MyFile As String = "Path" 
     Dim NewFile As String = "Temporary Path" 
     Dim PreviousLine As String = "" 
     Dim CurrentLine As String = "" 
     Using sr As StreamReader = New StreamReader(MyFile) 
      Using sw As StreamWriter = New StreamWriter(NewFile) 
       CurrentLine = sr.ReadLine 
       Do While (Not CurrentLine Is Nothing) 
        Dim LinetoWrite = CurrentLine 

        If CurrentLine.Contains(TextBox1.Text) Then 
         If PreviousLine.Contains("divide") Then 
          LinetoWrite = Replace(CurrentLine, TextBox1.Text, TextBox3.Text) 
         End If 
        End If 

        sw.WriteLine(LinetoWrite) 
        PreviousLine = CurrentLine 
        CurrentLine = sr.ReadLine 
       Loop 
      End Using 
     End Using 

     My.Computer.FileSystem.CopyFile(NewFile, MyFile, True) 
+0

首先使用变量,而不是文本框。 'TextBox1.Text/100'就是不好的; TB包含文本而不是数字。由于您正在使用结果进行比较,因此您应该对结果进行格式化以使其匹配。另外,使用NotePad ++可能会更快。 – Plutonix

+0

什么版本的.Net? –

+0

Plutonix〜我正在编写一个应用程序,需要用户输入当前值和后一个值。我有错误处理,以确保字符串只有数字。 – Matt

回答

1

你在错误的道路面临的问题。您必须同时设置读取器和写入器,并生成包含所有修改的新文件。你的代码有不同的部分,应该改进;在这个答案中,我只是展示了如何正确使用StreamReader/StreamWriter。示例代码:

Dim MyFile As String = "input path" 
Dim OutputFile As String = "output path" 
Dim PreviousLine As String = "" 
Dim CurrentLine As String = "" 
Using sr As StreamReader = New StreamReader(MyFile) 
    Using sw As StreamWriter = New StreamWriter(OutputFile) 

     CurrentLine = sr.ReadLine 

     Do While (Not CurrentLine Is Nothing) 

      Dim lineToWrite = CurrentLine 

      'Perform the analysis you wish by involving the current line, the previous one and as many other (previous) lines as you wish; and store the changes in lineToWrite. You should call a function here to perform this analysis 

      sw.WriteLine(lineToWrite) 'Writing lineToWrite to the new file 

      PreviousLine = CurrentLine 'Future previous line 
      CurrentLine = sr.ReadLine 'Reading the line for the next iteration 
     Loop 
    End Using 
End Using 
+0

我喜欢你的思维过程。阅读和写入新行是非常有意义的,而不是在流程结束时进行。考虑到这一点,我会重新修改我的代码。 – Matt

+0

@Matt谢谢。这里有所帮助。 – varocarbas

+0

更新了原始代码并标记为最佳答案。谢谢你,先生! – Matt