Что нового

Доработка скрипта (парсинг текстового файла)

hydromarine

Новичок
Сообщения
13
Репутация
0
Всем доброго времени суток.
В продолжение темы http://autoit-script.ru/index.php?topic=20550.msg121414#msg121414

Имеется файл вида:
Код:
Issued Common Name: "user2"
  Binary Certificate:
-----BEGIN CERTIFICATE-----
MIIEMjCCAxqgAwIBAgIKFrGOIgAAAAAABjANBgkqhkiG9w0BAQUFADARMQ8wDQYD
VQQDEwZSb290Q0EwHhcNMTUwNjE1MjIzMjIyWhcNMjUwNjE1MjI0MjIyWjA8MRMw
EQYKCZImiZPyLGQBGRYDaW50MRIwEAYKCZImiZPyLGQBGRYCY2UxETAPBgNVBAMT
CHRlcGxvc2V0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApzk8v1gu
wRQ09Fz5R+E6J/7On4n72kW5yQ2FUjIxb3v3AaUDDHjvOZHPnoA2aH6XLpiKiP1Y
/Asr5RjIuHAjgXp8dZ7LW6ATgJzqquQ6cBJBRFF1JzHedHHu36rPUsD8nD8WUctZ
s9iT7SqIxDWl6kya5dkHRNWWugIK/CyzeOU8TsGSXDczTwmEX3XWuOpLy4elTStc
VF69S4LAyHXZNq+X9aNcUICIuvt59M3a7yzocxIwjlJo1JqC1FECjS/9CrsV77DO
VYrr3Y3SYYk3CwMEGqoUDAN1X5Czx/piP4BHRXbTtc/OtipbMuH3DKDrFs3IIIvD
L7gwARyculfMKQIDAQABo4IBXzCCAVswEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0O
BBYEFK7fJHaE2IGceOWFilbTxz10jJ6QMEkGA1UdIARCMEAwPgYEVR0gADA2MDQG
CCsGAQUFBwIBFihodHRwOi8vY3JsLnRlcGxvc2V0LnJ1L3BraS9wb2xpY2llcy5o
dG1sMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNV
HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFOTI6mAA+ny6s1jkS9khM+Xa0cMCMDsG
UCeeP3qnDaxcXJi6LXA24aaAK7krNDK/Kb7xXUlAulTO3bE+R9pBeB86GNdOgYcf
9Dv5zVE2gA85HNEYqRDH6bz7tfWFwA==
-----END CERTIFICATE-----


Row 2:
  Issued Common Name: "user3"
  Binary Certificate:
-----BEGIN CERTIFICATE-----
MIIC/TCCAeWgAwIBAgIQfHm8mrQk6qFKk92CXt/YZjANBgkqhkiG9w0BAQUFADAR
MQ8wDQYDVQQDEwZSb290Q0EwHhcNMTUwNjExMTI1MDI5WhcNNDAwNjExMTMwMDI4
WjARMQ8wDQYDVQQDEwZSb290Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQDdCeyfLT6bbp39toqaMjbNIeFPmsFWqMvtnwzCYudkFmYy42Z6INPCCE6F
UeQ7J/JTusQAhmQR+bgDrqv/HozEXwDdIQh6Ys75/P5D9LyMwXFsHjNl5ZpRudgj
EBRESxtPvdxlrfnLLtMuX+owBQn/v/HgBd6A+hdrSgXqnFPODzUgOgdc+4844J8V
J7enPE+bpvkGL8e6GfiklJ1Z76MafbJTNl5TaBCVjdCENgG5VsGu2vT74cqo1ejl
nv42/y9ciiUbQVVGzRJw8cbfY1IXGunhU0Mz/8PM1TXehcZSHZ2wnyMVnscS+yXR
Zq8oEHx6PncqyglhX4CLwV24JxM1AgMBAAGjUTBPMAsGA1UdDwQEAwIBhjAPBgNV
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBTkyOpgAPp8urNY5EvZITPl2tHDAjAQBgkr
q8tlDv5cI6a2dtkvbOE7ttVt348XZFVUJpCb/UqmtFrjcttlWoxrj+or/ytWrv/2
yw==
-----END CERTIFICATE-----

