2016-03-23 2 views
1

У меня есть текстовый файл с разделителями каналов, который поступает ежедневно с разрывами строк в результате прерывания онлайн-фида.Fixing Linefeed breaks

Каждая строка в файле начинается с FORM_, поэтому я обычно открыть файл в блокноте ++, использовать поиск и замену или для ^[^FORM] или ([^\S \r\n]*)\n([^\S\r\n]*) и вручную исправить ошибку.

Из-за ограничений в технологии, в которых я работаю, я пишу сценарий vb, который в конечном итоге станет исполняемым файлом, в том числе для исправления этой проблемы.

Я смотрел здесь для некоторых возможных ответов и ниже, что я пробовал:

Чтение файла одну строку в то время, а затем с помощью регулярных выражений, чтобы заменить какой-либо из указанных выше критериев поиска:

objFixFormFile = objFSO.OpenTextFile(FileLocation & filename, 1) 
objWriteFormFile = objFSO.CreateTextFile(FileLocation & NewFileName, True) 
Do while not objFixFormFile.AtEndOfStream 
    If strReader = "" THEN 
     strReader = objFixFormFile.ReadLine 
    Else 
     strReader = strReader & ";" & objFixFormFile.ReadLine 
    End if 
Loop 
ObjFixFormFile.Close       
strCleansedLine = RegEx.Replace(strReader, ("[^\S \r\n]*)\n([^\S\r\n]*)", "") 
strCleansedLine = RegEx.Replace(strReader, ";", "\n") 
objWriteFormFile.Writeline(strWriter) 

Это не сработало. Когда я пытаюсь сделать версию вышеуказанного кода .ReadAll из 125 000 записей, я получаю только 59 000 записей.

Не могли бы вы посоветовать, что это лучший способ сделать это, поскольку он должен работать ежедневно?

+2

Вы можете добавить некоторые провала попытки образцы и часть кода, где RegEx экземпляр? –

+0

Во-первых: В двух 'Replace' внизу вы используете' strReader' как вход для обоих - не должен ли второй иметь 'strCleansedLine'? Во-вторых, то же самое относится к оператору 'WriteLine' - не должно быть результата второго' Replace' (также 'strCleansedLine')? – ClasG

ответ

0

только написать разрыв строки для предыдущей строки, если текущая строка начинается с FROM_:

Do Until objFixFormFile.AtEndOfStream 
    line = objFixFormFile.ReadLine 
    If Left(line, 5) = "FROM_" And objFixFormFile.Line > 2 Then 
     objWriteFormFile.WriteLine 
    End If 
    objWriteFormFile.Write line 
Loop 
objWriteFormFile.WriteLine 

objFixFormFile.Close 
objWriteFormFile.Close