1 (изменено: Clannad5, 2021-05-11 21:29:46)

Тема: AHK: не понимаю как работать с RegExReplace в Ahk

Есть файл Text.txt:


Всем привет! 

Я Олег

Я помыл своего кота.

Есть команда в Ahk:


FileRead, out, Text.txt
out := RegExReplace(out, "\s+$", "")

Результат следующий:


Всем привет! 

Я Олег

Я помыл своего кота.

То есть, результат не изменился.
Пробую тоже самое на https://regex101.com/
Вот что выходит: https://regex101.com/r/708VHz/1

Вопрос: Это с AHK что-то не так или я делаю что-то не так?

Цель: Удалить пустые строки, которые могут включать как пробелы так и табуляции.

2 (изменено: __Михаил__, 2021-05-11 22:43:07)

Re: AHK: не понимаю как работать с RegExReplace в Ahk

Вроде как нужно использовать 'm) ' для мульти-строчного текста.
Примерный шаблон (не работает как нужно):

File := "Text.txt"	; Файл для чтения строк.

IfNotExist, % File	; Проверить его существование, если нет - создать и записать строки:
{
 Text=
 (

Всем привет! 

Я Олег

Я помыл своего кота.
 )
 FileAppend,% Text, % File
}

FileRead, out, Text.txt		; Прочитать файл.
Return

F2::
out := RegExReplace(out, "m) \s+", ".")
MsgBox, % out
Return
Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

3 (изменено: Clannad5, 2021-05-11 22:47:41)

Re: AHK: не понимаю как работать с RegExReplace в Ahk

__Михаил__

Понял. Спасибо
Это мне и правда помогло.

RegExReplace(out, "m) \R(\R)*+", "`n")

4 (изменено: __Михаил__, 2021-05-11 23:08:10)

Re: AHK: не понимаю как работать с RegExReplace в Ahk

Удалось таким способом:

Out := RegExReplace(out, "m)^\s+", "")

Т.е. пробел после опции 'm)' не нужен.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

5

Re: AHK: не понимаю как работать с RegExReplace в Ahk

Мне не помогло.

out =
(

Всем привет! 

Я Олег

Я помыл своего кота.

)
MsgBox, % "|" RegExReplace(out, "m) \R(\R)*+", "`n") "|"
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: не понимаю как работать с RegExReplace в Ahk

__Михаил__

out =
(

Всем привет! 

Я Олег

Я помыл своего кота.

)
MsgBox, % "|" RegExReplace(out, "m)^\s+", "") "|"
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7 (изменено: __Михаил__, 2021-05-11 23:34:39)

Re: AHK: не понимаю как работать с RegExReplace в Ahk

Очень интересно почему так вышло.
Up: Ну так чтение из файла иную кодировку имеет и пустые строки удаляет.

File := "Text.txt"	; Файл для чтения строк.

IfNotExist, % File	; Проверить его существование, если нет - создать и записать строки:
{
 Text=
 (

Всем привет! 

Я Олег

Я помыл своего кота.
 )
 FileAppend,% Text, % File
}


FileRead, Out, Text.txt		; Прочитать файл.
Return


F2::
MsgBox, 0, Исходный текст:, % Out
Out2 := RegExReplace(Out, "m)^\s+")
MsgBox, 0, Обработанный текст:, % Out2
Return
Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

8

Re: AHK: не понимаю как работать с RegExReplace в Ahk

На самом деле не совсем:

File := "Text.txt"
Text=
(

Всем привет! 

   Я Олег

Я помыл своего кота.

)
FileDelete, % File
FileAppend, % Text, % File

FileRead, Out, Text.txt
MsgBox, 0, Исходный текст:, % Out
Out2 := RegExReplace(Out, "m)^\s+")
MsgBox, 0, Обработанный текст:, % "|" Out2 "|"
Return

Как видно, удалились пробелы из второй непустой строки, что не входило в задачу, и последний лишний перенос строки остался.
А вот так вообще не будет удалять:

text =
(

Всем привет! 

Я Олег

Я помыл своего кота.

)
FileOpen("text.txt", "w").Write(text)
FileRead, textFromFile, text.txt
MsgBox, % "|" RegExReplace(textFromFile, "m)^\s+") "|"

Всё зависит, какой вариант переноса строк используется, `r`n или `n.
Для обоих вариантов есть опция `a:

text =
(

Всем привет! 

Я Олег

Я помыл своего кота.

)
FileOpen("text.txt", "w").Write(text)
FileRead, textFromFile, text.txt
MsgBox, % "|" RegExReplace(textFromFile, "`am)^\s+") "|"

Но так последний перенос строки тоже не удалился.
Тут всё немного хитрее.

text =
(

Всем привет! 

   Я Олег

Я помыл своего кота.

)
MsgBox, % "|" . RegExReplace(text, "^(\h*(\R|$))+|\R\h*(?=\R|$)") . "|"
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder