Преобразование содержимого текстового файла в новый файл

Я пытаюсь создать конвертер для чтения очень длинного текстового файла в поисках строки, содержащей определенную строку. Когда он находит эту строку, он должен записать найденную строку в новый файл вместе с другими строками до и после.

Мое приложение работает, но повторяет только первую найденную строку во всех группах строк, которые оно создает.

Например, группа в старом файле выглядит так:

[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 снова и снова столько раз, сколько есть групп для преобразования. Фактически все, что я хочу сделать, это удалить все белые пробелы и иностранные символы из файла, сохранив его структуру.

Я не уверен, что я сделал неправильно здесь. Кто-нибудь может помочь?


person Frankish EQG    schedule 16.09.2012    source источник


Ответы (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)  

Либо создайте временные переменные для хранения ваших результатов, либо используйте результат, не назначая его исходной строке.

i.e.

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))  
person Mark Hall    schedule 17.09.2012