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、変換するグループの数だけインデックスを何度も繰り返すだけです。事実上、私がやりたいことは、ファイルの構造を維持しながら、すべての白いギャップと外国の文字をファイルから削除することです。

ここで何が間違っていたのかわかりません。誰でも助けることができますか?

4

1 に答える 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))  
于 2012-09-17T03:17:27.350 に答える