Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 3)

Модерирует : gyra, Maz

gyra (23-01-2020 10:51): AutoIT (Часть 4)  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

   

Widok



Moderator-Следопыт
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

 
Описание:

Цитата:
AutoIt v3 - это язык для написания сценариев, напоминающий BASIC. Основным его назначением является автоматизация работ с Windows GUI (графическим интерфейсом пользователя MS Windows). Для выполнения этой сложной задачи предоставляется комбинация испытанных методов, включающих в себя эмуляцию нажатий комбинаций клавиш клавиатуры, перемещения указателя мыши, управление окнами и их визуальными элементами. Как показывает практика, эти "приводные ремни" весьма эффективны для получения работающих решений в ситуациях, когда другие стандартные средства (например, VBScript и SendKeys) оказываются бессильны.
Умеет он очень и очень многое! Бесплатный.

 
  • Справки
  • Инструменты
  • Ресурсы, посвящённые AutoIt
  • Полезные советы новичкам и не только
  • Готовые решения
  • Скрипт раскраски кода AutoIt для публикации в форумах
     


     
    За шапкой следит ViSiToR / AZJIO  

  • Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 13:07 01-06-2010 | Исправлено: Maz, 12:29 10-01-2020
    FSWE

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Товарищи а разный ХЭШ может быть у идентичных по содержанию файлов???

    Всего записей: 186 | Зарегистр. 04-07-2009 | Отправлено: 20:57 25-02-2012
    ice99

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ynbIpb

    Цитата:
    ice99, можно использовать облачный сервис. например dropbox

     
    Это понятно, но всё-таки хочется сделать это при помощи Autoit

    Всего записей: 163 | Зарегистр. 03-06-2005 | Отправлено: 23:12 25-02-2012
    batva



    crazy administrator
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    .

    Всего записей: 12593 | Зарегистр. 07-01-2001 | Отправлено: 00:27 11-03-2013
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А куда пропали сообщения за целый год?

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 11:30 11-03-2013
    Daniyar91

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    В справке в разделе - Приложения->Значения @OSLang
     
    Есть две строки:
    0413 1043 nl-NL Голландский (Нидерланды)  
    0813 2067 nl-BE Голландский (Бельгия)
     
    Надо исправить на:
    0413 1043 nl-NL Нидерландский (Нидерланды)  
    0813 2067 nl-BE Нидерландский (Бельгия)

    Всего записей: 425 | Зарегистр. 30-08-2011 | Отправлено: 15:57 25-03-2013
    Astra55



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Не мог бы кто-то из знающих людей сваять некую небольшую утилитку для коррекции сносок в Fiction Book Editor-е? Суть проблемы: автоматически переименовать теги ссылок в тексте, начиная с 1, заканчивая тегом конца текста и теги самих ссылок, начиная с 1 и заканчивая тегом конца ссылок. Номера ссылок могут быть до 9999 (ессно с запасом!), без незначащих нулей, а заменяемые номера могут содержать латинские буквы - последствия исправления разного рода косяков. Такая утилита резко облегчит работу с fb2 текстами, поскольку хваленый FineReader если упрется, то исправить ссылки, кроме как вручную, вообще невозможно. Править несколько сот ссылок вручную - удовольствие много ниже среднего  
    Пример со ссылками 1,2,100, выделены жирным, в квадратных скобках номера ссылок, которые будут видны в тексте:
    Начало текста...
    Общий эквивалентный аттестат<a l:href="#fn1" type="note">[1]</a>
    дальше текст...
    ЛСШ<a l:href="#fn2" type="note">[2]</a>
    дальше текст...
    Arriba!<a l:href="#fn100" type="note">[100]</a>
    дальше текст...
    </body> - конец текста
    <body name="notes"> - начало ссылок
     <section id="fn1">
      <title>
       <p>1</p>
      </title>
      <p>Общий эквивалентный аттестат — свидетельство о среднем образовании...</p>
     </section>
     <section id="fn2">
      <title>
       <p>2</p>
      </title>
      <p>Лисбонская средняя школа...</p>
     
    дальше идут ссылки от 3 до 99...
     
    <section id="fn100">
     <title>
      <p>100</p>
     </title>
      <p>Смелее! (исп.)</p>
    </section>
       
    дальше идут ссылки
    </body> - конец ссылок

    ----------
    Per warez ad scientiam

    Всего записей: 11717 | Зарегистр. 16-05-2003 | Отправлено: 19:06 26-03-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Astra55
    К примеру я нахожу в эт эту форму
    <a l:href="#fn100" type="note">[100]</a>
    Вместо 100 я подставляю \d+ то есть любое число. Найдя первое совпадение, я запускаю поиск ссылки:
    <section id="fn100">  
     <title>  
      <p>100</p>  
     </title>
    В которой вместо числа 100 я использую найденную группу в рег.выр., то есть в данном случае число 100. В качестве переносов строк и пробелов использую /s+. Остаётся вопрос, на что именно их менять? На буквенное представление числа? Например 0=a, 26=z, 27=ba и т.д.
     
    Так:

    Код:
    $timer = TimerInit() ; Засекаем время, чтобы оценить время поиска
     
    $sPath = @ScriptDir & '\11.22.63.fb2'
    $sPathOut = @ScriptDir & '\11.22.63_New.fb2'
    $iEncoding = FileGetEncoding($sPath) ; Запрос кодировки файла
    $hFile = FileOpen($sPath, $iEncoding)
    $sText = FileRead($hFile) ; читаем файл в переменную
    FileClose($hFile)
     
    $iPos = 1 ; смещение для поиска
    $iCount = 0 ; счётчик замен
    Do
        $aNum = StringRegExp($sText, '<a l:href="#fn(\w+)" type="note">\[\1([a-z]?)\]</a>', 1, $iPos)
        $iPos = @extended ; Сохраняем позицию, от которой делаем следующий шаг поиска
        If @error Then
            ExitLoop
    ; ошибка и выход, если ничего не найдено
        Else ; иначе найдено и обрабатываем
            $aTmp = StringSplit($aNum[0], '') ; Найденное число, например 100 делим на 1, 0, 0 и зменим на буквы
            $sName = ''
            For $i = 1 To $aTmp[0]
                If StringIsDigit($aTmp[$i]) Then ; если число, тогда
                    $sName &= Chr(122 - $aTmp[$i]) ; вместо цифры будет буква. В теории от q до z, так как от z на 0-9 предыдущие буквы
                Else
                    $sName &= $aTmp[$i] ; буква как есть
                EndIf
            Next

            ; Заменяем найденную ссылку на ссылку с буквенным именем, например 100 на число, например baa
            $sText = StringReplace($sText, '<a l:href="#fn' & $aNum[0] & '" type="note">[' & $aNum[0]& $aNum[1] & ']</a>', '<a l:href="#fn' & $sName & '" type="note">[' & $sName& $aNum[1] & ']</a>')
            $iCount += @extended
            $sText = StringRegExpReplace($sText, '<section id="fn' & $aNum[0]& $aNum[1] & '">(\s+)<title>(\s+)<p>' & $aNum[0]& $aNum[1] & '</p>(\s+)</title>', '<section id="fn' & $sName& $aNum[1] & '">\1title>\2<p>' & $sName& $aNum[1] & '</p>\3</title>')
            $iCount += @extended
        EndIf
    Until
    0
     
    ; Записываем результат в файл
    $hFile = FileOpen($sPathOut, 2+$iEncoding)
    FileWrite($hFile, $sText)
    FileClose($hFile)
     
    MsgBox(0, "Готово", 'Время выполнения : ' & Round(TimerDiff($timer) / 1000, 2) & ' сек' &@LF& _
    'Количество замен : ' & $iCount) ; у меня 42 сек

     
    Daniyar91
    Поменял, следующее обновление будет без этих ошибок. Кстати кто желает чаще обновлятся, вот тема.

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 19:46 27-03-2013 | Исправлено: AZJIO, 17:09 28-03-2013
    Astra55



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO
    Поиск надо начинать с первой ссылки, то есть с <a l:href="#fn1" type="note">[1]</a>, уж первую ссылку всегда можно правильно задать руками. А потом просто добавлять к следующей такой же ссылке единицу <a l:href="#fn2" type="note">[2]</a> и так далее, до тега окончания текста, либо конца файла. В строгом порядке добавлять к каждому следующему совпадению +1. Аналогично в самих ссылках, начало:
    <section id="fn1">  
      <title>  
       <p>1</p>  
      </title>  
    потом к fn1 и к <p>1</p> тоже плюсуется единица и так далее. Что именно будет находится после #fn... и между [...], а также <section id="fn..."> и в теге ниже <p>...</p> роли не играет - все удалить и заменить на необходимый номер по порядку.

    ----------
    Per warez ad scientiam

    Всего записей: 11717 | Зарегистр. 16-05-2003 | Отправлено: 21:28 27-03-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Astra55
    Пример можно как было и как стало, чтобы увидеть различие? Пример что я дал не делает как надо?

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 22:58 27-03-2013
    Astra55



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO
    Вот книга для образца - http://rghost.ru/private/44765142/c766a235d84cb661e3ab54c7db50b87b - 650 кил, внутри 2,8 метра текста. Ссылки все в порядке, но пронумерованы не так, как требуется, после 81 идет не 82, 83, 84, а 81a, 81b, 81c и т.д. После запуска и работы скрипта файл File.fb2 полностью портится, вместо текста в нем "квадратики", то есть, непонятная кодировка.

    ----------
    Per warez ad scientiam

    Всего записей: 11717 | Зарегистр. 16-05-2003 | Отправлено: 04:41 28-03-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Astra55

    Цитата:
    вместо текста в нем "квадратики", то есть, непонятная кодировка.
    Ну просто надо открыть файл с соответствующим флагом, в UTF.  
    Изменил скрипт, теперь проверяет кодировку файла и сохраняет в той же. Добавил проверку времени выполнения - 2,7 Мб за 42 сек. И исправил замены во втором рег. выр., возвращал неправильно. Вот теперь точно множно сравнивать различия в каком нибуть "Beyond Compare 3", чтобы оценить оно или не оно.
    Ещё раз обновил, учьтя заморочки с 81a, 81b, 81c.

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 16:01 28-03-2013 | Исправлено: AZJIO, 17:11 28-03-2013
    Astra55



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO
    Может у меня чего не хватает в AutoIt 3.3.8.1, инсталлятор дефолтный, но все номера сносок стали латинскими буквами, причем, от 1-й до 4-х, если было нечто вроде 152a, то последняя "а" остается. FB Editor отказывается открывать такой файл, ругается на неправильную структуру XML Все номера сносок должны быть цифровые, буквы я добавлял в конце номера, поскольку какие-то ссылки пришлось добавлять руками.

    ----------
    Per warez ad scientiam

    Всего записей: 11717 | Зарегистр. 16-05-2003 | Отправлено: 18:18 28-03-2013 | Исправлено: Astra55, 18:20 28-03-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Astra55

    Цитата:
    но все номера сносок стали латинскими буквами
    Я так и делал. Либо я не понимаю что нужно. Поэтому я и сказал дайте мне вариант до исправления и после, чтобы я  понял в чём смысл. Но чесно говоря мне уже лень очередной раз переделывать.

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 19:33 28-03-2013
    Astra55



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO
    Значит, я плохо объяснил И понял, что буквы будут использоваться для временной замены цифр, а потом все вернется опять к цифрам. Еще раз суть проблемы:
    идет последовательная нумерация ссылок - 22,23,24 и т.д. Но потом выясняется, что между 22-й и 23-й ссылками пропущены еще три ссылки, им номера автоматом не присвоились. Временно я их переименовываю руками в 22a,22b,22c, как в самом тексте, так и в тексте ссылок. После того, как все ссылки проверены и существуют под цифро- и цифробуквенными именами, нужно их переименовать в 22,23,24,25,26 и т.д., в двух указанных местах - в тексте и в тексте ссылок. Нумерация строго последовательная, начиная с 1 и кончая последним номером ссылки.

    ----------
    Per warez ad scientiam

    Всего записей: 11717 | Зарегистр. 16-05-2003 | Отправлено: 20:16 28-03-2013
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Astra55,
    У Вас в файле 11.22.63.fb2  166 ссылок и 173 сноски, есть ссылка 151a и нет такой сноски, есть сноска 150a и нет такой ссылки. Как я понимаю, это Ваша ошибка при правке вручную. Из-за этого у меня теряется одна пара ссылка-сноска и после 161 идет 163. Отрабатывает (у меня) чуть меньше секунды.
    Код:
    Opt('MustDeclareVars', 1)
     
    Global $sFile_fb2 = @ScriptDir & '\11.22.63.fb2', $iStart
     
    $iStart = TimerInit()
    ConsoleWrite(_Fb2_Href_temp($sFile_fb2) & @LF)
    ConsoleWrite(TimerDiff($iStart) & @LF)
     
    Func _Fb2_Href_temp($s_File_fb2)
        Local $i_Enc, $h_File, $s_Text, $a_Href, $i_UbHref, $s_NewText, $i_OffSet, $i_Tmp, $a_Note, $i_UbNote, $a_Tmp[1], $s_Tmp_fb2 = @ScriptDir & '\Tmp.fb2'
     
        $i_Enc = FileGetEncoding($s_File_fb2)
        $h_File = FileOpen($s_File_fb2, $i_Enc)
        If $h_File = -1 Then Return False
        $s_Text = FileRead($h_File)
        FileClose($h_File)
        $a_Href = StringRegExp($s_Text, '(<a l:href=.+?a>)', 3)
        $i_UbHref = UBound($a_Href) - 1
        If $i_UbHref = -1 Then Return False
        ReDim $a_Tmp[$i_UbHref + 1][2]
        For $i = 0 To $i_UbHref
            $a_Tmp[$i][0] = StringRegExpReplace($a_Href[$i], '.+#(fn.+?)".*', '$1')
            $i_OffSet = StringInStr($s_Text, $a_Href[$i]) - 1
            $i_Tmp = $i + 1
            $a_Tmp[$i][1] = StringRegExpReplace($a_Href[$i], '^(.+?#fn)(.+?)(".+?\[)(.+?)(\].*)$', '${1}' & $i_Tmp & '${3}' & $i_Tmp & '${5}')
            $s_NewText &= StringLeft($s_Text, $i_OffSet) & $a_Tmp[$i][1]
            $s_Text = StringTrimLeft($s_Text, $i_OffSet + StringLen($a_Href[$i]))
        Next
        $a_Href = 0
        $a_Note = StringRegExp($s_Text, '(?s)(\r\n[^\r\n]*?<section id=.+?</section>)', 3)
        $i_UbNote = UBound($a_Note) - 1
        If $i_UbNote = -1 Then Return False
        For $i = 0 To $i_UbNote
            $i_OffSet = StringInStr($s_Text, $a_Note[$i]) - 1
            $s_NewText &= StringLeft($s_Text, $i_OffSet)
            $s_Text = StringTrimLeft($s_Text, $i_OffSet + StringLen($a_Note[$i]))
            For $j = 0 To $i_UbHref
                If $a_Tmp[$j][0] Then
                    If StringInStr($a_Note[$i], $a_Tmp[$j][0]) Then
                        $i_Tmp = $j + 1
                        $s_NewText &= StringRegExpReplace($a_Note[$i], '(?s)^(.+?fn)(.+?)(".+?<p>)(.+?)(</p>.*)$', '${1}' & $i_Tmp & '${3}' & $i_Tmp & '${5}')
                        $a_Tmp[$j][0] = 0
                        ExitLoop
                    EndIf
                EndIf
            Next
        Next
        For $i = 0 To $i_UbHref
            If $a_Tmp[$i][0] Then
                $s_NewText = StringReplace($s_NewText, $a_Tmp[$i][1], '', 1)
                $i_Tmp -= 1
            EndIf
        Next
        $h_File = FileOpen($s_Tmp_fb2, $i_Enc + 2)
        If $h_File = -1 Then Return False
        FileWrite($h_File, $s_NewText & $s_Text)
        FileClose($h_File)
        ;FileMove($s_Tmp_fb2, $s_File_fb2, 1)
        Return ($i_UbHref = $i_Tmp)
    EndFunc   ;==>_Fb2_Href_temp

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 12:21 29-03-2013 | Исправлено: madmasles, 13:31 29-03-2013
    Astra55



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    madmasles
    Цитата:
    166 ссылок и 173 сноски, есть ссылка 151a и нет такой сноски, есть сноска 150a и нет такой ссылки
    Разумеется, могут быть любые ошибки, именно поэтому и возникла надобность в автоматизации, поскольку вручную все править очень долго и муторно. Прогнал все ссылки после правки скриптом, были открыты два FBE, один искал ссылки, на втором были открыты сноски. Времени ушло на многие порядки меньше, чем при ручной коррекции. Крайне признателен за помощь! Реально полезная штука, буду активно юзать. А что несколько номеров не по порядку, так второй проход решает проблему. Благодарю Вас за результативные труды и AZJIO за попытку помочь.
     


    ----------
    Per warez ad scientiam

    Всего записей: 11717 | Зарегистр. 16-05-2003 | Отправлено: 14:10 29-03-2013
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Astra55,
    А можно посмотреть исходный файл, т.е. до Вашей ручной правки?

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 09:04 30-03-2013
    Astra55



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    madmasles
    Разумеется. Вот это полный сырец, полученный из FR11, где была начальная правка. Пропуск ссылок, их слипание, море неверных тегов и прочие "удовольствия".

    ----------
    Per warez ad scientiam

    Всего записей: 11717 | Зарегистр. 16-05-2003 | Отправлено: 09:25 30-03-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Astra55
    Теоретически мой пример было не сложно переделать, вроде как в месте где формируется текстовое представление ссылки использовать счётчик. И я бы сделал, если бы меня не озадачили работой.

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 20:00 30-03-2013
    AutoItUser

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста хотя бы направление куда копать:
    Есть скрипт, он запущен из реальной винды и кликает в виртуальную винду под ВМвэир, большую часть времени все нормально но иногда промахивается(по ощущениям промахивается на столько на сколько разница окон виртуальной винды и реальной, но я не уверен) система координат стоит абсолютная, может скрипт иногда рабочий стол виртуалки принимает как за реальный и от него отсчитывает?

    Всего записей: 3 | Зарегистр. 17-06-2011 | Отправлено: 08:20 31-03-2013
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

    Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 3)
    gyra (23-01-2020 10:51): AutoIT (Часть 4)


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru