Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Построчное чтение "большого" файла и замена символов (http://forum.oszone.net/showthread.php?t=266661)

phenoMANon 22-08-2013 13:11 2205603

Построчное чтение "большого" файла и замена символов
 
Доброго времени суток!

Прошу помощи при решении следующего вопроса!
Имеется файл размером около 600 Мегабайт, каждый день он обновляется и в нём требуется выполнять следующий преобразования:
1) Удалить все строки которые начинаются с "ФИО"
2) Выполнить ряд последовательных замен:
заменить ;" на "
заменить ; на -
заменить " =" на ;
удалить ="
удалить "

Получилось сделать замену для маленьких файлов но тут видимо требуется построчное чтение и замена, а я в данном языке не сильно соображаю.
Заранее спасибо всем кто откликнется и поможет реализовать данную задачу хотя бы частично.

Iska 22-08-2013 13:26 2205611

Цитата:

Цитата phenoMANon
каждый день он обновляется »

Он при этом дописывается или полностью заменяется на новый?

Приведите пример файла (разумеется, не на все 600 Мб, а на несколько килобайт из него — упакуйте в архив и прикрепите архив к сообщению; либо выложите на RGhost, а ссылку — сюда).

phenoMANon 22-08-2013 13:30 2205614

Цитата:

Цитата Iska
Он при этом дописывается или полностью заменяется на новый? »

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

Iska 22-08-2013 13:58 2205630

phenoMANon, ясно. Тогда ждём образец файла для обработки, в котором было бы всё указанное для замены:
Цитата:

Цитата phenoMANon
1) Удалить все строки которые начинаются с "ФИО"
2) Выполнить ряд последовательных замен:
заменить ;" на "
заменить ; на -
заменить " =" на ;
удалить ="
удалить " »


phenoMANon 23-08-2013 06:00 2206006

Вложений: 2
Прикладываю два архива, первый Исходный - пример того, над чем требуется производить преобразования, второй Результат - это то что примерно должно быть в итоге (обрабатываю вручную в FAR). Файлы в формате .csv но прекрасно читаются как текст в любом текстовом редакторе, будь то хоть блокнот, хоть FAR.
Файл 103179

Файл 103180

Iska 23-08-2013 09:30 2206048

Примерно так:
читать дальше »
Код:

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.

Время: 01:04.
© OSzone.net 2001-