Row 3:
  Issued Common Name: "Жукова Екатерина Александровна"
  Binary Certificate: EMPTY

Row 4:
  Issued Common Name: "user5"
  Binary Certificate:
-----BEGIN CERTIFICATE-----
MIIFQzCCBCugAwIBAgIKYSSmugAAAAAAAzANBgkqhkiG9w0BAQUFADA8MRMwEQYK
CZImiZPyLGQBGRYDaW50MRIwEAYKCZImiZPyLGQBGRYCY2UxETAPBgNVBAMTCHRl
cGxvc2V0MB4XDTE1MDYxNTIyNTIyNloXDTIwMDYxMzIyNTIyNlowgc0xEzARBgoJ
kiaJk/IsZAEZFgNpbnQxEjAQBgoJkiaJk/IsZAEZFgJjZTEdMBsGA1UECxMUY29t
1Ns18fAPnR9ZcpE5Hux6imH+U7Kc8Q68OT+0F6ZvpM5m9cWs4rmRz/1hi6Gw3Ens
AOm/CuvafwIDAQABo4IBszCCAa8wPQYJKwYBBAGCNxUHBDAwLgYmKwYBBAGCNxUI
gd2jHYXq+C6BxYc/h7SqVoPauXSBbofhj3W2oi0CAWQCAQYwIAYDVR0lAQH/BBYw
FAYIKwYBBQUHAwIGCCsGAQUFBwMEMA4GA1UdDwEB/wQEAwIFoDAqBgkrBgEEAYI3
FQoBAf8EGjAYMAoGCCsGAQUFBwMCMAoGCCsGAQUFBwMEMIGUBgkqhkiG9w0BCQ8E
gYYwgYMwCwYJYIZIAWUDBAEqMAsGCWCGSAFlAwQBLTALBglghkgBZQMEARYwCwYJ
YIZIAWUDBAEZMAsGCWCGSAFlAwQBAjALBglghkgBZQMEAQUwCgYIKoZIhvcNAwcw
BwYFKw4DAgcwDgYIKoZIhvcNAwICAgCAMA4GCCqGSIb3DQMEAgICADAdBgNVHQ4E
FgQU4bWMov64WOP61JnfJ5QjwzJ+6dcwHwYDVR0jBBgwFoAUrt8kdoTYgZx45YWK
VtPHPXSMnpAwOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5jb21lbmVyZ28u
cnUvcGtpL3RlcGxvc2V0LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAUt7DooayQ1Cx
U3rs6yjbOmNpfJTc3J1B5hz32w2O4G+iBl9QQgzQrWFuT71gWG7GFxhsXWeDkgMU
xKjqraoR3MvmlBqHxPaCCggzK1b6ZFPFQp3TeMmV5qZfp675+jW21r6pMpogWYiE
x6ZghIN+o2oHw8ujzOAIx0EY/NreFhvyYb+flqZbhU4RxAUMO27ldoI+ZhfOjLlV
J2eGe4G2RhrG/Rhp3WqA1tKMG3bQkasGr102tD32JyPzhhh32Qc0+88YOwOCdt8K
IiZdKNYXHoSyYKRhfeSdMKMMoBWrXtfYjC+IIh7bcOh7cJQWeJgaLBBC3mgiv9DG
qjSv/Twf2g==
-----END CERTIFICATE-----

