1

Тема: AHK: Непростая задача с копипастом

Дано: а) текстовой блокнот с массой условно пронумерованных строчек; б) открытый в программе «Macromedia Dreamweaver 8» html-файл с таблицей, в каждой ячейке которой расположено изображение или текст.

Задача: построчное копирование блокнотного текста в определённые окна ввода Macromedia Dreamweaver (Src, Link, Alt) определённых ячеек таблицы, но при условии автоудаления предыдущих текстов окошек Src, Link, Alt.

Нюанс: копируемые тексты, а так же пути к папкам и файлам имеют смешанные символы (как латиница, так и кириллица).

Возможно ли создать такой скрипт? Если да, то прошу помочь в борьбе с рутиной и мышечной усталостью кисти правой руки.

2

Re: AHK: Непростая задача с копипастом

Через скайп, платно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Непростая задача с копипастом

teadrinker пишет:

Через скайп, платно.

1. Скайпа нет.

2. На безвозмездную помощь не могу здесь рассчитывать?

3. Кстати, подсказали, что задействовать Macromedia Dreamweaver совсем необязательно – перекодировать html можно и через обычный текстовой редактор, типа Блокнота. Вопрос лишь в том, как именно внедрить новый текст в html-код по заданному алгоритму. Полагаю, для программистов это не такая уж сложная задача: возможно, весь скрипт уместится на двух строчках.

4

Re: AHK: Непростая задача с копипастом

Эдвард пишет:

1. Скайпа нет.

Можно через ICQ.

Эдвард пишет:

2. На безвозмездную помощь не могу здесь рассчитывать?

Могу показать, как получить кусок текста из блокнота (или непосредственно из текстового файла) и вставить его в конкретное место html-файла. Для этого приведи пример текста и как можно более простой пример html-файла с указанием, куда вставить.

Вообще, цель форума — помощь в обучении программированию, а "напишите мне скрипт" — это уже заказ работ.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Непростая задача с копипастом

teadrinker пишет:

Можно через ICQ.

Будете смеяться, но Аськи тоже нема. Для он-лайн переписки использую лишь Агент.

teadrinker пишет:

Вообще, цель форума — помощь в обучении программированию, а "напишите мне скрипт" — это уже заказ работ.

Вот я и хотел немного обучиться основам программирования.

teadrinker пишет:

Могу показать, как получить кусок текста из блокнота (или непосредственно из текстового файла) и вставить его в конкретное место html-файла. Для этого приведи пример текста и как можно более простой пример html-файла с указанием, куда вставить.

Содержимое блокнота-донора № 1:

4041 (должно отправиться в первую ячейку верхней строки таблицы под тег img src)
800 КБ (должно отправиться в первую ячейку верхней строки таблицы под тег title)
http://www.e1.ru/fun/photo/view_pic.php/o/c5eecd1ed3b251440c7002b626da41c5/view.pic (под тег href)
http://www.e1.ru/fun/photo/view_album.php?id=213927&pic=c5eecd1ed3b251440c7002b626da41c5&page=1#top
(должно отправиться в первую ячейку второй строки таблицы под тег href)

4042 (должно отправиться во вторую ячейку верхней строки таблицы под тег img src)
700 КБ (и т. д.)
http://www.e1.ru/fun/photo/view_pic.php/o/3697c6aa038b3c087400e798f416a1d7/view.pic
http://www.e1.ru/fun/photo/view_album.php?id=213927&pic=3697c6aa038b3c087400e798f416a1d7&page=0#top

4043
790 КБ
http://www.e1.ru/fun/photo/view_pic.php/o/8b8edb34ed5dd22feb613a0241314033/view.pic
http://www.e1.ru/fun/photo/view_album.php?id=213927&pic=8b8edb34ed5dd22feb613a0241314033&page=0#top

4044
770 КБ
http://www.e1.ru/fun/photo/view_pic.php/o/9c066944d037e72ca804b8c34b9123c5/view.pic
http://www.e1.ru/fun/photo/view_album.php?id=213927&pic=9c066944d037e72ca804b8c34b9123c5&page=1#top

Содержимое блокнота-донора № 2:

Новый текст (должно отправиться в первую ячейку второй строки таблицы)
Продолжение текста
Продолжение текста
Продолжение текста

Новый текст (должно отправиться во вторую ячейку второй строки таблицы)
Продолжение текста
Продолжение текста
Продолжение текста

Новый текст (и т. д.)
Продолжение текста
Продолжение текста
Продолжение текста

Новый текст 
Продолжение текста
Продолжение текста
Продолжение текста

Верхняя (иллюстрационная) строка таблицы (с четырьмя столбцами). Изменению должно подвергнуться содержимое тегов: href, img src, title. 


