Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.2] AutoIt скрипты

Ответить
Настройки темы
[Архив - Часть 1.2] AutoIt скрипты

Ветеран


Сообщения: 565
Благодарности: 41

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 25-01-2008
Внимание!
Тема переведена в архивное состояние





(настоятельно рекомендуется к прочтению/поиску)


Руководство к действию по работе c AutoIt.
Можно ли с помощью AutoIt выбрать каталог? Хочу нацарапать оболочку, которая мне будет конфиги для nnBackup писать, дык выбрать каталог для бэкапа пока только вручную получается... Нельзя ли как-нть вывалить стандартный диалог по выбору файлов-папок, и получить из него результат действий пользователей?

-------
Tega AutoPatcher. Все обновления для XP в одном пакете. http://tega.ru/dirk/links.html


Отправлено: 10:47, 10-02-2006

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R
просто добавь еще один IF:
Код: Выделить весь код
...
For $i=1 To $DupLines [0][0]
	If StringLeft ($DupLines [$i][1], 5) = @TAB & "URL=" Then
		; расчитываем номер строки для удаления
		$delNum = $DupLines [$i][0] - 3
		; отмечаем кандидата на удаление в массиве
		$DelFlags [$delNum] = 1
	EndIf
Next
...
... судя по файлу это больше смахивает на работу с блоками текста, чем просто со строками
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:02, 07-11-2006 | #451



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27
Цитата:
просто добавь еще один IF:
Огромное THENX! - Как всё оказывается просто

Цитата:
судя по файлу это больше смахивает на работу с блоками текста, чем просто со строками
Ну да, просто содержимое этого файла, может доходить до 5-ти, а то и 10-ти ТЫСЯЧЬ! строк (иногда и больше) - и это всё закладки в браузере Opera (как избранное у IE), данная функция, позволит удалить в этом файле все дублирующиеся закладки. Просто если удалить у любого такого блока, строчку содержащюю #URL, то после запуска браузера, эта закладка не будет отображаться, и даже более этого, браузер сам всё “поправит” в файле, и “затрёт” оставшиеся строчки, которые для него, как бы являются “мусором”.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 16:39, 07-11-2006 | #452


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R
Цитата:
если удалить у любого такого блока, строчку содержащюю #URL, то после запуска браузера, эта закладка не будет отображаться, и даже более этого, браузер сам всё “поправит” в файле, и “затрёт” оставшиеся строчки
все это замечательно... но представь, что в блоке поменялись местами две строчки (подправит ли это браузер, это ведь не ошибка?), или в новой версии добавили новый реквизит... работа скрипта будет нарушена. Поэтому более "правильным" представляется следующий алгоритм:
- читаем файл и сразу нумеруем записи по блокам (а не по строкам);
- один из реквизитов (URL) оформляем как ключевой для блока;
- формируем новый файл ссылок (поверх старого), но уже без дублей.

З.Ы. обычно чем "правильней" алгоритм, тем он медленней

Отправлено: 02:04, 08-11-2006 | #453


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27
Цитата:
представь, что в блоке поменялись местами две строчки (подправит ли это браузер, это ведь не ошибка?)
Именно те строчки, которые в промежутке #URL и URL=ссылка, меняться местами не могут, и вообще, все строчки всегда присутствуют так, как это задуманно браузером, я пробовал убирать строки по разному, но браузер ставил так как ему нужно.

Цитата:
в новой версии добавили новый реквизит
Сомневаюсь я, что разработчики когда либо возьмутся за правку работы с закладками, в браузере и так много чего править нужно, и вещи куда серъёзней чем закладки (хотя предусмотреть такую функцию, как не позволения добовлять закладки повторно, они конечно должны были).

Цитата:
обычно чем "правильней" алгоритм, тем он медленней
Но мне скорость не очень важна, я конечно буду очень рад если будет более усовершенствованный скрипт , но так как он выполняется сейчас, меня вполне устраивает. Ещё раз спасибо.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 04:46, 08-11-2006 | #454


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R
Цитата:
я конечно буду очень рад если будет более усовершенствованный скрипт , но так как он выполняется сейчас, меня вполне устраивает.
другого не будет ...и тем не менее (на будущее) советую не заниматься сочинительством отвлеченных задачек, а сразу раскрывать все требования к скрипту. Кодирование общих задач может и полезно, но требует учета большего количества вариантов, что приводит к лишней трате времени и лишней длине кода... лучше постановку задачи сделать совместными усилиями.

