phenoMANon |
22-08-2013 13:11 2205603 |
Построчное чтение "большого" файла и замена символов
Доброго времени суток!
Прошу помощи при решении следующего вопроса!
Имеется файл размером около 600 Мегабайт, каждый день он обновляется и в нём требуется выполнять следующий преобразования:
1) Удалить все строки которые начинаются с "ФИО"
2) Выполнить ряд последовательных замен:
заменить ;" на "
заменить ; на -
заменить " =" на ;
удалить ="
удалить "
Получилось сделать замену для маленьких файлов но тут видимо требуется построчное чтение и замена, а я в данном языке не сильно соображаю.
Заранее спасибо всем кто откликнется и поможет реализовать данную задачу хотя бы частично.
|
Цитата:
Цитата phenoMANon
каждый день он обновляется »
|
Он при этом дописывается или полностью заменяется на новый?
Приведите пример файла (разумеется, не на все 600 Мб, а на несколько килобайт из него — упакуйте в архив и прикрепите архив к сообщению; либо выложите на RGhost, а ссылку — сюда).
|
phenoMANon |
22-08-2013 13:30 2205614 |
Цитата:
Цитата Iska
Он при этом дописывается или полностью заменяется на новый? »
|
После преобразований в файле он перемещается в другую папку, а на следующий день на его место записывается новый файл с тем же именем и аналогичной структурой. Это некий лог файл за предыдущий день.
|
phenoMANon, ясно. Тогда ждём образец файла для обработки, в котором было бы всё указанное для замены:
Цитата:
Цитата phenoMANon
1) Удалить все строки которые начинаются с "ФИО"
2) Выполнить ряд последовательных замен:
заменить ;" на "
заменить ; на -
заменить " =" на ;
удалить ="
удалить " »
|
|
phenoMANon |
23-08-2013 06:00 2206006 |
Вложений: 2
Прикладываю два архива, первый Исходный - пример того, над чем требуется производить преобразования, второй Результат - это то что примерно должно быть в итоге (обрабатываю вручную в FAR). Файлы в формате .csv но прекрасно читаются как текст в любом текстовом редакторе, будь то хоть блокнот, хоть FAR.
Файл 103179
Файл 103180
|
Примерно так:
читать дальше »
Код:
Option Explicit
Dim strSourceFile
Dim strTempFile
Dim strBakFile
Dim objFSO
Dim objTS
Dim strLine
If WScript.Arguments.Count = 1 Then
strSourceFile = WScript.Arguments.Item(0)
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strSourceFile) Then
strTempFile = GetTempName()
Set objTS = objFSO.CreateTextFile(strTempFile)
With objFSO.OpenTextFile(strSourceFile)
Do Until .AtEndOfStream
strLine = .ReadLine()
If Not Left(strLine, Len("""ФИО""")) = """ФИО""" Then
strLine = Replace(strLine, ";""", """")
strLine = Replace(strLine, ";", "-")
strLine = Replace(strLine, """ =""", ";")
strLine = Replace(strLine, """ ", "")
strLine = Replace(strLine, "=""", "")
strLine = Replace(strLine, """", "")
objTS.WriteLine strLine
End If
Loop
.Close
End With
objTS.Close
Set objTS = Nothing
strBakFile = objFSO.BuildPath(objFSO.GetParentFolderName(strSourceFile), objFSO.GetBaseName(strSourceFile) & ".bak")
If objFSO.FileExists(strBakFile) Then
objFSO.DeleteFile strBakFile, True
End If
objFSO.GetFile(strSourceFile).Name = objFSO.GetBaseName(strSourceFile) & ".bak"
objFSO.CopyFile strTempFile, strSourceFile, True
objFSO.DeleteFile strTempFile, True
Else
WScript.Echo "Can't find source file [" & strSourceFile & "]."
End If
Else
WScript.Echo "Usage: wscript.exe """ & WScript.ScriptFullName & """ <Source file>"
End If
WScript.Quit 0
Function GetTempName()
Dim strTempName
Do
strTempName = objFSO.BuildPath(objFSO.GetSpecialFolder(2), objFSO.GetTempName)
Loop While objFSO.FileExists(strTempName)
GetTempName = strTempName
End Function
|
phenoMANon |
23-08-2013 10:44 2206076 |
СПАСИБО огромнейшее! Всё работает отлично!
|
Время: 01:04.
© OSzone.net 2001-