<tr>
        <td width=246 valign=top><p align=center style='text-align:center'><a href="http://www.e1.ru/fun/photo/view_pic.php/o/c5eecd1ed3b251440c7002b626da41c5/view.pic"><img src="4021.gif" title="897 КБ" width="226" height="151" border="0"></a></p></td>
        <td width=246 valign=top><p align=center style='text-align:center'><a href="http://www.e1.ru/fun/photo/view_pic.php/o/3697c6aa038b3c087400e798f416a1d7/view.pic"><img src="4022.gif" title="743 КБ" width="226" height="151" border="0"></a></p></td>
        <td width=246 valign=top><p align=center style='text-align:center'><a href="http://www.e1.ru/fun/photo/view_pic.php/o/8b8edb34ed5dd22feb613a0241314033/view.pic"><img src="4023.gif" title="793 КБ" width="226" height="151" border="0"></a></p></td>
        <td width=246 valign=top><p align=center style='text-align:center'><a href="http://www.e1.ru/fun/photo/view_pic.php/o/9c066944d037e72ca804b8c34b9123c5/view.pic"><img src="4024.gif" title="775 КБ" width="226" height="151" border="0"></a></p></td>
      </tr>

Вторая (информационная) строка таблицы. Изменению должно подвергнуться содержимое тега href, а так же текст.


<tr>
        <td width=246 height="151" valign=top><pre class=стиль4 align=center style='text-align:center'><a href="http://www.e1.ru/fun/photo/view_album.php?id=213927&pic=c5eecd1ed3b251440c7002b626da41c5&page=1#top">Текст</a></pre>          </td>
        <td width=246 height="151" valign=top><pre class=стиль4 align=center style='text-align:center'><a href="http://www.e1.ru/fun/photo/view_album.php?id=213927&pic=3697c6aa038b3c087400e798f416a1d7&page=0#top">Текст</a></pre>          </td>
        <td width=246 height="151" valign=top><pre class=стиль4 align=center style='text-align:center'><a href="http://www.e1.ru/fun/photo/view_album.php?id=213927&pic=8b8edb34ed5dd22feb613a0241314033&page=0#top">Текст</a></pre>          </td>
        <td width=246 height="151" valign=top><pre class=стиль4 align=center style='text-align:center'><a href="http://www.e1.ru/fun/photo/view_album.php?id=213927&pic=9c066944d037e72ca804b8c34b9123c5&page=1#top">Текст</a></pre></td>
      </tr>

6

Re: AHK: Непростая задача с копипастом

Посмотрю, как будет время.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Непростая задача с копипастом

Эдвард пишет:

2. На безвозмездную помощь не могу здесь рассчитывать?

На помощь — да, конечно. На «сделайте мне это» — как получится: если кого-то Ваш вопрос заинтересует. Ибо §4.1:

§4.1 Форум не является линией поддержки каких-либо программных продуктов…

8

Re: AHK: Непростая задача с копипастом

Эдвард пишет:

Вот я и хотел немного обучиться основам программирования.

Тогда алгоритм такой:
Получаем текст из блокнота с помощью ControlGetText.
Разбор текста — Loop, parse.
Получаем текст из html-файла с помощью FileRead.
Замена текста в нужных местах — RegExReplace()
Создаём новый html-файл — FileAppend.
Если хочешь получить полное решение, тогда только платно, т. к. возникнут дополнительные вопросы, нужен личный контакт, потребует времени. Ко мне можно обратиться и по email dfiveg@mail.ru.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: Непростая задача с копипастом

teadrinker пишет:

Тогда алгоритм такой:
Получаем текст из блокнота с помощью ControlGetText.
Разбор текста — Loop, parse.
Получаем текст из html-файла с помощью FileRead.
Замена текста в нужных местах — RegExReplace()
Создаём новый html-файл — FileAppend.
Если хочешь получить полное решение, тогда только платно, т. к. возникнут дополнительные вопросы, нужен личный контакт, потребует времени. Ко мне можно обратиться и по email dfiveg@mail.ru.

Спасибо за наводку на ключевые команды. Попробую пока поэкспериментировать с ними, но, скорее всего, дополнительных вопросов не избежать. В частности, уже сейчас не совсем понятно, каким именно образом заменять текст в нужных местах, и какими символами прописывать эти строки.

10

Re: AHK: Непростая задача с копипастом

Эдвард пишет:

каким именно образом заменять текст в нужных местах

Об этом описании функции RegExReplace(), а также Регулярные выражения (RegEx) - краткий справочник.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11

Re: AHK: Непростая задача с копипастом

По тонкостям работы с той или иной командой здесь всегда можно получить ответ на конкретно заданный вопрос.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12

Re: AHK: Непростая задача с копипастом

teadrinker пишет:

Об этом описании функции RegExReplace(), а также Регулярные выражения (RegEx) - краткий справочник.