применительно к твоему скрипту код можно еще укоротить:
Код: Выделить весь код
#include <File.au3>

$File = "c:\test.txt"

Dim $FileLines
_FileReadToArray ($file, $FileLines)
; Возвращаем массив из дублирующихся записей
$DupLines = _DupsInArray ($FileLines)
; Страховка от пустого массива если дублей нет
If $DupLines [0][0] >0 Then
	For $i=$DupLines [0][0] To 1 Step -1
		If StringLeft ($DupLines [$i][1],5) = @TAB & "URL=" Then _FileWriteToLine ($File, $DupLines [$i][0] - 3, "", 1)
	Next
EndIf
З.Ы. я ваще нудный...
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:28, 08-11-2006 | #455


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27
Цитата:
лучше постановку задачи сделать совместными усилиями.
Ок, буду далее только с открытыми картами появляться - просто по какой то причине, мне всё время кажется, что этими самыми “сочинениями”, мне удастса лучше объяснить цель моей задачи.

Цитата:
применительно к твоему скрипту код можно еще укоротить:
Спасибо, но как оказалось, ты в каком то смысле был прав ...

Дело вот в чём, браузер не всегда затирает нужные закладки, иногда, если были удалены заглавы (#URL) двух закладок (блоков) идущих подряд, то он удаляет иногда и ту закладку которая идёт выше этих двух. Может всё же как то можно чтобы уже сразу весь блок удалять?

Цитата:
я ваще нудный
Желаю чтобы все пользователи этого форума были такими нудными, я бы тогда здесь по жизннно зависал - и вообще, нет ли такой возможности (может тоже скрипт написать?), чтобы за каждое твоё оставленное сообщение (пусть даже по всему форуму), автоматом оно обозначалось бы как “Полезное сообщение” - оно так и есть

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 13:35, 08-11-2006 | #456


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R
Цитата:
Дело вот в чём, браузер не всегда затирает нужные закладки, иногда, если были удалены заглавы (#URL) двух закладок (блоков) идущих подряд, то он удаляет иногда и ту закладку которая идёт выше этих двух. Может всё же как то можно чтобы уже сразу весь блок удалять?
Сказал же, другого не будет ... Лучше воспользоваться твоим утверждением о фиксированном формате блока и чуть переделать существующий:
1. перенес IF в код функции - это необязательно, но оптимизирует поиск дублей,
2. добавил удаление остальных строк блока (в обратном порядке!).
Код: Выделить весь код
#include <File.au3>

$File = "c:\test.txt"

Dim $FileLines
_FileReadToArray ($file, $FileLines)
; Возвращаем массив из дублирующихся записей
$DupLines = _DupURLsInArray ($FileLines)
; Страховка от пустого массива если дублей нет
If $DupLines [0][0] >0 Then
	For $i=$DupLines [0][0] To 1 Step -1
		_FileWriteToLine ($File, $DupLines [$i][0] +3, "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] +2, "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] +1, "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0]   , "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] -1, "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] -2, "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] -3, "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] -4, "", 1)
	Next
EndIf

; Возвращает двумерный массив со счетчиком, содержащий только дубли
Func _DupURLsInArray (ByRef $array)
	Local $i, $i, $res [1][2] = [[0,0]]
	; рабочий массив для отметки обработанных дублей
	Local $flags [$array [0] +1]
	For $i=1 To $array [0]
		If StringLeft ($array [$i],5) = @TAB & "URL=" Then
			For $j=$i+1 To $array [0]
				If $flags [$j] <> 1 Then
					If $array [$i] = $array [$j] Then
						ReDim $res [$res [0][0]+2][2]
						$res [0][0] = $res [0][0] +1
						$res [$res [0][0]][0] = $j
						$res [$res [0][0]][1] = $array [$j]
						$flags [$j] = 1
					EndIf
				EndIf
			Next
		EndIf
	Next
	Return $res
	_ArraySort ($res, 0, 1, 0, 2)
EndFunc
Цитата:
чтобы за каждое твоё оставленное сообщение (пусть даже по всему форуму), автоматом оно обозначалось бы как “Полезное сообщение” - оно так и есть
не переживай - это пройдет...

Последний раз редактировалось amel27, 10-11-2006 в 08:03.

