Kiev78
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Написал такой кусочек скрипта: ---------------------------------------------------------------------- Код: WinWait("TEST.TXT - Блокнот", "") $isNC = ControlCommand("TEST.TXT - Блокнот", "", "Edit1", "GetLine", 1) If StringRegExp($isNC, "%", 0) = 0 Then ContinueLoop If $isNC = "N0%" Then If StringRegExp(ControlGetText ("TEST.TXT - Блокнот", "", "Edit1"), "!A=0;", 0) Then $correct = ControlGetText ("TEST.TXT - Блокнот", "", "Edit1") $correct = StringRegExpReplace ($correct, "(N\d{1,5}[XYZ])0.(\r\n)", "\1<A>\2") ControlSetText("TEST.TXT - Блокнот", "", "Edit1", $correct, 0) EndIf Else If StringRegExp (ControlGetText ("TEST.TXT - Блокнот", "", "Edit1"), "#1=", 0) Then $correct = ControlGetText ("TEST.TXT - Блокнот", "", "Edit1") $correct = StringRegExpReplace ($correct, "(N\d{1,5} [XYZ])0.(\r\n)", "\1#1\2") ControlSetText ("TEST.TXT - Блокнот", "", "Edit1", $correct, 0) EndIf EndIf | ---------------------------------------------------------------------- Работает замечательно Возникла необходимость его чуть усовершенствовать с целью более корректной работы (есть там ньюансы): ---------------------------------------------------------------------- Код: WinWait("TEST.TXT - Блокнот", "") $isNC = ControlCommand("TEST.TXT - Блокнот", "", "Edit1", "GetLine", 1) If StringRegExp($isNC, "%", 0) = 0 Then ContinueLoop If $isNC = "N0%" Then If StringRegExp(ControlGetText("TEST.TXT - Блокнот", "", "Edit1"), "!A=0;", 0) Then $correct = ControlGetText("TEST.TXT - Блокнот", "", "Edit1") $array = StringRegExp($correct, "N\d{1,5} [XYZ]{1}0.$", 0) MsgBox(0, @error, $array) EndIf Else If StringRegExp(ControlGetText("TEST.TXT - Блокнот", "", "Edit1"), "#1=", 0) Then $correct = ControlGetText("TEST.TXT - Блокнот", "", "Edit1") $array = StringRegExp($correct, "N\d{1,5} [XYZ]{1}0.$", 0) MsgBox(0, @error, $array) EndIf EndIf | ---------------------------------------------------------------------- Оказывается, то, что StringRegExpReplace с лёгкостью находит и заменяет, StringRegExp абсолютно не видит (при тех же образце текста и шаблоне поиска). Как я ни пытался, StringRegExp никак не может найти совпадения, хотя для StringRegExpReplace это не проблема (см. первоначальный вариант). Это глюк младшей версии, или как это понимать? Ведь синтаксис регулярных выражений для них одинаков (то есть то, что находит одна из них, должна находить и вторая и наоборот). Или я не прав? Прикладываю образец текста (из файла TEST.TXT), в котором я выполняю поиск и замену (хотя здесь это не принципиально): Цитата: % D20 N2 S2500 M3 N4 G0 G17 G40 G49 G90 G54 N6 #1=0 #2=-0.1 N07 #1=(#1-0.1) IF (#1<=#2) #1=#2 N8 G0 X22. Y0. Z8. N10 Z0. N12 G1 X33. F50. N14 G0 Z8. N16 X0. N18 Z0. N20 G1 X11. N22 G0 Z8. N24 IF (#1<>#2) N07 N26 G0 Z100 M30 % | Здесь я заменяю все Z0. (стоящие отдельной строкой) на Z#1 (при этом X0. должна остаться нетронутой). Вариант с тупой заменой Z0. на Z#1 (без использования регэкспов) не катит, так как образец может выглядеть и так: Цитата: % D20. N2 S2500 M3 N4 G0 G17 G40 G49 G90 G54 N6 #1=0 #2=-0.1 N07 #1=(#1-0.1) IF (#1<=#2) #1=#2 N8 G0 X22. Y-8. Z0. N10 Y0. N12 G1 X33. F50. N14 G0 Y-8. N16 X0. N18 Y0. N20 G1 X11. N22 G0 Y-8. N24 IF (#1<>#2) N07 N26 G0 Z100 M30 % | В данном случае необходимо заменять Y0. на Y#1 (опять же не трогая X0.), также возможен ещё один вариант Цитата: % D20. N2 S2500 M3 N4 G0 G17 G40 G49 G90 G54 N6 #1=0 #2=-0.1 N07 #1=(#1-0.1) IF (#1<=#2) #1=#2 N8 G0 X8. Y22. Z0. N10 X0. N12 G1 Y33. F50. N14 G0 X8. N16 Y0. N18 X0. N20 G1 Y11. N22 G0 X8. N24 IF (#1<>#2) N07 N26 G0 Z100 M30 % | В данном случае необходимо заменять X0. на X#1 (на этот раз не трогая Y0.). ---------------------------------------------------------------------------------------- МНЕ НЕ НУЖНО ПИСАТЬ ГОТОВЫЙ СКРИПТ (я это сделаю сам), объясните только, почему StringRegExp не находит совпадений (MsgBox выводит 0)? | Всего записей: 244 | Зарегистр. 17-06-2006 | Отправлено: 18:56 18-09-2009 | Исправлено: Kiev78, 19:10 18-09-2009 |
|