Что касается шаблонов для замены содержимого тегов в моём случае, кое-что вроде проясняется. Но, к сожалению, ничего не сказано про номера строк (блокнота-донора и/или html-кода). Как я их-то должен обозначать в командах?

13

Re: AHK: Непростая задача с копипастом

При разборе строки с помощью Loop, Parse номер строки находится в переменной A_Index:

String = 
(
перемена такта
так больше не так
перемена факта
фак больше не фак
)
Loop, parse, String, `n, `r
   MsgBox, % A_Index "-я строка: " A_LoopField
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

14

Re: AHK: Непростая задача с копипастом

В общем, как я не исхитрялся, дальше первой команды продвинуться не удалось.

Мой код:

#z::Run, E:\1\2\39\4.txt ; путь к блокноту-донору
ControlGetText, OutputVar ; получение текста из блокнота (в свете команды № 1 смысл данной операции не совсем понятен)
Loop, parse, String, `n, `r
   MsgBox, %A_Index% "5": %A_LoopField% ; теоретически должна выделяться и копироваться строка № 5, но этого не происходит, что делает пока бессмысленным продолжение записи скрипта.

15

Re: AHK: Непростая задача с копипастом

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

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

16

Re: AHK: Непростая задача с копипастом

teadrinker пишет:

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

Непонятно, как указывать путь к файлу через эту команду. Всяко пробовал – результата никакого (ни блокнот не открывается, ни какой-либо текст не появляется).

teadrinker пишет:

По остальному — прежде, чем использовать команды, неплохо бы хелп по ним изучить, там ведь и примеры есть.

Так я примерами, в основном, и пользовался. Но, видимо, как-то непонятно разъяснена суть. В общем-то, потому и нуждаюсь в помощи тех, кто может это сделать более внятно и доходчиво.

17

Re: AHK: Непростая задача с копипастом

Эдвард пишет:
teadrinker пишет:

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

Непонятно, как указывать путь к файлу через эту команду. Всяко пробовал – результата никакого (ни блокнот не открывается, ни какой-либо текст не появляется).

Подожди, а с чего ты решил, что при использовании команды FileRead должно что-то появляться или открываться? Там ведь ясно написано:

Считывает текст файла в переменную.

В дальнейшем эта переменная с текстом используется для разбора через Loop, Parse.
Путь к файлу указывается как обычно, внизу в статье есть пример.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

18

Re: AHK: Непростая задача с копипастом

Смысл команды FileRead - прочитать файл с носителя и поместить его содержимое в переменную. Что такое переменная - требуется объяснить?
Пример по ссылке дан:

FileRead, Contents, C:\Address List.txt

Здесь Contents - имя переменной.
Более внятно и доходчиво, чем teadrinker вряд ли кто-то разъяснит.

19

Re: AHK: Непростая задача с копипастом

teadrinker пишет:

Подожди, а с чего ты решил, что при использовании команды FileRead должно что-то появляться или открываться? Там ведь ясно написано:

Считывает текст файла в переменную.

Т. е. получается, что я как бы вслепую должен работать с программой? А как прослеживать процессы, ошибки – особенно чайнику? И в какой момент хоть что-нибудь где-нибудь проявится?

20

Re: AHK: Непростая задача с копипастом

ypppu пишет:

Что такое переменная - требуется объяснить?

Не помешало бы.

ypppu пишет:

Пример по ссылке дан:

FileRead, Contents, C:\Address List.txt

Здесь Contents - имя переменной.

Чем команда «FileRead, Contents» отличается от «FileRead, OutputVar»?

21

Re: AHK: Непростая задача с копипастом

Эдвард пишет:

Т. е. получается, что я как бы вслепую должен работать с программой? А как прослеживать процессы, ошибки – особенно чайнику?

За содержанием переменной можно следить через команду MsgBox:

FileRead, Contents, C:\Address List.txt
MsgBox, %Contents%
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

22

Re: AHK: Непростая задача с копипастом

teadrinker пишет:
MsgBox, %Contents%

Добавил - ничего не изменилось. А как функция слежки должна себя проявлять?

23

Re: AHK: Непростая задача с копипастом

Куда добавил-то? Весь код пиши! Наверное, добавил не туда!

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

24

Re: AHK: Непростая задача с копипастом

teadrinker пишет:

Куда добавил-то? Весь код пиши! Наверное, добавил не туда!

#z::FileRead, Contents, E:\1\2\39\4.txt
MsgBox, %Contents%

Пока одной командой ограничился. С «Loop, parse» тёмный лес – ничего непонятно.

25

Re: AHK: Непростая задача с копипастом

Если по горячей клавише нужно выполнить несколько команд, а не одну, они должны быть расположены так:

#z::
FileRead, Contents, E:\1\2\39\4.txt
MsgBox, %Contents%
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

26

Re: AHK: Непростая задача с копипастом