Имеется скрипт:
Код:
;#include <Array.au3> ; for _ArrayDisplay
Global $hFile, $sFileContent, $aRegexp, $sPattern
$sFileContent = FileRead(@ScriptDir & "\1.txt")
$sPattern = '(?si)Issued Common Name: "([^"]+)".*?Binary Certificate:.*?([-]{5}BEGIN CERTIFICATE[-]{5}.*?[-]{5}END CERTIFICATE[-]{5})'
$aRegexp = StringRegExp($sFileContent, $sPattern, 3)
;ConsoleWrite(StringFormat("$aRegexp: %s; @error=%s; @extended=%s;\r\n", $aRegexp, @error, @extended))
;_ArrayDisplay($aRegexp)
If IsArray($aRegexp) And UBound($aRegexp) >= 2 Then
    For $i = 0 To UBound($aRegexp) - 1 Step +2
        $hFile = FileOpen(@ScriptDir & "\" & $aRegexp[$i] & ".crt", 2)
        FileWrite($hFile, StringStripWS($aRegexp[$i + 1], 3))
        FileClose($hFile)
    Next
EndIf


Который работает на ура.
Но немного изменилась структура текстового файла и в нем теперь присутствуют строки вида:

Код:
Row 38:
  Issued Common Name: "Жукова Екатерина Александровна"
  Binary Certificate: EMPTY

Row 39:
  Issued Common Name: "galsync"
  Binary Certificate: EMPTY

Необходимо условие если скрипт находит
Код:
Binary Certificate: EMPTY
То пропускал бы эти блоки и шел на обработку следующих.
Либо же какую то первоначальную проверку файла, чтобы скрипт прогонял его и удалял блоки вида:
Код:
Row 38:
  Issued Common Name: "Жукова Екатерина Александровна"
  Binary Certificate: EMPTY
А далее повторно прогонял этот файл и на основе отредактированного файла создавал сертификаты.
Сейчас же получается что скрипт их обрабатывает и создает неправильные файлы.
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Необходимо заменить строку с шаблоном на следующую
Код:
$sPattern = '(?si)Issued Common Name: "([^"]+)"\h*?\v\h*?Binary Certificate:\h*?\v\h*?([-]{5}BEGIN CERTIFICATE[-]{5}.*?[-]{5}END CERTIFICATE[-]{5})'

P.S. часть условий можно выкинуть, если строго подходить к приведенному формату. Но если возможны лишние пробелы в конце стро, то лучше оставить
 
Автор
hydromarine

hydromarine

Новичок
Сообщения
13
Репутация
0
mef-t сказал(а):
Необходимо заменить строку с шаблоном на следующую
Код:
$sPattern = '(?si)Issued Common Name: "([^"]+)"\h*?\v\h*?Binary Certificate:\h*?\v\h*?([-]{5}BEGIN CERTIFICATE[-]{5}.*?[-]{5}END CERTIFICATE[-]{5})'

P.S. часть условий можно выкинуть, если строго подходить к приведенному формату. Но если возможны лишние пробелы в конце стро, то лучше оставить

Заменил, но теперь скрипт вообще не создает файлы на основе текстового документа.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
hydromarine [?]
Заменил, но теперь скрипт вообще не создает файлы на основе текстового документа.
Странное выражение. Вот рабочее:
Код:
$sPattern = '(?si)Issued Common Name: "([^"]+)"\s*Binary Certificate:\s*([-]{5}BEGIN CERTIFICATE[-]{5}.*?[-]{5}END CERTIFICATE[-]{5})+'
 
Автор
hydromarine

hydromarine

Новичок
Сообщения
13
Репутация
0
Medic84 сказал(а):
hydromarine [?]
Заменил, но теперь скрипт вообще не создает файлы на основе текстового документа.
Странное выражение. Вот рабочее:
Код:
$sPattern = '(?si)Issued Common Name: "([^"]+)"\s*Binary Certificate:\s*([-]{5}BEGIN CERTIFICATE[-]{5}.*?[-]{5}END CERTIFICATE[-]{5})+'

Все работает! Примного благодарен!
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
hydromarine,
Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Глобальный модератор.
 
Верх