Что нового

Функция срабатывает ровно через раз!

Suppir

Продвинутый
Сообщения
967
Репутация
62
Не первый раз уже с таким сталкиваюсь. Есть некая функция, которая преобразовывает строку:


Код:
Func SimplifyKeys($Key)
	$Key = StringRegExpReplace($Key, "[  ]+", " ")
	$Key = StringStripWS ($Key, 2)
	$Key = StringStripWS ($Key, 4)
	$Key = StringRegExpReplace($Key, "№", "N")
	$Key = StringRegExpReplace($Key, "от\s*(\d)", "\1")
	$Key = StringRegExpReplace($Key, "\s+января\s+", ".01.",1)
	$Key = StringRegExpReplace($Key, "\s+февраля\s+", ".02.", 1)
	$Key = StringRegExpReplace($Key, "\s+марта\s+", ".03.", 1)
	$Key = StringRegExpReplace($Key, "\s+апреля\s+", ".04.", 1)
	$Key = StringRegExpReplace($Key, "\s+мая\s+", ".05.", 1)
	$Key = StringRegExpReplace($Key, "\s+июня\s+", ".06.", 1)
	$Key = StringRegExpReplace($Key, "\s+июля\s+", ".07.", 1)
	$Key = StringRegExpReplace($Key, "\s+августа\s+", ".08.", 1)
	$Key = StringRegExpReplace($Key, "\s+сентября\s+", ".09.", 1)
	$Key = StringRegExpReplace($Key, "\s+октября\s+", ".10.", 1)
	$Key = StringRegExpReplace($Key, "\s+ноября\s+", ".11.", 1)
	$Key = StringRegExpReplace($Key, "\s+декабря\s+", ".12.", 1)
	$Key = StringRegExpReplace($Key, "(\d{4})\s*[года\. ]*", "\1 ", 1)
	$Key = StringRegExpReplace($Key, "^([1-9])\.", "0\1\.", 1)
	$Key = StringRegExpReplace($Key, "\s*"".+", "", 1)
	$Key = StringStripWS ($Key, 8)
	$Key = StringRegExpReplace($Key, "N", " N ", 1)
	Return $Key
EndFunc


я вызываю эту функцию:

Код:
Local $Result = SimplifyKeys($Key)


Однако эта функция срабатывает ровно через раз: сработала, не сработала, сработала, не сработала и т.д. Как думаете, с чем это может быть связано?
 

Heler

Знающий
Сообщения
70
Репутация
11
Suppir, на вход функции передаете одни и те же данные?
 

art279

Новичок
Сообщения
20
Репутация
3
Я не увидел у Вас в коде функции дебага, поэтому предложу Вам её дописать
Код:
opt("TrayIconDebug", 1)


Запустите скрипт, посмотрите на каком моменте стопорится

Плюс покажите полный код того где Вы её применяете, а то как то не видно всей картины происходящего.... :smile:
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
art279

попробовал эту опцию - имхо, не слишком удобная, потому что для получения информации необходимо наводить мышку на трей. Если скрипт завязан на хоткеях и операциях с мышкой, то невозможно одновременно выполнять действия и наводить мышку в трей. Наверное, было бы гораздо удобней, если бы создавался дополнительный процесс в трее, который в реальном времени бы показывал (с помощью TrayTip) строку в исходном скрипте, которая выполняется в данный момент.


Добавлено:
Сообщение автоматически объединено:

Heler
попробую еще раз проверить, спасибо.
 

FlatX007

Tattoo!
Сообщения
197
Репутация
35
Люди склонны сами создавать себе проблемы ...

Код:
Func SimplifyKeys($Key)
	ConsoleWrite('Вызо функции с параметрами : '& $Key & @CRLF)
    $Key = StringRegExpReplace($Key, "[  ]+", " ")
	ConsoleWrite('Строка 1' & @CRLF)
    $Key = StringStripWS ($Key, 2)
	ConsoleWrite('Строка 2' & @CRLF)
    $Key = StringStripWS ($Key, 4)
	ConsoleWrite('Строка 3' & @CRLF)
    $Key = StringRegExpReplace($Key, "№", "N")
	ConsoleWrite('Строка 4' & @CRLF)
    $Key = StringRegExpReplace($Key, "от\s*(\d)", "\1")
	ConsoleWrite('Строка 5' & @CRLF)
 

art279

Новичок
Сообщения
20
Репутация
3
FlatX007

А где например можно применить подобную функцию?
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Спасибо! Выяснил, что дело не в функции - просто через раз на нее подавались пустые значения.



Добавлено:
Сообщение автоматически объединено:

Причина была в следующем (может быть кому-то пригодится):

Я выделяю текст в некой программе и нажимаю хоткей. При этом AutoIt шлет CTRL+c программе. Выделенный текст берется в буфер, а затем обрабатывается сабжевой функцией. Обязательно после посылание CTRL+c необходимо делать sleep(50) для того, чтобы текст успел записаться в буфер обмена.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,665
Репутация
2,463
Suppir [?]
Обязательно после посылание CTRL+c необходимо делать sleep(50) для того, чтобы текст успел записаться в буфер обмена.

Я для получения выделенного текста использую такую функцию:

Код:
Func _GetSelectedText($iSleep=100)
	Local $iRet = 0
	Local $sOld_Clipboard_Data = ClipGet()
	
	ClipPut("")
	Send("^{Insert}")
	
	Local $sSelected_Data = ClipGet()
	Local $iTimer = TimerInit()
	
	While $sSelected_Data = "" And TimerDiff($iTimer) < $iSleep
		$sSelected_Data = ClipGet()
		Sleep(1)
	WEnd
	
	If $sSelected_Data <> "" Then $iRet = $sSelected_Data
	ClipPut($sOld_Clipboard_Data)
	
	Return $iRet
EndFunc


P.S
И что делает функция в первом сообщений?
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
CreatoR [?]
И что делает функция в первом сообщений?

функция преобразовывает даты и номера документов в единообразный формат. Например,
от 1 сентября 2010года N1
1 сентября 2010г. N 1
от 1 сентября 2010 г N 1
01 сентября 2010 г N 1
01.09.2010 г N 1
1.9.2010 года N 1

преобразует в
01.09.2010 N 1


Добавлено:
Сообщение автоматически объединено:

Спасибо за функцию, попробую ее завтра :smile:
 
Верх