teadrinker пишет:

Если по горячей клавише нужно выполнить несколько команд, а не одну, они должны быть расположены так:

#z::
FileRead, Contents, E:\1\2\39\4.txt
MsgBox, %Contents%

Ура! Хоть что-то заработало. Сейчас надо будет ещё поколдовать с другими командами...

27

Re: AHK: Непростая задача с копипастом

Эдвард, у меня сложилось впечатление, что ты взялся за непосильную пока для тебя задачу. В частности, функция RegexReplace() достаточно сложна для понимания, даже не новичку сложно с ней разобраться. Советую для изучения AHK начать с чего-то попроще.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

28

Re: AHK: Непростая задача с копипастом

teadrinker пишет:

Эдвард, у меня сложилось впечатление, что ты взялся за непосильную пока для тебя задачу. В частности, функция RegexReplace() достаточно сложна для понимания, даже не новичку сложно с ней разобраться.

Многое проще было бы понять, если б перед глазами оказался не какой-то абстрактный пример, а готовый скрипт на основе моих же данных из пятого поста. А так, конечно, долго плутать можно. 

teadrinker пишет:

Советую для изучения AHK начать с чего-то попроще.

Слишком мало информации в Сети по теме, и по данной программе, в частности. К тому же, не хотелось бы далеко отходить от основной цели: автоматизации рутинных процессов при редактировании html.

29

Re: AHK: Непростая задача с копипастом

Эдвард пишет:

Слишком мало информации в Сети по теме, и по данной программе, в частности.

Это не так, информации вполне достаточно и на этом форуме, и на официальном.

Эдвард пишет:

Многое проще было бы понять, если б перед глазами оказался не какой-то абстрактный пример, а готовый скрипт на основе моих же данных из пятого поста.

Ну вот, пришли к тому, с чего начали. См. #8:

teadrinker пишет:

Если хочешь получить полное решение, тогда только платно, т. к. возникнут дополнительные вопросы, нужен личный контакт, потребует времени. Ко мне можно обратиться и по email dfiveg@mail.ru.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

30

Re: AHK: Непростая задача с копипастом

В общем, код пока выглядит так:

#z::
FileRead, Contents, E:\1\2\39\4.txt
MsgBox, %Contents%
Loop, parse, String, `n, `r
MsgBox, %A_Index% "2": %A_LoopField%
FileRead, Contents, E:\1\2\39\400.html
MsgBox, %Contents%
NewStr := RegExReplace("50", "title=") ; "50" - № строки html-кода, "title=" - тег, после которого должен вставляться скопированный со второй строчки блокнота текст
FileAppend E:\1\2\39\401.html

Но есть ощущение, что допущены ошибки в командах «Loop, parse» и «RegExReplace»

31

Re: AHK: Непростая задача с копипастом

Ощущение правильное, но это не просто ошибки, а непонимание того, как работают данные команды. Почитай хелп, поэкспериментируй с примерами, воспользуйся поиском по форуму по этим словам.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

32

Re: AHK: Непростая задача с копипастом

Немного переделал начальную часть скрипта:

#z::
FileRead, Contents, E:\1\2\39\4.txt
MsgBox, %Contents%
Loop, parse, String, `n, `r
   MsgBox, % A_Index "1: " A_LoopField
FileRead, Contents, E:\1\2\39\400.html
MsgBox, %Contents%

Правильно ли я понимаю, что строка № 1 текстового документа «4.txt» скопировалась в буфер обмена, и готова к вставке в документ «400.html»? Или нужно ещё прописать команду «String =» поверх «Loop, parse»? Если да, то что должно находиться после знака «=»?

33

Re: AHK: Непростая задача с копипастом

Кстати, по ходу изучения программы (и, в частности команд управления строками) возник вполне резонный вопрос: неужели в данной программе нельзя назначить простейшую команду – копирование определённой строки из документа (по номеру) в буфер обмена? Казалось бы, можно использовать «Loop (parse a string)», однако эта команда извлекает строки одну за другой, но мне, например, не надо извлекать все, а только одну конкретную.

34

Re: AHK: Непростая задача с копипастом

OFF:

Эдвард пишет:

неужели в данной программе нельзя назначить простейшую команду – копирование определённой строки из документа (по номеру) в буфер обмена?

Чтобы извлечь из текстового файла определённую строку по номеру — нужно предварительно прочитать все предыдущие. Никак иначе.

35

Re: AHK: Непростая задача с копипастом

Эдвард пишет:

неужели в данной программе нельзя назначить простейшую команду – копирование определённой строки из документа (по номеру) в буфер обмена?

Таки есть такая команда: FileReadLine, она копирует не в буфер обмена, а в переменную. Но ведь тебе нужна не одна строка, а все по очереди, как я понял. Loop, Parse для этого в самый раз.

Эдвард пишет:

Правильно ли я понимаю, что строка № 1 текстового документа «4.txt» скопировалась в буфер обмена, и готова к вставке в документ «400.html»? Или нужно ещё прописать команду «String =» поверх «Loop, parse»? Если да, то что должно находиться после знака «=»?

Нет, не правильно. Буфер обмена здесь совершенно не при чём. В переменной должен быть текст для разбора. Он в результате действия предыдущей команды находится в переменной Contents. Так зачем ты в Loop, Parse подставляешь String? Она пуста.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

36

Re: AHK: Непростая задача с копипастом

teadrinker пишет:

Так зачем ты в Loop, Parse подставляешь String? Она пуста.

Эта команда была в Вашем примере – потому и использовал в своём скрипте. Получается, достаточно в этой командной строке оставить лишь «Loop, parse», а все операции с текстами двух документов проводить уже в «RegExReplace»?

37

Re: AHK: Непростая задача с копипастом

Нет, получается, нужно почитать хэлп и посмотреть примеры.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

38

Re: AHK: Непростая задача с копипастом

teadrinker пишет:

Нет, получается, нужно почитать хэлп и посмотреть примеры.

Так до дыр уже зачитал, и примеры все перебрал, и подобные темы по поиску изучил. Всё равно ничего непонятно – вся информация явно не для чайников, т. к. написана на профессиональном языке, а не на доступном. Замечу, с таким странным подходом сталкиваюсь впервые – ранее с освоением множества других программ особых сложностей не было.

39

Re: AHK: Непростая задача с копипастом

Эдвард, у меня примерно была такая же ситуация, как у тебя.
Сам себя дураком не считаю, но нахрапом взять AHK не удалось.
Совет - не трать время и обратись к teadrinker напрямую.

40

Re: AHK: Непростая задача с копипастом

Эдвард пишет:

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

Не согласен, AHK как раз и создавалась, чтобы в ней мог разобраться человек, не имеющий опыта программирования.
Возможно, есть люди, склад ума которых просто не подходит для этого занятия.

Эдвард пишет:

Так до дыр уже зачитал, и примеры все перебрал, и подобные темы по поиску изучил.

Эдвард пишет:

Получается, достаточно в этой командной строке оставить лишь «Loop, parse»

И что, хоть в одном примере есть вариант, когда в строке лишь «Loop, parse» и больше ничего? Дальше должна идти переменная, в которой находится текст для разбора.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

41

Re: AHK: Непростая задача с копипастом

Malcev пишет:

Эдвард, у меня примерно была такая же ситуация, как у тебя.
Сам себя дураком не считаю, но нахрапом взять AHK не удалось.
Совет - не трать время и обратись к teadrinker напрямую.

Читал Ваши темы. Там довольно развёрнутые ответы даны. Правда, к моей задаче имеют лишь косвенное отношение.

42

Re: AHK: Непростая задача с копипастом

teadrinker пишет:

Возможно, есть люди, склад ума которых просто не подходит для этого занятия.

Не согласен

Если грамотно, развёрнуто и доступно объяснить азы, многое становится возможным.

teadrinker пишет:

Дальше должна идти переменная, в которой находится текст для разбора.

А какое имя у этой переменной должно быть?

43

Re: AHK: Непростая задача с копипастом

Malcev пишет:

Совет - не трать время и обратись к teadrinker напрямую.

Если цель — решить конкретную задачу и забыть — тогда это наилучший вариант. Если же научиться программированию на AHK, чтобы использовать эти знания для решения других задач — тогда нужно разбираться, и готовый вариант тут не поможет, нужно уметь действовать по аналогии.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

44

Re: AHK: Непростая задача с копипастом

Эдвард пишет:

А какое имя у этой переменной должно быть?

Именно то, в которую сохранён текст, в данном случае — Contents.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

45

Re: AHK: Непростая задача с копипастом

teadrinker пишет:

Именно то, в которую сохранён текст, в данном случае — Contents.

#z::
FileRead, Contents, E:\1\2\39\4.txt
MsgBox, %Contents%
Loop, parse, Contents, `n, `r
FileRead, Contents, E:\1\2\39\400.html
MsgBox, %Contents%
RegExReplace (операции со строками)

Верно?

46

Re: AHK: Непростая задача с копипастом

teadrinker пишет:

Если цель — решить конкретную задачу и забыть — тогда это наилучший вариант. Если же научиться программированию на AHK, чтобы использовать эти знания для решения других задач — тогда нужно разбираться, и готовый вариант тут не поможет, нужно уметь действовать по аналогии.

Моя цель:

teadrinker пишет:

решить конкретную задачу и

teadrinker пишет:

научиться программированию на AHK

т. к. придётся

teadrinker пишет:

использовать эти знания для решения других задач

47

Re: AHK: Непростая задача с копипастом

Эдвард пишет:

Верно?

Нет. Loop, parse, Contents, `n, `r — это цикл, в теле которого должны быть операции с возвращаемыми строками, т. е. в данном случае отправка их в нужное место html-файла.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

48

Re: AHK: Непростая задача с копипастом

Вот, что удалось сварганить на данный момент:

#z:: ; горячие клавиши
FileRead, Contents, E:\Мастерская\Сайт\39\4.txt ; команда считывания содержимого файла в переменную Contents, путь к файлу
MsgBox, %Contents% ; команда демонстрации содержимого переменной Contents
Loop, parse, Contents, `n, `r ; команда извлечения строк из переменной Contents и создание цикла
{
    MsgBox, % A_Index "-я строка: " A_LoopField ; команда демонстрации поочерёдного извлечения строк во встроенную переменную A_LoopField для разбора текста
Text = %A_LoopField% `n ; чтение содержимого переменной A_LoopField для передачи в изменяемый файл
FileAppend, %Text%, E:\Мастерская\Сайт\39\400.html ; вставка содержимого переменной Text в изменяемый файл
}

В результате данных операций все строки блокнота 4.txt скопировались в нижнюю часть содержимого файла 400.html. Основная цель, конечно, не достигнута, но, по крайней мере, обозначены какие-то ключевые точки, от которых можно отталкиваться в дальнейшем.

Продолжаю насиловать мозг. Ну и по-прежнему жду помощи от знатоков.

49

Re: AHK: Непростая задача с копипастом

Перед циклом должен быть считан не только текстовый, но и html-файл. В цикле каждую полученную строчку текстового файла нужно вставить в нужное место html-файла посредством RegExReplace. Так глядишь, и сам во всём потихонечку разберёшься!

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

50

Re: AHK: Непростая задача с копипастом

teadrinker пишет:

Перед циклом должен быть считан не только текстовый, но и html-файл. В цикле каждую полученную строчку текстового файла нужно вставить в нужное место html-файла посредством RegExReplace.

Я так понимаю, переменная для считываемого html-файла должна быть своя? Если да, то какое имя ей присвоить?

51

Re: AHK: Непростая задача с копипастом

Присвоить можно любое допустимое имя. В справке, правда, имена переменных зачем-то переведены на русский (!?!), лучше использовать латиницу.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

52 (изменено: Эдвард, 2011-06-23 10:40:20)

Re: AHK: Непростая задача с копипастом

Решил пока немного упростить задачу, применив скрипт лишь к одной строке:

#c::
FileReadLine, OutputVar, E:\Мастерская\Сайт\39\4.txt, 8
    MsgBox, %OutputVar%

FileReadLine, Haystack, E:\Мастерская\Сайт\39\400.html, 2
    MsgBox, %Haystack%

NewStr := RegExReplace(Haystack, ".", OutputVar)

File = E:\Мастерская\Сайт\39\400.html
Str = %NewStr%
Loop, Read, %File%
{
    If A_Index = 2
        Text .= Str . "`n"
    Text .= A_LoopReadLine . "`n"
}
FileDelete, %File%
FileAppend, %Text%, %File%
MsgBox, Готово.

Но столкнулся с проблемой шаблонов. Т. е. для моего случая, когда донорская блокнотная строка должна вставляться в html-строку между (!) определёнными символами (группами символов) (в данном случае, между title=" и " width), ничего подходящего не нашлось (в основном почему-то все шаблоны затёсаны на операции именно с заменяемым полем, а не его окружением).

И ещё небольшой глючок: в конце всей операции как бы исправленная строка встаёт не вместо второй строки html-файла, а добавляется между первой и второй. Видимо, прежде чем вставлять исправленную строку, надо сначала удалить старую, но такого скрипта пока не вычислил.

53

Re: AHK: Непростая задача с копипастом

Эдвард, чтобы получить ответ, нужно задать вопрос.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

54 (изменено: Эдвард, 2011-06-23 21:36:20)

Re: AHK: Непростая задача с копипастом

teadrinker пишет:

нужно задать вопрос.

Хорошо.

1. Какое выражение (шаблон) применить для замены строкой-донором подстроки между определёнными группами символов (например, [title="] и [" width)]? Если ещё точнее, какими символами заменить точку, заключённую в кавычки, в данной командной строке:

NewStr := RegExReplace(Haystack, ".", OutputVar)

?

2. Какой скрипт применить для полной замены одной строки в содержимом html-файла одной строкой из переменной?

55 (изменено: Эдвард, 2011-06-23 21:33:41)

Re: AHK: Непростая задача с копипастом

Заранее благодарю за ответ.

56

Re: AHK: Непростая задача с копипастом

1. В первой строке заменится значение title:

Newtitle = 1000 КБ

htmltext =
(
<tr>
   <td width=246 valign=top><p align=center style='text-align:center'><a href="http://www.e1.ru/fun/photo/view_pic.php/o/c5eecd1ed3b251440c7002b626da41c5/view.pic"><img src="4021.gif" title="897 КБ" width="226" height="151" border="0"></a></p></td>
   <td width=246 valign=top><p align=center style='text-align:center'><a href="http://www.e1.ru/fun/photo/view_pic.php/o/3697c6aa038b3c087400e798f416a1d7/view.pic"><img src="4022.gif" title="743 КБ" width="226" height="151" border="0"></a></p></td>
   <td width=246 valign=top><p align=center style='text-align:center'><a href="http://www.e1.ru/fun/photo/view_pic.php/o/8b8edb34ed5dd22feb613a0241314033/view.pic"><img src="4023.gif" title="793 КБ" width="226" height="151" border="0"></a></p></td>
   <td width=246 valign=top><p align=center style='text-align:center'><a href="http://www.e1.ru/fun/photo/view_pic.php/o/9c066944d037e72ca804b8c34b9123c5/view.pic"><img src="4024.gif" title="775 КБ" width="226" height="151" border="0"></a></p></td>
</tr>
)

Newhtmltext := RegExReplace(htmltext, "(title="").*?("" width)", "$1" Newtitle "$2", "", 1)
MsgBox, % Newhtmltext

2:

Replacement = Изменённая строка

String =
(
Первая строка
Вторая строка
Третья строка
Четвертая строка
)

; заменяем строчку "Третья строка"
Loop, parse, String, `n, `r
   NewString .= (A_LoopField = "Третья строка" ? Replacement : A_LoopField) . "`n"
   
; удаляем последний перенос строки, если существует:
NewString1 := RegExReplace(NewString1, "(.*)\R$", "$1")  
MsgBox, % NewString
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

57

Re: AHK: Непростая задача с копипастом

teadrinker пишет:

1. В первой строке заменится значение title

Спасибо! С этим понятно.

teadrinker пишет:

2

А вот здесь застопорился, т. к. в приведённом примере скрипта производятся операции с буквальными значениями, а в моём случае необходимо разбирать именно переменную (в которой весь html), назначая определённую строку для замены. Чисто теоретически код мог бы выглядеть вот так:

FileRead, InputVar, E:\Мастерская\Сайт\39\400.html ; чтение html-файла (запись в переменную InputVar)
Replacement = %NewStr% ; подставляемая строка
Loop, parse, InputVar, `n, `r ; разбор содержимого html-файла
If A_Index = 2 ; «если вторая строка»
   NewString .= (A_LoopField = "" ? Replacement : A_LoopField) . "`n" ; вставка новой строки вместо второй в содержимом html-файла
   NewString1 := RegExReplace(NewString1, "(.*)\R$", "$1") ; правка  
MsgBox, % NewString ; показ нового содержимого html-файла

Однако в данном случае с html-файлом ничего не происходит – он остаётся в прежнем виде.

Отсюда вопрос: что я делаю не так? Какие командные строки следует исправить?

58

Re: AHK: Непростая задача с копипастом

Следует как следует разобраться с Loop, parse на примерах, которых на форуме достаточно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

59

Re: AHK: Непростая задача с копипастом

teadrinker пишет:

Следует как следует разобраться с Loop, parse на примерах, которых на форуме достаточно.

Примеров по данной программе, к сожалению, крайне мало. Выуживать информацию приходится по крупицам. Мозги иногда просто закипают.

Вот полный скрипт однострочного копирования, который с горем пополам удалось вывести:

#c::
FileReadLine, OutputVar, E:\Мастерская\Сайт\39\4.txt, 1
    MsgBox, %OutputVar%
FileReadLine, Haystack, E:\Мастерская\Сайт\39\400.html, 89
    MsgBox, %Haystack%
NewStr := RegExReplace(Haystack, "(title="").*?("" width)", "$1" OutputVar "$2")
MsgBox, % NewStr

FileRead, InputVar, E:\Мастерская\Сайт\39\400.html
MsgBox, %InputVar%
Replacement = %NewStr%
Loop, parse, InputVar, `n, `r
   NewString .= (A_Index = 89 ? Replacement : A_LoopField) . "`n"
   NewString := RegExReplace(NewString, "(.*)\R$", "$1")  
MsgBox, % NewString
FileDelete, E:\Мастерская\Сайт\39\400.html
FileAppend, %NewString%, E:\Мастерская\Сайт\39\400.html

В отличие от примера с буквальными значениями, который приведён Вами выше, в данном случае вместо выражения [A_LoopField = "Третья строка"] применено [A_Index = 89]. Кроме того, пришлось задействовать команду FileDelete, чтобы содержимое html-файла не дублировалось. Такие, казалось бы, мелочи дались большим мыслительным трудом, тогда как небольшая подсказка могла значительно ускорить процесс познания.

