Что нового

Вставить в текстовый файл текстовые и числовые значения

Latoid

Знающий
Сообщения
95
Репутация
11
Здравствуйте.
есть файл pdf_template.fdf такой структуры:
Код:
%FDF-1.2
%вгПУ
1 0 obj 
<<
/FDF 
<<
/Fields [
<<
/V ()
/T (d1_Sender_Name)
>> 
<<
/V ()
/T (d2_Sender_Name)
>> 
<<
/V ()
/T (d1_Sender_Street)
>> 
<<
/V ()
/T (d2_Sender_Street)
>> 
<<
/V ()
/T (d1_Sender_Postal_Index)
>> 
<<
/V ()
/T (d2_Sender_Postal_Index)
>> 
<<
/V ()
/T (d1_Sender_City)
>> 
<<
/V ()
/T (d2_Sender_City)
>>]
>>
>>
endobj 
trailer

<<
/Root 1 0 R
>>
%%EOF

Необходимо вставить в скобки после /V необходимые значения (может быть как число, так и текст)

Написал вот так:
Код:
$hTemplate = FileOpen (@ScriptDir & "\pdf_template.fdf")
$sTemplateString = FileRead ($hTemplate)
FileClose ($hTemplate)

;~ ConsoleWrite ($sTemplateString & @CRLF)

$sTemplateString = StringRegExpReplace ($sTemplateString, "(<<\n/V\s\(+)(.*)(\)\n/T\s\(d\d{1}_Sender_Name\)\n>>+)", "$1" & "Иванов" & "$3")

$sTemplateString = StringRegExpReplace ($sTemplateString, "(<<\n/V\s\(+)(.*)(\)\n/T\s\(d\d{1}_Sender_Street\)\n>>+)", "$1" & "ул. Есенина, дом 31" & "$3") ; тут съедает первую букву 'у'

$sTemplateString = StringRegExpReplace ($sTemplateString, "(<<\n/V\s\(+)(.*)(\)\n/T\s\(d\d{1}_Sender_Postal_Index\)\n>>+)", "$1" & "123456" & "$3") ; здесь съедает полностью все что в $1

$sTemplateString = StringRegExpReplace ($sTemplateString, "(<<\n/V\s\(+)(.*)(\)\n/T\s\(d\d{1}_Sender_City\)\n>>+)", "$1" & "Красноярск" & "$3")

ConsoleWrite ("========" & @CRLF)
ConsoleWrite ($sTemplateString & @CRLF)
exit


Прошу, поправьте регэксп
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
$sTemplate = @ScriptDir & "\pdf_template.fdf"
$sTemplateString = FileRead($sTemplate)

_Replace($sTemplateString, 'Name', 'Иванов')
_Replace($sTemplateString, 'Street', 'ул. Есенина, дом 31')
_Replace($sTemplateString, 'Postal_Index', '123456')
_Replace($sTemplateString, 'City', 'Красноярск')

ConsoleWrite("========" & @CRLF)
ConsoleWrite($sTemplateString & @CRLF)

Func _Replace(ByRef $sStr, $sSender, $sReplace)
	$sStr = StringRegExpReplace($sStr, '(<<\R/V\h\()(.*)(\)\R/T\h\(d\d_Sender_' & $sSender & '\)\R>>)', '${1}' & $sReplace & '$3')
EndFunc
 
Верх