Ru-Board.club
← Вернуться в раздел «Программы»

» AutoIT

Автор: Ilyusha
Дата сообщения: 05.09.2008 19:01
4
Автор: Maza Faka
Дата сообщения: 06.09.2008 07:31
timsky
ViSiToR
Вставлю и я свои 5 копеек

Код: Dim $ResultStrings

$file
= "c:\test.txt"

$fRead = FileRead($file)

$aStrings = StringRegExp($fRead, "(.*)\r\n", 3)

For $i = 0 To UBound($aStrings) - 1
If Not StringRegExp($ResultStrings, "(?i)" & $aStrings[$i], 0) Then $ResultStrings &= $aStrings[$i] & @CRLF
Next

$hFile = FileOpen($file, 2)
FileWrite($hFile, $ResultStrings)
FileClose($hFile)
Автор: ViSiToR
Дата сообщения: 06.09.2008 12:39
Maza Faka 08:31 06-09-2008
Цитата:
Вставлю и я свои 5 копеек

Я в начале тоже думал через RegExp сделать, но тут есть некие ограничения, например при работае с юникодом

Кстати, в твоём примере есть один недочёт - Проверять нужно строку с @CRLF, иначе может удалиться не дубль, а похожая строка, которая содержит начало такое же как и у другой строки.

Пример файла:


Код: Test
Tes
Автор: timsky
Дата сообщения: 06.09.2008 13:42
ViSiToR
Maza Faka
Спасибо, мужики! Что бы я без вас делал...

Здесь уже поднимался вопрос насчет многопоточности... никто не вкурсе, не собираются ли АвтоИт в этом направлении дорабатывать/переделывать? Так не хочется с++ изучать... надо но не хочется
Может разработчиков продонейтить надо?
Автор: ViSiToR
Дата сообщения: 06.09.2008 13:51
timsky 14:42 06-09-2008
Цитата:
не собираются ли АвтоИт в этом направлении дорабатывать/переделывать?

Увы, но нет


Цитата:
Может разработчиков продонейтить надо?

Не поможет, тут не вопрос о желании это сделать (оно у них есть), тут вопрос практической/технической реализации.
Автор: timsky
Дата сообщения: 06.09.2008 14:06
Очень жаль
В универе немного писал на Паскале, ВБ... не то. Недавно совсем попробовал Автоит и просто влюбился. Дело даже не в том, что все переменные Вариант, или что их можно влюбом месте объявлять, или еще каких-то поблажкаж. Код читается и пишется легко! И самое главное быстро! Классный хелп....
Автор: Maza Faka
Дата сообщения: 06.09.2008 15:07
ViSiToR

Цитата:
Я в начале тоже думал через RegExp сделать, но тут есть некие ограничения, например при работае с юникодом

Да, я не подумал об этом

Цитата:
Кстати, в твоём примере есть один недочёт - Проверять нужно строку с @CRLF, иначе может удалиться не дубль, а похожая строка, которая содержит начало такое же как и у другой строки.

Да ты прав, нижеуказанный код работает, но если последняя строка не содержит символов возврата каретки и окончания строки, то
Цитата:
«Tes» будет удалено


Код: Dim $ResultStrings

$file
= "c:\test.txt"

$fRead = FileRead($file)

$aStrings = StringRegExp($fRead, "(.*)\r\n", 3)

For $i = 0 To UBound($aStrings) - 1
If Not StringRegExp($ResultStrings, "(?i)(" & $aStrings[$i] & ")\r\n", 0) Then $ResultStrings &= $aStrings[$i] & @CRLF
Next

$hFile = FileOpen($file, 2)
FileWrite($hFile, $ResultStrings)
FileClose($hFile)
Автор: ViSiToR
Дата сообщения: 06.09.2008 15:23
Maza Faka 16:07 06-09-2008
Цитата:
если последняя строка не содержит символов возврата каретки и окончания строки, то «Tes» будет удалено

Да, но оно вроде решается в начале:


Код: $aStrings = StringRegExp($fRead, "(.*)(?:\r\n|\z)", 3)
Автор: Maza Faka
Дата сообщения: 06.09.2008 16:15
ViSiToR
Спасибо за пример. Теперь другая проблема, не удаляет дублирующиеся строки оканчивающиеся символом ?

Код: Dim $ResultStrings

$file
= "c:\test.txt"

$fRead = FileRead($file)

$aStrings = StringRegExp($fRead, "(.*)(?:\r\n|\z)", 3)

For $i = 0 To UBound($aStrings) - 1
If Not StringRegExp($ResultStrings, "(?i)(" & $aStrings[$i] & ")(?:\r\n|\z)", 0) Then $ResultStrings &= $aStrings[$i] & @CRLF
Next

$hFile = FileOpen($file, 2)
FileWrite($hFile, $ResultStrings)
FileClose($hFile)
Автор: ViSiToR
Дата сообщения: 06.09.2008 17:03
Maza Faka 17:15 06-09-2008
Цитата:
на каком ещё символе споткнётся RegExp


Служебные символы:


Код: [ ] { } ( ) | . ? + * \ ^
Автор: bornbill
Дата сообщения: 07.09.2008 14:30
народ в explorere открыт xml документ
если использовать _IEBodyReadHTML то получаем кучу не нужных и неправильных тегов
если использовать IEBodyReadText то тоже не получаем xml документ подскажите каким финтом воспользоваться для получения правильно сформированного xml документа, чтобы его потом обработать можно было?
вопрос 2 как перейти по ссылки и подсунуть свой referer...
Заранее благодарен.
Автор: timsky
Дата сообщения: 07.09.2008 14:37

Цитата:
народ в explorere открыт xml документ
если использовать _IEBodyReadHTML то получаем кучу не нужных и неправильных тегов
если использовать IEBodyReadText то тоже не получаем xml документ подскажите каким финтом воспользоваться для получения правильно сформированного xml документа, чтобы его потом обработать можно было?

InetGet не подойдет? Как вариант _IEAction с "selectall".
Автор: bornbill
Дата сообщения: 07.09.2008 14:57
timsky
InetGet нет не подойдёт, ибо это закачка файла, а мне надо имитировать открытие в том же окне
а вот как применить selectall я что-то не пойму..... вот й если бы там было saveas без вопросов это было бы дело
Автор: timsky
Дата сообщения: 07.09.2008 15:42
Вот тебе пример:

Цитата:
#include <IE.au3>
$ie = _IECreate ('http://www.gumtree.com/london/72.xml') ;Грузим xml

_IEAction ($ie, 'selectall') ; Выделяем содержимое броузера
_IEAction ($ie, 'copy') ; Копируем в буфер
_IEAction ($ie, 'quit') ; Закрываем броузер

$clip = ClipGet() ; Дергаем из буфера в переменную

; Кидаем в файл

$file = FileOpen ('xml.xml', 2)

FileWrite ($file, $clip)

FileClose ($file)
Автор: VladDao
Дата сообщения: 08.09.2008 13:43
где можно скочать библиотеку.
GuiCombo.au3
Автор: Maza Faka
Дата сообщения: 08.09.2008 14:45
VladDao
Скачай последнюю версию AutoIt, установи и смотри c:\Program Files\AutoIt3\Include\GuiComboBox.au3
Автор: Girka
Дата сообщения: 08.09.2008 16:10
этот сценарий жмёт капу Enter попеременно через 15 и 30 сек.

While 1
Send("{ENTER}")
Sleep(15000)
Send("{ENTER}")
Sleep(30000)
WEnd

но вот как грамотно написать, чтобы он жал эту капу в случайном интервале времени от 15 до 30 сек? умучалася уже, перепробовала кучу комбинаций с функциями TimerInit() и TimerDiff,
моСк вкипел, но упорно отказывается придумать что-либо толковое, Гугиль и Яндехс тоже не помогли хелп...
Автор: NIKZZZZ
Дата сообщения: 08.09.2008 16:44
Girka


Код: While 1
Send("{ENTER}")
Sleep(Random(15000 ,30000 ))
wend
Автор: timsky
Дата сообщения: 08.09.2008 16:47
Girka
Sleep (Random(15000,30000))
Автор: Girka
Дата сообщения: 08.09.2008 17:41
тьфу-ты-нуты, совсем старая стала совсем забыла про эту функцию. Пошла я.... велосипед дальше мучить...
Автор: bornbill
Дата сообщения: 08.09.2008 20:24
timsky и получаем файлик как на экране, но не формата xml
пока обхожусь сохранить как но имхо это не правильно...
у кого есть прямой совет как сохранить файл из IE указав путь имя этк, без доп окошек... заранее благодарен.

в догонку 2 вопрос один скрипт autoit надо два потока, где читать?
Автор: timsky
Дата сообщения: 08.09.2008 22:23
bornbill
Ну вот из моего примера я щас попробовал и не вижу проблемы. Да, файл другой:

1) Исходный файл в UINX кодировке, а сохраненный копированием в WINDOWS кодировке.
2) Добавились дефис и пробел: "- " в начале строк и символы табуляции заменились на 2 пробела.
Можно просто снести (заменить на символ табуляции) 2 пробела или "- " в начале всех строка и все.

В чем проблема с обработкой?
Автор: bornbill
Дата сообщения: 09.09.2008 07:27
timsky
пробую но пока при открытии _XMLFileOpen получаю дикие ошибки не опознанная ошибка DOM, этк..... ищу загвоздку, заранее благодарен за пример преобразования к виду нормального xml.... может я гдето туплю.....
заранее благодарен.

да ошибки не при открытии, а в другом месте только что наткнулся, но всё равно при открытии всегда получаю -1.
Автор: telyakov
Дата сообщения: 09.09.2008 12:23
Добрый день, Друзья!

Я новичок в AutoIT.
Начал разбираться со скриптами Sanja Alone http://sanjaalone.h15.ru/au3.php
Написал свой скрипт по установке Pragma 5.0,
но есть вопросы по её Offline-регистрации.
Может кто-нибудь подсказать как это делается
и кому можно выслать этот скрипт?

