2012-09-16 56 views
0

我正在嘗試創建一個轉換器來讀取一個非常長的文本文件,查找包含特定字符串的行。當它找到這個字符串時,它應該將它發現的行與前後的其他行一起寫入一個新文件。將文本文件的內容轉換爲新文件

我的應用程序可以工作,但它只是重複它創建的所有線組中的第一條找到的線。

例如,在舊文件一羣看起來像這樣:

[PARTICLE930] 
INDEX = 930    ;º§¶óÅä076_¼ÕµîÀÌÆåÆ®_¿À¸¥ 
ABSAXIS=0 
PARTICLE=.\Chef\60LV_WHITE\B\BF\076\hand_eff_r.spt 

我想提取只是PARTICLE=.\開頭的行,並自動創建它周圍的新線。由於組號是連續的,並且沒有差距,因此我不需要提取索引號,我可以即時創建它。

我迄今爲止代碼:

Dim source As String = "Particle.ini" 
Dim dest As String = "CParticle.ini" 
Dim path As String = Application.StartupPath 
Dim max As Integer = 1233 

Dim l_pnum As String = "[PARTICLE{0}]" 
Dim l_index As String = "INDEX = {1}" 
Dim l_absaxis As String = "ABSAXIS=0" 
Dim l_particle As String = "{2}" 


If System.IO.File.Exists(path & "\" & source) Then 
    Dim objReader As New System.IO.StreamReader(path & "\" & source) 
    Dim objWriter As New System.IO.StreamWriter(path & "\" & dest, True) 

    objWriter.WriteLine("[PARTICLE_INFO]") 
    objWriter.WriteLine("MAXPARTICLE=" & max.ToString) 

    Dim loop_num As Integer = 1 
    Do While objReader.Peek() <> -1 

     Dim line_read As String = objReader.ReadLine() 

     If line_read.Contains("PARTICLE=.\") Then 

      l_pnum = l_pnum.Replace("{0}", loop_num.ToString) 
      l_index = l_index.Replace("{1}", loop_num.ToString) 
      l_particle = l_particle.Replace("{2}", line_read) 

      objWriter.WriteLine(l_pnum) 
      objWriter.WriteLine(l_index) 
      objWriter.WriteLine(l_absaxis) 
      objWriter.WriteLine(l_particle) 

      loop_num = loop_num + 1 
     End If 

    Loop 

Else 
    MessageBox.Show("File does not exist" & vbNewLine & path & "\" & source) 
End If 

正如我前面所說,它的工作原理,但它只是重複指數1一遍又一遍的多次有羣體轉換。 實際上,我想要做的就是刪除文件中的所有白色空白和外來字符,同時保留它的結構。

我不知道我在這裏做錯了什麼。任何人都可以幫忙?

回答

1

它看起來像你正在擦除你的第一個替換格式,因此它不會寫下一個記錄。

你設置你的字符串作爲這樣的:

Dim l_pnum As String = "[PARTICLE{0}]" 
Dim l_index As String = "INDEX = {1}" 
Dim l_absaxis As String = "ABSAXIS=0" 
Dim l_particle As String = "{2}" 

然後當你寫你的第一個記錄你與你的​​結果意味着你不再有格式寫出來的下一個記錄更換你的主人。

l_pnum = l_pnum.Replace("{0}", loop_num.ToString) 
l_index = l_index.Replace("{1}", loop_num.ToString) 
l_particle = l_particle.Replace("{2}", line_read) 

要麼創建臨時變量來保存您的結果,要麼使用結果而不將它分配給您的初始字符串。

objWriter.WriteLine(l_pnum.Replace("{0}", loop_num.ToString))  
objWriter.WriteLine(l_index.Replace("{1}", loop_num.ToString))  
objWriter.WriteLine(l_absaxis)  
objWriter.WriteLine(l_particle.Replace("{2}", line_read)) 
+0

我知道這是一個非常晚的答覆,但謝謝! –

+0

@FrankishEQG不客氣 –