1 (изменено: akman, 2014-02-09 00:30:37)

Тема: AHK: поиск и замена текста в определенных рамках

Приветствую всех! Есть проблема с написанием скрипта.
Суть:
Нужно заменить символ находящийся возможно в нескольких строках от найденного.
допустим есть текст


<m>
  <l>ru</l> 
  <ms>ключевое слово1</ms>
    <t>первая группа текст1</t>
    <t>первая группа текст2</t>
 </m>

 <m>
  <l>ru</l> 
  <ms>ключевое слово2</ms>
    <rs>вторая группа некоторый текст</rs>
    <t>вторая группа текст 1</t>
    <t>вторая группа текст 2</t>
 </m>

мне нужно заменить символ </m> в группе в которой найдено ключевое слово, если это "ключевое слово 1" то в первой группе, если 2 то второй и так далее. Ключевое слово получаю из клипборда.

Вот такой код работает, но заменяет только самую первую </m>


FileRead, FileContents, d:\file.xml

If FileContents Contains <ms>%clipboard%</ms>
{
SearchText = </m>
ReplaceText = <t>%word_replace%</t>`n</m>
StringReplace, OutputVar, FileContents, %SearchText%, %ReplaceText%
FileDelete, d:\file.xml
FileAppend, %OutputVar%, d:\file.xml

Знаю что нужно копать в сторону регулярных выражений, но все что не пробовал не получается:((

2 (изменено: akman, 2014-02-09 23:59:03)

Re: AHK: поиск и замена текста в определенных рамках

Спасибо. Разобрался сам.

Для написания подключил еще StringReplace и RegExReplace

С помощью RegExReplace и присвоенной переменной для ключевого слова из клипборда (Var) нашел нужную мне группу,
потом присвоив переменную для замены (Var2) и выполнив StringReplace заменил </m> на нужное значение.
Чтобы записать все в исходный файл тоже использовал StringReplace, где новая группа заменяла старую.
Вот код:


If FileContents Contains <ms>%clipboard%</ms>
{
Fileread, Znach, d:\file.xml
Var = %clipboard%
Kluchtable:= RegExReplace(Znach, "sm`aU).*(^[^\n\r]*<ms>" Var "</ms>*\R.*</m>)\R.*?", "$1")
Var2 = <t>%word_replace%</t>`n</m>
StringReplace, Kluchtable_new, Kluchtable, </m>, %Var2%, All
msgbox, %Kluchtable_new%
StringReplace, OutputVar, Znach, %Kluchtable%, %Kluchtable_new%, All
FileDelete, d:\file.xml
FileAppend, %OutputVar%, d:\file.xml