1

Тема: AHK: Send до знака

У меня есть функция Send которая выводит текст книги из txt файла.
Как сделать чтобы она выводила текст только до точки ?

2

Re: AHK: Send до знака

У меня получилось так:

1::
Text = Серый форум.Разработка скриптов
RegExMatch(Text, "(.*[.])", Result)
StringTrimRight, Result1, Result1, 1
SendInput, % Result1
Как сказал мой дед - Я твой дед

3

Re: AHK: Send до знака

sergeiplugatyr пишет:

У меня получилось так

Плохо получилось, читайте хелп по RegEx.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4

Re: AHK: Send до знака

teadrinker пишет:
sergeiplugatyr пишет:

У меня получилось так

Плохо получилось, читайте хелп по RegEx.

Читал, другого варианта у меня не получается.

Как сказал мой дед - Я твой дед

5

Re: AHK: Send до знака

sergeiplugatyr пишет:

Читал

Не верю. Например, зачем там квадратные скобки? Они обычно используются для объединения списка символов, когда может использоваться любой из них. А тут в них всего один. Понятно, что схватили первое, что под руку попалось.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Send до знака

Раскусили вы меня, я читал но много не понял.

Как сказал мой дед - Я твой дед

7

Re: AHK: Send до знака

Смотрите, ваш вариант не работает:

Text = Серый форум.Разработка скриптов.
RegExMatch(Text, "(.*[.])", Result)
StringTrimRight, Result1, Result1, 1
MsgBox, % Result1

Правильно:

Text = Серый форум.Разработка скриптов.
RegExMatch(Text, "(.*?)\.", Result)
MsgBox, % Result1
; или
MsgBox, % RegExReplace(Text, "s)(.*?)\..*", "$1")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: Send до знака

Почитав, немного "укоротил" код:

1::
Text = Серый форум.Разработка скриптов
RegExMatch(Text, "(.*)\.", Result)
SendInput, % Result1
Как сказал мой дед - Я твой дед

9

Re: AHK: Send до знака

Так тоже не сработает, если

Text = Серый форум.Разработка скриптов.
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: Send до знака

Действительно, значок "?" знает свое дело .

Как сказал мой дед - Я твой дед

11 (изменено: serzh82saratov, 2014-01-31 22:37:37)

Re: AHK: Send до знака

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


Text = Серый форум.Разработка скриптов.
MsgBox % SubStr(Text, 1, InStr(Text, ".")-1)
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

12

Re: AHK: Send до знака

Не знаю, в твоём варианте используются 2 функции вместо одной.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

13 (изменено: serzh82saratov, 2014-01-31 23:10:54)

Re: AHK: Send до знака

Справка пишет:

To search for a simple substring inside a larger string, use InStr() because it is faster than RegExMatch().

Ну так эти функции намного проще, в сравнении с RegEx.?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

14

Re: AHK: Send до знака

Насчёт скорости — тут экспериментировать нужно, что будет быстрее. Для начинающих, конечно, проще твой вариант, для меня без разницы.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15

Re: AHK: Send до знака

У меня получилось в 6 раз быстрее:

Text = Серый форум.Разработка скриптов.
Start := A_TickCount
Loop 1000000
    SubStr(Text, 1, InStr(Text, ".")-1) 
MsgBox % A_TickCount - Start
Text = Серый форум.Разработка скриптов.
Start := A_TickCount
Loop 1000000
    RegExReplace(Text, "s)(.*?)\..*", "$1")
MsgBox % A_TickCount - Start
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

16

Re: AHK: Send до знака

И в 3 раза быстрее RegExMatch:


Text = Серый форум.Разработка скриптов.
Start := A_TickCount
Loop 1000000
    RegExMatch(Text, "(.*?)\.", Result)
MsgBox % A_TickCount - Start
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

17

Re: AHK: Send до знака

В реальной ситуации точка будет недалеко от начала текста, и разница не станет принципиальной.

Text = Серый форум Разработка скриптов.
Loop 100000
   BigText .= "Серый форум Разработка скриптов."
MsgBox Текст готов.
RegExMatch(BigText, "(.*?)\.", Result)
MsgBox % Result1
MsgBox % RegExReplace(BigText, "s)(.*?)\..*", "$1")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

18

Re: AHK: Send до знака

Да, так и есть. И даже если нужно последнее предложение, разница на глаз небудет заметна:

 
Loop 100000
   BigText .= "Серый форум.Разработка скриптов"
MsgBox Текст готов.
RegExMatch(BigText, ".*\.(.*)", Result)
MsgBox % Result1
MsgBox % SubStr(BigText, InStr(BigText, ".",,0)+1) 

Но думаю что пригодится это учитывать в программах с большими циклами.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

19

Re: AHK: Send до знака

Согласен.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder