Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » StringRegExpReplace — для чайников!

Ответить
Настройки темы
StringRegExpReplace — для чайников!

Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


Не мог бы ктонибудь простые понятные примеры показать.
Код: Выделить весь код
$s = StringRegExpReplace("ab12", "[:alpha:]","f")
MsgBox(0,"",$s)
У меня либо никакого результата, либо результат не предсказуемый. Совсем не понятно ничего.
Почему это альфа вдруг буквы не показывает? А паттерн {x} сам себя размножает.

И как создать тест с переносом строк внутри кода, array() чтоли?
Для удобства хочется всё в одном скрипте собрать,хотя можно и внешний тест шаблон подключить в крайнем случае.

То что в хелпе написанно, ну не понятно совершенно к сожалению. Особенно примеры утомляют напичканные
While, If, Then, тут итак мозги свернёшь, нужны примитивные примеры, а не сложные.

-------
Полезное сообщение


Отправлено: 21:51, 17-11-2010

 

Новый участник


Сообщения: 30
Благодарности: 4

Профиль | Отправить PM | Цитировать


Вы скажите, чего хотите добиться своим кодом. Пока вижу, что паттерн не подходит совершенно.
А строки с переносом спецсимволом \n кодируются, либо да, в массив.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:00, 17-11-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата semiono:
Почему это альфа вдруг буквы не показывает? А паттерн {x} сам себя размножает. »
Я этими классами вообще не пользуюсь, предпочитаю их аналоги (в виде [a-z] и т.п.).

Цитата semiono:
как создать тест с переносом строк внутри кода »
При замене? нужно добавлять @CRLF.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:18, 17-11-2010 | #3


Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


