2013-03-22 107 views
0

我想掃描包含特定字符串「black =」的行的文件,如果有匹配,請將其替換爲「blah blah」但我不知道該怎麼做。這是我試過的,但不起作用。掃描包含給定字符串的行的文本文件,並將行替換爲另一個字符串

Dim myStreamReaderL1 As System.IO.StreamReader 
myStreamReaderL1 = System.IO.File.OpenText("C:\File.txt") 
myStreamReaderL1.ReadLine() 
If myStreamReaderL1.ReadLine.Contains("black=") Then 
    Button2.Hide() 
Else 
    Return 
End If 
+0

到底有多大這個文件? – Steve 2013-03-22 13:57:30

+0

如果在函數內部讀取不包含'black ='的第一行之後返回的代碼。您需要修改該語句的else部分。你也只是讀2行。讀取一行的方式,然後讀取並檢查另一行。如果您想檢查整個文檔,則需要循環查看整個文本,然後執行替換。 – 2013-03-22 15:18:48

回答

3

假設輸入文件不是很大,你可以讀取整個文件轉換成字符串,並改變black=所有實例blah blah

 Dim myStreamReaderL1 As System.IO.StreamReader 
     Dim myStream As System.IO.StreamWriter 

     Dim myStr As String 
     myStreamReaderL1 = System.IO.File.OpenText("C:\File.txt") 
     myStr = myStreamReaderL1.ReadToEnd() 
     myStreamReaderL1.Close() 


     myStr = myStr.Replace("black=", "blah blah") 
     'Save myStr 
     myStream = System.IO.File.CreateText("C:\FileOut.txt") 
     myStream.WriteLine(myStr) 
     myStream.Close() 

編輯:稍微更有效(更少的代碼)版本與ReadAllText每克里斯蒂安紹爾的建議。

編輯2:如果我試圖高效率,讓優化一切。我認爲一條線就夠了。

如果你想保存到一個文件:

 System.IO.File.WriteAllText("C:\FileOut.txt", System.IO.File.ReadAllText("C:\File.txt").Replace("black=", "blah blah")) 

如果你只是想存入一個字符串供以後使用:

 Dim myStr As String = System.IO.File.ReadAllText("C:\File.txt").Replace("black=", "blah blah") 
+0

爲什麼不使用readalltext? ReadToEnd有沒有優勢? – 2013-03-22 15:15:12

+0

我試圖儘可能地堅持OP代碼。我用你的建議更新了我的答案。 ReadAllText使代碼略短。 – George 2013-03-22 15:20:30

相關問題