|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.2] AutoIt скрипты |
|
[Архив - Часть 1.2] AutoIt скрипты
|
Ветеран Сообщения: 565 |
Внимание! Тема переведена в архивное состояние (настоятельно рекомендуется к прочтению/поиску) Руководство к действию по работе c AutoIt. |
|
------- Отправлено: 10:47, 10-02-2006 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
просто добавь еще один IF: ... судя по файлу это больше смахивает на работу с блоками текста, чем просто со строками |
Отправлено: 13:02, 07-11-2006 | #451 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27
Цитата:
![]() Цитата:
|
||
------- Отправлено: 16:39, 07-11-2006 | #452 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
- читаем файл и сразу нумеруем записи по блокам (а не по строкам); - один из реквизитов (URL) оформляем как ключевой для блока; - формируем новый файл ссылок (поверх старого), но уже без дублей. З.Ы. обычно чем "правильней" алгоритм, тем он медленней |
|
Отправлено: 02:04, 08-11-2006 | #453 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27
Цитата:
Цитата:
![]() Цитата:
![]() |
|||
------- Отправлено: 04:46, 08-11-2006 | #454 |
Googler Сообщения: 3665
|
Профиль | Отправить 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 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27
Цитата:
![]() Цитата:
![]() Дело вот в чём, браузер не всегда затирает нужные закладки, иногда, если были удалены заглавы (#URL) двух закладок (блоков) идущих подряд, то он удаляет иногда и ту закладку которая идёт выше этих двух. Может всё же как то можно чтобы уже сразу весь блок удалять? ![]() Цитата:
![]() ![]() |
|||
------- Отправлено: 13:35, 08-11-2006 | #456 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
![]() 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 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27
Тоже есть трабла ![]() Оказывается ![]() #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 Я бы конечно мог просчитать все варианты, т.е если есть допустим пункт 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 Вот на всякий пожарный, прикладываю файл, содержащий дубликаты таких (разных) блоков. |
------- Отправлено: 09:20, 09-11-2006 | #458 |
Googler Сообщения: 3665
|
Профиль | Отправить 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 |
|
Последний раз редактировалось amel27, 13-11-2006 в 12:42. Причина: косметические мелочи Отправлено: 11:57, 09-11-2006 | #459 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27
Удаляются не все дублирующиеся блоки ![]() ![]() |
------- Отправлено: 23:21, 09-11-2006 | #460 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Открывая 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 |
|