Тут написано
Цитата:
(?s) . matches anything including newline. (by default "." don't match newline)
хотел посмотреть как это работает.

Цитата Redisych:
либо да, в массив. »
Покажите пример?

Цитата Redisych:
Вы скажите, чего хотите добиться своим кодом »
Я хочу "пройти" все интересные с практической стороны паттерны, чтобы уметь пользоваться ими.

Вообще меня интересует поиск и замена строк, но хотя StringRegExpReplace это только и делает.

Redisych, загляните в этот пост, я хоть тему закрыл, но не решённым осталось
http://forum.oszone.net/post-1545134-29.html
там суть в том что надо найти одну строку, а изменить другую. Либо весь текст выстроить в строку
и править в StringRegExpReplace
Конкретно целевую строчку нельзя задавать в поиске, потомучто в файле таких строк
много, а уникальное имя получается что в строке выше.

Что-то мы отвлеклись... Давайте лучше примеры, хоть чтонибудь попроще? Или ссылку на примеры...
Ато я так никогда не научусь паттерновому мышлению.

$s = StringRegExpReplace("ab12", "[a-z]","1")
А так действительно работает! Зачем же тогда нужно [:alpha:], ну уже хоть что-то получилось!

-------
Полезное сообщение


Последний раз редактировалось semiono, 17-11-2010 в 22:37.


Отправлено: 22:19, 17-11-2010 | #4


Новый участник


Сообщения: 30
Благодарности: 4

Профиль | Отправить PM | Цитировать


У себя нашёл обратную функцию
Код: Выделить весь код
;Содержимое массива Длинная Строка в одну строку  
For $stroka = 1 To $strokVBloke

 MsgBox(0, $stroka &" cтрока такая:", $ArrayDlinStroka[$stroka] ) 
 
$Message = ($Message & $ArrayDlinStroka[$stroka])
Next
Сейчас поищу, как строки в массив засунуть.

Отправлено: 22:45, 17-11-2010 | #5


Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


А как можно файл построково читать, чтобы сравнивать строки с шаблоном?
Понятное дело надо найти @CRLF, только как ?

Я думаю можно организовать как цикл через
If <проверка строки с образцом> then <идти дальше или заменить>
что-то типо того.

-------
Полезное сообщение


Отправлено: 22:46, 17-11-2010 | #6


Новый участник


Сообщения: 30
Благодарности: 4

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
      If $strokVBloke > 1 Then; если строк больше одной
         ;Заносим в массив последнюю строку, с 1-го символа и до ограничения 
         $ArrayDlinStroka[$strokVBloke] = StringMid ($CurrentLine, 1, $ZnakKonecPost )
      EndIf
Код: Выделить весь код
      ;ПРИБАВЛЯЕМ ПО ОДНОЙ СТРОКЕ, ЗАПИСЫВАЯ В МАССИВ, ПОКА НЕ НАЙДЁМ КОНЕЦ
      While $NumCurrentLineFileInput <= $chisloStrokCurrentFile
         ;Смотрим, кончается ли строка конечным вхождением
         ; ИЩЕМ КОНЕЦ СООБЩЕНИЯ!
         ; Устанавливаем искомую строку 
         $entry = 'что-то там'
         ; регистр не важен, т.к 'что-то там' бывает маленькими
         ;Читаем строку № $NumCurrentLine из файла $fileIn
       $CurrentLine = FileReadLine ( $fileInput, $NumCurrentLineFileInput ) 
       ;Ищем вхождение  $entry с учётом регистра или без
       $entryFound = StringInStr ($CurrentLine, $entry , 0 , 1 )


            If $entryFound > 0 Then
               If $strokVBloke = 1 Then; если вхождение найдено в 1-й строке
                  ;Считаем конец
                  $StrokaKonecPost = $NumCurrentLineFileInput
                  $ZnakKonecPost = $entryFound - 20
                  ;Заносим в массив единственную строку
                  $ArrayDlinStroka[$strokVBloke] = StringMid ($CurrentLine, $ZnakNachaloPost, $ZnakKonecPost) 
               EndIf   
               ExitLoop ;выход из цикла, если вхождение найдено
            EndIf
            ;MsgBox (0, "Вхождение?", $entryFound)
            If $strokVBloke = 1 Then; если вхождение найдено в 1-й строке
               ;Заносим в массив первую строку (ограничение сначала)
               $ArrayDlinStroka[$strokVBloke] = StringMid ($CurrentLine, $ZnakNachaloPost) 
            Else 
               ;Заносим в массив строку без ограничения по длине
               $ArrayDlinStroka[$strokVBloke] = StringMid ($CurrentLine, 1 ) 
            EndIf   

         ;MsgBox (0, "Строка в массиве", $ArrayDlinStroka[$strokVBloke])

         ;увеличиваем счётчики 
         $strokVBloke = $strokVBloke + 1
         $NumCurrentLineFileInput = $NumCurrentLineFileInput + 1

      WEnd
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:49, 17-11-2010 | #7


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата semiono:
хотел посмотреть как это работает. »
Код: Выделить весь код
$sData = 'Some text' & @CRLF & 'The End'
$sRet = StringRegExpReplace($sData, '(?s)\w+ (.*) End', '\1')
ConsoleWrite($sRet & @LF)
Если убрать (?s), то поиск провалится, т.к под .* попадёт любой символ кроме перевода строки, а перед ним нет вхождения End.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:01, 17-11-2010 | #8


Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


а что значит заменить на '\1'


---
"Match any "word" character: a-z, A-Z, 0-9 or underscore (_)."
Проверка букв из слов
Что-то у них слишком много паттернов того что очевидно, но только наоборот сбивающих с толку.

Повторов тоже что-то много.
"Repeat the previous character, set or group 0 or more times."
а это буквально значит ноль или более раз
Причём ещё и эквивалентно другому паттерну ;-
ато нам одного этого не хватит )))

Интересно было бы русскую справку почитать, пойду поищу.


Моя идея с поиском конца строки, тоже не клеится, так как мне никто не будет возвращать
ни строку перед @CRLF ни её длину. Функции какие-то ограниченные. Подходящего ничего не вижу.

Впрочем, FileReadLine меня заинтересовала, надо потестировать это...
Ух! Она читает по строкам! Спасибо, Redisych за подсказку!

-------
Полезное сообщение


Последний раз редактировалось semiono, 17-11-2010 в 23:59.


Отправлено: 23:30, 17-11-2010 | #9


Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


А как можно StringRegExp() часть строки протестировать? Сравнить с шаблоном.
[пробелы в начале] [нужная часть строки] [не нужная часть строки]
Пробелы вначале можно убрать так (?m) или точкой . Далее не знаю...
Строка содержит < скобки > слеш / "двойные кавычки" равно = и буквы... ASCII вобщем, поправте если ошибаюсь?

-------
Полезное сообщение


Отправлено: 00:19, 18-11-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » StringRegExpReplace — для чайников!

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
xampp для чайников binders Вебмастеру 1 23-04-2014 19:05
Разгон видеокарты NVidia для чайников Dabaduch Разгон, охлаждение и моддинг 33 28-01-2013 16:38
Система - Программа для работы с разделами "для чайников" Alla65 Программное обеспечение Windows 1 20-04-2009 17:58
Тихая установка для чайников MedVetoff Автоматическая установка приложений 5 16-10-2008 22:04
Инструкции для чайников Tanya Хочу все знать 22 25-02-2004 00:42




 
Переход