1

Тема: VBScript: Как отформатировать текстовый файл в нужный формат

Здравствуйте.

Имеется огромный список адресов в текстовом виде, большинство адресов соответствует виду:

НАИМЕНОВАНИЕ ОРГАНИЗАЦИИ
ИНДЕКС, АДРЕС
Руководитель

но, около 30% адресов имеют вид:

ДЛИННОЕ
НАИМЕНОВАНИЕ
ОРГАНИЗАЦИИ
ИНДЕКС, АДРЕС
Руководитель

или:
НАИМЕНОВАНИЕ ОРГАНИЗАЦИИ
ИНДЕКС, ДЛИННЫЙ
АДРЕС
Руководитель

или:
ДЛИННОЕ
НАИМЕНОВАНИЕ
ОРГАНИЗАЦИИ
ИНДЕКС, ДЛИННЫЙ
АДРЕС
Руководитель

Необходимо всё привести к виду:

НАИМЕНОВАНИЕ ОРГАНИЗАЦИИ
ИНДЕКС, АДРЕС
Руководитель

К чему можно привязаться:
1. Каждый контрагент разделён пустой строкой
2. Индекс начинается только с цифр 1,2,3,4 и 6
3. Руководитель - это текст "Руководитель"

2

Re: VBScript: Как отформатировать текстовый файл в нужный формат

kdesys, выложите сюда, пожалуйста, небольшой образец, включающий в себя все три «неправильных» вида и хотя бы один «правильный», оформив его текст тэгом «code». Да, и какая кодировка текстового файла?

3 (изменено: kdesys, 2011-08-28 23:09:54)

Re: VBScript: Как отформатировать текстовый файл в нужный формат

Кодировка win1251, но это значения не имеет. Могу сделать любую.

Вот пример:

АГРАРИЙ ООО
347401, Россия, Ростовская обл., Дубовский р-н, хут. Гуреев
Руководителю

АГРАРНИК ООО
306455, Россия, Курская обл., Черемисиновский
р-н, п/о Новосавинское, д. Садовка
Руководителю

АГРАРИЙ, СЕЛЬСКОХОЗЯЙСТВЕННАЯ 
АРТЕЛЬ ООО
396753, Россия, Воронежская обл., Богучарский р-н, с.Твердохлебовка
Руководителю

АГРАРИЙ СЕЛЬСКОХОЗЯЙСТВЕННАЯ 
АРТЕЛЬ
396753, Россия, Воронежская обл.,Богучарский
р-н, хут. Белый Колодезь, ул. Советская, 5
Руководителю

Первый вариант правильный, остальные не правильные.

Логически я бы описал работу скрипта следующим образом (не вдаваясь в кодинг):
1. Найти пустую строку A, найти строку содержащую шесть цифр подряд B, если между строкой A и B больше одной строки, совместить их в одну строку.
2. Найти строку содержащую шесть цифр подряд C, найти пустую строку D, если между строкой C и D больше двух строк, совместить их в одну, не трогая последнюю.

4

Re: VBScript: Как отформатировать текстовый файл в нужный формат

Попробуйте так:

Option Explicit

Const ForReading   = 1

Dim objFSO
Dim objRegExp

Dim strValue
Dim strOrganization
Dim strAddress


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FileExists(WScript.Arguments.Item(0)) Then
    Set objRegExp = WScript.CreateObject("VBScript.RegExp")
    
    objRegExp.IgnoreCase = True
    
    With objFSO.OpenTextFile(WScript.Arguments.Item(0), ForReading)
        Do Until .AtEndOfStream
            strValue = .ReadLine()
            
            If Len(strValue) <> 0 Then
                strOrganization   = strValue
                objRegExp.Pattern = "\d{6}.*"
                
                Do
                    strValue = .ReadLine()
                    
                    If objRegExp.Test(strValue) Then
                        Exit Do
                    Else
                        strOrganization = strOrganization & " " & strValue
                    End If
                Loop
                
                strAddress        = strValue
                objRegExp.Pattern = "Руководителю"
                
                Do
                    strValue = .ReadLine()
                    
                    If objRegExp.Test(strValue) Then
                        Exit Do
                    Else
                        strAddress = strAddress & " " & strValue
                    End If
                Loop
                
                WScript.Echo _
                    strOrganization & vbCrLf & _
                    strAddress & vbCrLf & _
                    strValue
            Else
                WScript.Echo
            End If
        Loop
    End With
    
    Set objRegExp = Nothing
Else
    WScript.Echo "File [" & WScript.Arguments.Item(0) & "] not found"
End If

Set objFSO = Nothing

WScript.Quit 0

Примерный вид вызова скрипта:

cscript.exe "E:\Песочница\0067\Script.vbs" "E:\Песочница\0067\In.txt" >"E:\Песочница\0067\Out.txt"

P.S. Может быть, можно было и проще, скажем — одними регулярными выражениями обойтись.

5

Re: VBScript: Как отформатировать текстовый файл в нужный формат

alexii пишет:

Попробуйте так:
Примерный вид вызова скрипта:
cscript.exe "E:\Песочница\0067\Script.vbs" "E:\Песочница\0067\In.txt" >"E:\Песочница\0067\Out.txt"
P.S. Может быть, можно было и проще, скажем — одними регулярными выражениями обойтись.

Ух ты, супер. Спасибо!!!
Напиши, куда выслать электронных денег на пиво.
Можно в личку, я настаиваю. :-)

P.S. А можно не привязываться к строке Руководитель?

6

Re: VBScript: Как отформатировать текстовый файл в нужный формат

kdesys пишет:

Напиши, куда выслать электронных денег на пиво. Можно в личку, я настаиваю. :-)

Напишите, пожалуйста, в личку atomix'у, насчёт пива не уверен, а пожертвование на содержание сайта и форума может и примет.

kdesys пишет:

P.S. А можно не привязываться к строке Руководитель?

Там может быть реальное имя?

7

Re: VBScript: Как отформатировать текстовый файл в нужный формат

alexii пишет:

...пожертвование на содержание сайта и форума может и примет...

отписался.

alexii пишет:

Там может быть реальное имя?

Как оказалось, в некоторых случаях, да.

8

Re: VBScript: Как отформатировать текстовый файл в нужный формат

kdesys пишет:

Как оказалось, в некоторых случаях, да.

1. То есть, вместо именно «Руководителю» только «Иванову Ивану Ивановичу», так?
2. Но всё равно, это будет одна строка?

9

Re: VBScript: Как отформатировать текстовый файл в нужный формат

alexii пишет:
kdesys пишет:

Как оказалось, в некоторых случаях, да.

1. То есть, вместо именно «Руководителю» только «Иванову Ивану Ивановичу», так?
2. Но всё равно, это будет одна строка?

1 и 2 да, именно так.

10

Re: VBScript: Как отформатировать текстовый файл в нужный формат

kdesys, спасибо, ясно. Попробуем.