Это сообщение посчитали полезным следующие участники:

Отправлено: 03:54, 09-11-2006 | #457


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Вложения
Тип файла: zip opera6.adr.zip
(946 байт, 12 просмотров)

amel27
Тоже есть трабла .

Оказывается , иногда некоторых пунктов в этом блоке нету\есть, они не присутствует\присутствуют в том случае, либо, если у закладки нет\есть описании (DESCRIPTION), либо нет\есть код посещения (VISITED=), либо нет\есть код активвности (ACTIVE=). Вот как выглядит самый полный блок (т.е больше этих пунктов нет) :

Код: Выделить весь код
#URL
	ID=1
	NAME=AutoIt скрипты .:[общие вопросы]:.
	URL=http://forum.oszone.net/post-508967.html
	CREATED=1163050009
	VISITED=1163050722
	DESCRIPTION=AutoIt скрипты .:[общие вопросы]:.
	ICONFILE=forum.oszone.net.gif
	ACTIVE=YES
А вот как будет выглядеть блок с минимальными пунктами (меньше чем это не может быть) :


Код: Выделить весь код
#URL
	ID=21
	NAME=Yahoo!
	URL=http://www.yahoo.com/
	CREATED=1163050735
	ICONFILE=www.yahoo.com.ico
Я бы конечно мог просчитать все варианты, т.е если есть допустим пункт DESCRIPTION=, и нету пункта VISITED=, то делаем одно действие, а если есть первое и нет второго, то делаем другое, и т.д... но это получится слишком громоздко, вот начало этого...

Код: Выделить весь код
For $i=$DupLines [0][0] To 1 Step -1
	If StringLeft(FileReadLine($File, $DupLines [$i][0] +3), 13) = @TAB & "DESCRIPTION=" and StringLeft(FileReadLine($File, $DupLines [$i][0] +2), 9) = @TAB & "VISITED=" Then
		_FileWriteToLine ($File, $DupLines [$i][0] +4, "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] +3, "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] +2, "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] +1, "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0]   , "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] -1, "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] -2, "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] -3, "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] -4, "", 1)
	ElseIf StringLeft(FileReadLine($File, $DupLines [$i][0] +2), 13) = @TAB & "DESCRIPTION=" and StringLeft(FileReadLine($File, $DupLines [$i][0] +5), 8) = @TAB & "ACTIVE="
		_FileWriteToLine ($File, $DupLines [$i][0] +5, "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] +4 "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] +3, "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] +2, "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] +1, "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0]   , "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] -1, "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] -2, "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] -3, "", 1)
		_FileWriteToLine ($File, $DupLines [$i][0] -4, "", 1)
	EndIf
Next
Может есть способ покороче с этим бороться?
Вот на всякий пожарный, прикладываю файл, содержащий дубликаты таких (разных) блоков.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 09:20, 09-11-2006 | #458


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R
Цитата:
Тоже есть трабла
на то и вышло... чтобы удалить блок нужно определить его конец и начало:
Код: Выделить весь код
#include <File.au3>
#include <Array.au3>

$File = "c:\test.txt"

Dim $FileLines
_FileReadToArray ($file, $FileLines)
; Возвращаем массив из дублирующихся записей
$DupLines = _DupURLsInArray ($FileLines)
; Страховка от пустого массива если дублей нет
If $DupLines [0][0] >0 Then
    For $i=$DupLines [0][0] To 1 Step -1
        ; ищем начало следующего блока
        $iNext = _ArraySearch ($FileLines, "#URL", $DupLines [$i][0])
        ; если не нашли, то конец файла
        If @Error=6 Then $iNext=_FileCountLines ($File) +1
        Do
            $iNext=$iNext-1
            _FileWriteToLine ($File, $iNext, "", 1)
        Until $FileLines [$iNext] = "#URL"
    Next
EndIf
EDIT: исправил ошибку с уловием (выделено красным), спутал с функцией _ArrayBinarySearch

Последний раз редактировалось amel27, 13-11-2006 в 12:42. Причина: косметические мелочи

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:57, 09-11-2006 | #459


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27
Удаляются не все дублирующиеся блоки - и как ни странно, не удалился дубль именно закладки этого поста (эксперементировал на прикреплённом мной раньше файле).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 23:21, 09-11-2006 | #460



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.2] AutoIt скрипты

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Открывая 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




 
Переход