С уважением Алик Теляков
Автор: VitAlll2013
Дата сообщения: 09.09.2008 13:18
Можно ли както вносить изменения в сам исполняемый файл? Поясню. Компилируемый скрипт в exe - это нечто вроде архива. Внутри лежит файл options.ini. Внутри есть параметры. Запускаю файл он смотрит сам в себя и берёт из себя параметры. Я меняю эти параметры и жму "сохранить". Скрипт (exe) кладёт эти параметры в себя - в файл options.ini и при следующем запуске использует их. Такое портативное приложение получается. Может есть способ напрямую общаться с внутренностями exe файла, как с архивом или, как с папкой?
Автор: Maza Faka
Дата сообщения: 09.09.2008 14:23
VitAlll2013
Можно создать самораспаковыващийся архив, скажем с помощью консольной версии 7Zip в архив поместить сам архиватор, интерпретатор AutoIt3.exe, главный и дополнительный скрипт. Ну и автоматизировать всё это
Автор: ViSiToR
Дата сообщения: 09.09.2008 15:08
VitAlll2013 14:18 09-09-2008
Цитата:
Можно ли както вносить изменения в сам исполняемый файл?

Вот примерно реализация того что написал Maza Faka , но без 7z, я использовал уже имеющийся upx.exe. Получилось немного бредово правда, хотя если сильно надо ...


Код:
$sTempDir = _CreateTempFile(@TempDir, '~Au3_', '')

$sConfig = $sTempDir & "\Options.ini"
$sScript = $sTempDir & "\Script.au3"
$sCompiler = $sTempDir & "\Aut2Exe.exe"
$sUpx = $sTempDir & "\Upx.exe"
$sBin = $sTempDir & "\AutoItSC.bin"

FileInstall(".\Options.ini", $sConfig, 1)
FileInstall(".\Aut2Exe.exe", $sCompiler, 1)
FileInstall(".\Upx.exe", $sUpx, 1)
FileInstall(".\AutoItSC.bin", $sBin, 1)
FileInstall(".\Script.au3", $sScript, 1)

;Проверяем во второй раз (первый игнорируем - будет выведено текущее значение, т.к ещё не была сделана запись), на сохранение
MsgBox(64, "Results", IniRead($sConfig, "Sect", "Key", ""))

;Пишем в инишку, она будет запакована в новый exe'шник
IniWrite($sConfig, "Sect", "Key", "Some New Data")

;Компилируем всё обратно, с новыми параметрами
Run($sCompiler & ' /in "' & $sScript & '" /out "' & @ScriptDir & '\Script.exe" /comp 4', @ScriptDir, @SW_HIDE)

;Эта строка удаляет временную папку (будет выполненно через 5 сек. после выполнения скрипта, чтобы компилятор успел отработать)
Run(@ComSpec & ' /c ping -n 5 localhost > nul & rd /s /q "' & $sTempDir & '"', @TempDir, @SW_HIDE)

Func _CreateTempFile($s_DirectoryName = @TempDir, $s_FilePrefix = "~", $s_FileExtension = ".tmp", $i_RandomLength = 7)
Local $s_TempName

If StringRight($s_DirectoryName, 1) <> "\" Then $s_DirectoryName &= "\"

Do
$s_TempName = ""
While StringLen($s_TempName) < $i_RandomLength
$s_TempName
= $s_TempName & Chr(Random(97, 122, 1))
WEnd
$s_TempName = $s_DirectoryName & $s_FilePrefix & $s_TempName & $s_FileExtension
Until Not FileExists($s_TempName)

DirCreate($s_TempName)
Return $s_TempName
EndFunc
Автор: timsky
Дата сообщения: 09.09.2008 17:35
VitAlll2013
Зависит от того, что в итоге нужно, где будет запускаться файл и на каком носителе храниться.
Если нужно всего один файл, файл будет храниться на носителях с файловой сиситемой NTFS и таскаться на флехе, тоже отформатированной в NTFS, то можно юзать NTFS потоки. Что это такое - довольно развернуто узанешь в гугле Реализовать - как 2 пальца.

bornbill
Начни с простого... возьми и обкатай на мелкой проге вроде той, что я дал, а потом уже в виде функции в свою основную прогу пихай, а то так до посинения будешь ковыряться. А вообще раз такие геморрои, то юзай Save As или Opera.udf / FireFox.udf попробуй. Может там и рефер можно подставлять. Оперный удф видел на сайте уважаемого Visitor'a, за что ему гигантский респект!
Автор: Maza Faka
Дата сообщения: 09.09.2008 17:44
ViSiToR
VitAlll2013
Я использовал такой метод в одном из своих проектов

ViSiToR
Кстати такой метод не противоречит лицензионному соглашению AutoIt?
Автор: Filomat
Дата сообщения: 09.09.2008 21:47
Подскажите, пожалуйста, как в некой сторонней программе проверить checkbox на checked/unchecked

если в своей программе создавать эти checkbox'ы, то к ним можно обращаться, как к переменным, а стороннии как искать?

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

Предыдущая тема: Quintura Search


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.