60

Re: AHK: Непростая задача с копипастом

OFF: Эдвард, суть процесса познания, дающего в итоге бесценный опыт — в непрерывной череде совершаемых ошибок и откровений. Вообще, опыт — это не столько наше знание о том, как нужно делать, но, прежде всего, знание того, как (и почему) нельзя делать. Так что, не переживайте по этому поводу — это нормально.

P.S. У нас в разделе Коммьюнити была большая подборка на тему: «Чтобы получить правильный ответ — нужно правильно задать вопрос, чтобы правильно задать вопрос — нужно знать большую часть ответа». Жаль, удалили в процессе чистки.

61

Re: AHK: Непростая задача с копипастом

teadrinker пишет:

1. В первой строке заменится значение title:

Newtitle = 1000 КБ

htmltext =
(
<tr>
   <td width=246 valign=top><p align=center style='text-align:center'><a href="http://www.e1.ru/fun/photo/view_pic.php/o/c5eecd1ed3b251440c7002b626da41c5/view.pic"><img src="4021.gif" title="897 КБ" width="226" height="151" border="0"></a></p></td>
   <td width=246 valign=top><p align=center style='text-align:center'><a href="http://www.e1.ru/fun/photo/view_pic.php/o/3697c6aa038b3c087400e798f416a1d7/view.pic"><img src="4022.gif" title="743 КБ" width="226" height="151" border="0"></a></p></td>
   <td width=246 valign=top><p align=center style='text-align:center'><a href="http://www.e1.ru/fun/photo/view_pic.php/o/8b8edb34ed5dd22feb613a0241314033/view.pic"><img src="4023.gif" title="793 КБ" width="226" height="151" border="0"></a></p></td>
   <td width=246 valign=top><p align=center style='text-align:center'><a href="http://www.e1.ru/fun/photo/view_pic.php/o/9c066944d037e72ca804b8c34b9123c5/view.pic"><img src="4024.gif" title="775 КБ" width="226" height="151" border="0"></a></p></td>
</tr>
)

Newhtmltext := RegExReplace(htmltext, "(title="").*?("" width)", "$1" Newtitle "$2", "", 1)
MsgBox, % Newhtmltext

Столкнулся с такой проблемой: при активации скрипта вставки строки в тег [<span class="style3">Текст</span>] всякий раз возникает ошибка, указывающая именно на данную командную строку. Применяю код, который дан в примере:

NewStr := RegExReplace(Haystack, "(<span class="style3">").*?("</span>)", "$1" OutputVar "$2", "", 1)

Что делаю не так? И как исправить ошибку?

62

Re: AHK: Непростая задача с копипастом

Эдвард пишет:

Столкнулся с такой проблемой: при активации скрипта вставки строки в тег [<span class="style3">Текст</span>] всякий раз возникает ошибка, указывающая именно на данную командную строку. Применяю код, который дан в примере:

NewStr := RegExReplace(Haystack, "(<span class="style3">").*?("</span>)", "$1" OutputVar "$2", "", 1)

Что делаю не так? И как исправить ошибку?

Виноват – балбес! Только сейчас вспомнил, что буквальные кавычки должны заключаться в ещё одни кавычки. Код поправил, всё заработало:

NewStr := RegExReplace(Haystack, "(<span class=""style3"">).*?(</span>)", "$1" OutputVar "$2", "", 1)

63

Re: AHK: Непростая задача с копипастом

Ну вот, уже чувствуется рост!

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

64

Re: AHK: Непростая задача с копипастом

Здравствуйте. Пытаюсь научиться построчно копировать часть строк в нужные строки. В примере нужно выделить name1 в переменную rel и http:\\123 в переменную url из 1й строки srt1, затем в str2 найти строку, которая содержит name1, и определить ее позицию, после которой искать url=
FoundPos находит 32 позицию, перед name2, а не перед name1, думаю, это потому что в переменную rel копируется значение name2 из второй (последней) строки. Казалось, что строки будут обрабатываться по порядку.


str1 =
(
name1 http:\\123
name2 http:\\456
)
str2 =
(
1234 name1 (1234)
url=555
5678 name2 (4321)
url=999
)
Loop, 1
{
	Loop, parse, str1, `n, `r
		{
		rel := regexreplace(A_LoopField, "`am)(.*) http.*", "$1")
		}
	Loop, parse, str1, `n, `r
		{
		url := regexreplace(A_LoopField, "`am).* (http.*)", "$1")
		}
	FoundPos := InStr(str2, rel)
	str2 := RegExReplace(str2, "url=", "url="url, 1, FoundPos)
	MsgBox % str2
}

65

Re: AHK: Непростая задача с копипастом

viviancels, не надо поднимать старые темы, создавайте свои.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder