Тема: AHK: Send до знака
У меня есть функция Send которая выводит текст книги из txt файла.
Как сделать чтобы она выводила текст только до точки ?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
У меня есть функция Send которая выводит текст книги из txt файла.
Как сделать чтобы она выводила текст только до точки ?
У меня получилось так:
1::
Text = Серый форум.Разработка скриптов
RegExMatch(Text, "(.*[.])", Result)
StringTrimRight, Result1, Result1, 1
SendInput, % Result1У меня получилось так
Плохо получилось, читайте хелп по RegEx.
sergeiplugatyr пишет:У меня получилось так
Плохо получилось, читайте хелп по RegEx.
Читал, другого варианта у меня не получается.
Читал
Не верю. Например, зачем там квадратные скобки? Они обычно используются для объединения списка символов, когда может использоваться любой из них. А тут в них всего один. Понятно, что схватили первое, что под руку попалось. ![]()
Раскусили вы меня, я читал но много не понял.
Смотрите, ваш вариант не работает:
Text = Серый форум.Разработка скриптов.
RegExMatch(Text, "(.*[.])", Result)
StringTrimRight, Result1, Result1, 1
MsgBox, % Result1Правильно:
Text = Серый форум.Разработка скриптов.
RegExMatch(Text, "(.*?)\.", Result)
MsgBox, % Result1
; или
MsgBox, % RegExReplace(Text, "s)(.*?)\..*", "$1")Почитав, немного "укоротил" код:
1::
Text = Серый форум.Разработка скриптов
RegExMatch(Text, "(.*)\.", Result)
SendInput, % Result1Так тоже не сработает, если
Text = Серый форум.Разработка скриптов.Действительно, значок "?" знает свое дело
.
Для такого случая мучать RegEx избыточно, только если в целях ознакомления на простой задаче.
Text = Серый форум.Разработка скриптов.
MsgBox % SubStr(Text, 1, InStr(Text, ".")-1)
Не знаю, в твоём варианте используются 2 функции вместо одной.
To search for a simple substring inside a larger string, use InStr() because it is faster than RegExMatch().
Ну так эти функции намного проще, в сравнении с RegEx.?
Насчёт скорости — тут экспериментировать нужно, что будет быстрее. Для начинающих, конечно, проще твой вариант, для меня без разницы.
У меня получилось в 6 раз быстрее:
Text = Серый форум.Разработка скриптов.
Start := A_TickCount
Loop 1000000
SubStr(Text, 1, InStr(Text, ".")-1)
MsgBox % A_TickCount - StartText = Серый форум.Разработка скриптов.
Start := A_TickCount
Loop 1000000
RegExReplace(Text, "s)(.*?)\..*", "$1")
MsgBox % A_TickCount - StartИ в 3 раза быстрее RegExMatch:
Text = Серый форум.Разработка скриптов.
Start := A_TickCount
Loop 1000000
RegExMatch(Text, "(.*?)\.", Result)
MsgBox % A_TickCount - Start
В реальной ситуации точка будет недалеко от начала текста, и разница не станет принципиальной.
Text = Серый форум Разработка скриптов.
Loop 100000
BigText .= "Серый форум Разработка скриптов."
MsgBox Текст готов.
RegExMatch(BigText, "(.*?)\.", Result)
MsgBox % Result1
MsgBox % RegExReplace(BigText, "s)(.*?)\..*", "$1")Да, так и есть. И даже если нужно последнее предложение, разница на глаз небудет заметна:
Loop 100000
BigText .= "Серый форум.Разработка скриптов"
MsgBox Текст готов.
RegExMatch(BigText, ".*\.(.*)", Result)
MsgBox % Result1
MsgBox % SubStr(BigText, InStr(BigText, ".",,0)+1)
Но думаю что пригодится это учитывать в программах с большими циклами.
Согласен.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться