|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.2] AutoIt скрипты |
|
[Архив - Часть 1.2] AutoIt скрипты
|
Ветеран Сообщения: 565 |
Профиль | Сайт | Отправить PM | Цитировать
Внимание! Тема переведена в архивное состояние (настоятельно рекомендуется к прочтению/поиску) Руководство к действию по работе c AutoIt. |
|
------- Отправлено: 10:47, 10-02-2006 |
Пользователь Сообщения: 125
|
Профиль | Отправить PM | Цитировать Creat0R
И для обычного файла решение предоставляли заранее. Это решение я взял из справки по Dos и прикрутил к AutoIt: Ксати, ini-файл ничем не отличается от обычного файла, и в нем можно искать текст таким же способом. Sanja Alone, привет! Ты быстрее набираешь тексты! А я - короче! |
Отправлено: 13:35, 15-08-2006 | #281 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать bogomolv
Строго говоря, оба варианта находят не слова, а заданные последовательности символов. Например, при поиске слова "кот" мы найдем и "котлету", и "антрекот" и много еще чего... В AutoIt явно не хватает поддержки регулярных выражений, в качестве альтернативы можно использовать FINDSTR. Например, следующий скрипт ищет все вхождения слова BASIC: Ложка дегтя - судя по всему FINDSTR распознает только слова из английских букв, остальные для него лишь набор символов. |
Отправлено: 18:54, 15-08-2006 | #282 |
Ветеран Сообщения: 1073
|
Профиль | Отправить PM | Цитировать Цитата:
|
|
------- Отправлено: 19:33, 15-08-2006 | #283 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Sanja Alone, amel27, XXXler:
Во-первых, большое спасибо за помощь. Пример который привёл Sanja Alone, выводит ошибку (в MsgBox), также пример от bogomolv, выводит ошибку о том, что не возможно найти файл (хотя он наместе)... Но не в этом суть, я в результате использовал пример от Sanja Alone, но немного модифицировал его, т.к этот пример не искал кириллицу (для этого добавил перекодировку строк)... но есть другая проблема - если я пытаюсь указать строчку для поиска, не прямым способом, а через переменную ($Text), то поиск не осуществляется, и постоянно возвращается $Var = @error : ;Файл в котором будет произведён поиск $InputFile = @ScriptDir& "\MyFile.txt" ;Текст для поиска $Text = IniRead(@ScriptDir& "\Test.ini", "Section", "Parametr", "") ;Использование функции для перекодировки строчек в UTF $TxtToFindUTF = StringToUTF($Text) $var = _FindTextInFile($InputFile,$TxtToFindUTF) ;Проверка на существование искомого текста, и если существует, то выводим сообщение об этом If $var <> @error Then MsgBox(64,"","Текст <" & $Text & "> Был найден в файле <" & $InputFile & ">, и находится в линии под номером <" & $var[0] & ">") ;Если не существует, то выводим сообщение об ошибке Else MsgBox(48,"","Текст <" & $Text & "> Не Был найден в файле <" & $InputFile & ">" & @CRLF & "Или файл <" & $InputFile & "> не найден") EndIf Exit ;Начало функции для поиска текста Func _FindTextInFile($ifile,$text) Local $i Dim $ret[2] $file = FileOpen($ifile,0) $a = StringSplit( FileRead($file, FileGetSize($ifile)), @LF) FileClose($file) If StringIsASCII($text) Then For $i = 1 To UBound($a,1)-1 If StringInStr($a[$i],$text) Then $ret[0]=$i $ret[1]=$a[$i] Return $ret EndIf Next Else For $i = 1 To UBound($a,1)-1 If StringInStr(StringLower($a[$i]),StringLower($text)) Then $ret[0]=$i $ret[1]=$a[$i] Return $ret EndIf Next EndIf EndFunc ;--> Конец функции для поиска текста (_FindTextInFile) ;Начало функции для перекодировки строк в UTF Func StringToUTF($String) Dim $sResult = "" $VarUTFArr = StringSplit($String, "") For $i = 1 To $VarUTFArr[0] $code = Asc($VarUTFArr[$i]) Select Case $code >= 192 And $code <= 239 $VarUTFArr[$i] = Chr(208) & Chr($code - 48) Case $code >= 240 And $code <= 255 $VarUTFArr[$i] = Chr(209) & Chr($code - 112) Case $code = 168 $VarUTFArr[$i] = Chr(208) & Chr(129) Case $code = 184 $VarUTFArr[$i] = Chr(209) & Chr(145) Case Else $VarUTFArr[$i] = Chr($code) EndSelect $sResult = $sResult & $VarUTFArr[$i] Next Return $sResult EndFunc ;==> Конец функции для перекодировки строк в UTF (StringToUTF) Если в файле Test.ini, в секции [Section], у параметра Parametr, будет значение предназначенное для того самого поиска (т.е само искомое слово), то запустив этот скрипт, в любом случае $Var будет ровнятся @error, т.е текст указанный в ини файле, искаться не будет, а именно так мне нужно осуществить поиск. И ещё раз спасибо, буду благодарен если сможете и в этом помочь. |
------- Отправлено: 22:04, 15-08-2006 | #284 |
Пользователь Сообщения: 125
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
Например: И не забудь прописать в начале скрипта |
|
Отправлено: 22:17, 15-08-2006 | #285 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать bogomolv
Вот так выглядит у меня состав скрипта: Opt("ExpandVarStrings", 1) If RunWait('@ComSpec@ /C find "word" < C:\Test.txt','',0)=0 Then MsgBox(64,"","Текст Был найден") EndIf Вот как можно заставить такой вариант сработать, но это тоже только для латиницы: Можно конечно и легче написать этот код, но не в этом суть. |
------- Отправлено: 00:16, 16-08-2006 | #286 |
Новый участник Сообщения: 20
|
Профиль | Отправить PM | Цитировать Дополнил код по сетевым интерфейсам.
Не могу понять почему не получается обновить информацию по состоянию интерфейса после включения / выключения. Мож кто подскажит. #include <GUIConstants.au3> #include <GuiCombo.au3> #NoTrayIcon Dim $i=1 Dim $NetArr[$i+1][6] $objShare = ObjCreate("HNetCfg.HNetShare.1") $shellApp = ObjCreate("Shell.Application") ; GUI ------------------------------------------------------ $Form1 = GUICreate("Сетевые подключения", 350, 198) GuiSetIcon("netshell.dll", 100) $Combo1 = GUICtrlCreateCombo("Подключения", 16, 16, 320, 21) $Button1 = GUICtrlCreateButton("Вкл / Выкл", 100, 145, 150, 35) $Label1 = GUICtrlCreateLabel("Выберите подключение", 16, 48, 320, 81, $BS_PUSHLIKE) Data($NetArr, $objShare) For $n = 1 To $NetArr[0][0] GUICtrlSetData($Combo1,$NetArr[$n][1]) Next GUISetState(@SW_SHOW) While 1 $msg = GuiGetMsg() Select Case $msg = $GUI_EVENT_CLOSE ExitLoop Case $msg = $Combo1 $n = _GUICtrlComboGetCurSel($Combo1) If $n > 0 Then Output($n) Else GUICtrlSetData($Label1, "Выберите подключение") EndIf Case $msg = $Button1 $oNetConnections = $shellApp.Namespace(0x00000031) For $folderitem in $oNetConnections.items For $verb in $folderitem.verbs if $folderitem.name = $NetArr[$n][1] Then $verb.DoIt Sleep(1000) ExitLoop 2 EndIf Next Next If $folderitem.name <> $NetArr[$n][1] Then msgbox(48, "Ошибка", "Имя соединения указанно не правильно") GUICtrlSetData($Label1,"Ждите") Output($n) EndSelect WEnd Exit ; Func ------------------------------------------------------- Func Data(ByRef $NetArr, $objShare) If $objShare = 0 Then MsgBox(48, "Внимание", "Сетевых подключений не найдено", 5) Exit EndIf $objEveryColl = $objShare.EnumEveryConnection If $objEveryColl <> 0 Then For $objNetConn In $objEveryColl $objShareCfg = $objShare.INetSharingConfigurationForINetConnection($objNetConn) If $objShareCfg <> 0 Then $objNCProps = $objShare.NetConnectionProps($objNetConn) If $objNCProps <> 0 Then ReDim $NetArr[$i+1][6] Select Case $objNCProps.Status = 0 $Status = "The connection is disconnected." Case $objNCProps.Status = 1 $Status = "The connection is in the process of connecting." Case $objNCProps.Status = 2 $Status = "The connection is in a connected state." Case $objNCProps.Status = 3 $Status = "The connection is in the process of disconnecting." Case $objNCProps.Status = 4 $Status = "The hardware for the connection, for example network interface card (NIC), is not present." Case $objNCProps.Status = 5 $Status = "The hardware for the connection is present, but is not enabled." Case $objNCProps.Status = 6 $Status = "A malfunction has occurred in the hardware for the connection." Case $objNCProps.Status = 7 $Status = "The media, for example the network cable, is disconnected." Case $objNCProps.Status = 8 $Status = "The connection is waiting for authentication to occur." Case $objNCProps.Status = 9 $Status = "Authentication has succeeded on this connection." Case $objNCProps.Status = 10 $Status = "Authentication has failed on this connection." Case $objNCProps.Status = 11 $Status = "The address is invalid." Case $objNCProps.Status = 12 $Status = "Security credentials are required." EndSelect Select Case $objNCProps.MediaType = 0 $MediaType = "No media is present." Case $objNCProps.MediaType = 1 $MediaType = "Direct serial connection through a serial port." Case $objNCProps.MediaType = 2 $MediaType = "Connection is through an integrated services digital network (ISDN) line." Case $objNCProps.MediaType = 3 $MediaType = "Connection is to a local area network (LAN)." Case $objNCProps.MediaType = 4 $MediaType = "Dial-up connection over a conventional phone line." Case $objNCProps.MediaType = 5 $MediaType = "Virtual private network (VPN) connection." Case $objNCProps.MediaType = 6 $MediaType = "Point-to-Point protocol (PPP) over Ethernet." Case $objNCProps.MediaType = 7 $MediaType = "Bridged connection." Case $objNCProps.MediaType = 8 $MediaType = "Shared connection to a LAN." Case $objNCProps.MediaType = 9 $MediaType = "Shared connection to a remote or wide area network (WAN)." EndSelect $NetArr[$i][1] = $objNCProps.Name $NetArr[$i][2] = $objNCProps.Guid $NetArr[$i][3] = $objNCProps.DeviceName $NetArr[$i][4] = $Status $NetArr[$i][5] = $MediaType $NetArr[0][0] = $i ; Общее кол-во $i = $i + 1 EndIf EndIf Next EndIf Return $NetArr EndFunc Func Output($n) GUICtrlSetData($Label1, _ "- Name: " & $NetArr[$n][1] & @CRLF & _ "- Device Name: " & $NetArr[$n][3] & @CRLF & _ "- Status: " & $NetArr[$n][4] & @CRLF & _ "- Media Type: " & $NetArr[$n][5] & @CRLF) ;"- Guid: " & $NetArr[$n][2] EndFunc |
Отправлено: 00:30, 16-08-2006 | #287 |
Пользователь Сообщения: 125
|
Профиль | Отправить PM | Цитировать Creat0R
У тебя потрясающее умение делать ошибки там, где их сделать невозможно! В своих примерах ты в первом случае искал слово "word", а во втором - слово "Word". Естественно, что результаты были разными. Проблема русского языка и DOS поднималась здесь не раз. Один из вариантов: |
Отправлено: 01:05, 16-08-2006 | #288 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать bogomolv
Цитата:
Цитата:
Цитата:
|
|||
------- Отправлено: 01:44, 16-08-2006 | #289 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать XXXler
Цитата:
|
|
Отправлено: 02:29, 16-08-2006 | #290 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? | DreDo | Хочу все знать | 4 | 01-12-2009 18:54 | |
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. | Vadikan | AutoIt | 1543 | 18-01-2009 10:46 | |
[архив - Часть 2] AutoIt скрипты | Vadikan | AutoIt | 985 | 21-01-2008 09:58 | |
[Архив - Часть 1.3] AutoIt скрипты | biork | AutoIt | 503 | 09-06-2007 11:27 | |
[Архив - Часть 1.1] AutoIt скрипты | EgOrus | AutoIt | 335 | 04-02-2006 16:58 |
|