1

Тема: AHK: Изменение текста в файле

Допустим, для примера, взят и изменён текст из документации. В него, с помощью скрипта, нужно внести пять изменений:

Каждый создаваемый скрипт придставляет собой текстовый, содержащий команды, которые потом будет выполнять наша программа - AutoHotkey.exe. Помимо собственно инструкций, в скрипте прописываются сочетания клавиш {т.н. "горячие клавиши"}, которые и будут запускать эти самые команды. Команды, прописанные в скриптах, выполняются по направлению сверху вниз - начиная от самой верхней строчки и далее вниз.


Чтобы он стал правильным:

Каждый скрипт представляет собой текстовый файл, содержащий команды, которые потом будет выполнять наша программа - AutoHotkey.exe. Помимо собственно команд, в скрипте прописываются сочетания клавиш (т.н. "горячие клавиши"), которые и будут запускать эти самые команды. Команды, прописанные в скриптах, выполняются по направлению сверху вниз - начиная от самой верхней строчки и далее вниз.


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


Надеюсь, не очень сложно.

Спасибо!

2 (изменено: shiz, 2015-07-24 18:59:36)

Re: AHK: Изменение текста в файле

Коллега, не мучайтесь, исправьте этот текст вручную.

Надеюсь, не очень сложно.

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

Забыл пароль и потерял e-mail.

3

Re: AHK: Изменение текста в файле

shiz пишет:

Коллега, не мучайтесь, исправьте этот текст вручную.

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

shiz пишет:

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

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

4 (изменено: shiz, 2015-07-24 20:23:40)

Re: AHK: Изменение текста в файле

Могли бы хотя бы просто не портить тему с поиском ответа по тематике форума.

Тема изначально испорчена невразумительно заданным вопросом (у кого-то удивительный талант). Она о работе с файлами? Или может о проверке синтаксиса и орфографии или вообще из области искусственного интелекта?

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

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

Коллега, вы о чём?

Забыл пароль и потерял e-mail.

5

Re: AHK: Изменение текста в файле

Изменение текста с помощью GUI

6

Re: AHK: Изменение текста в файле

shiz пишет:

Коллега, вы о чём?

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

shiz пишет:

Тема изначально испорчена невразумительно заданным вопросом (у кого-то удивительный талант). Она о работе с файлами? Или может о проверке синтаксиса и орфографии или вообще из области искусственного интелекта?

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

shiz пишет:

Что должен делать запрашиваемый скрипт: из любого текста удалять второе слово и менять фигурные скобки на круглые?

Именно так. Этот текст просто более конкретен, ну и актуален. По аналогии с этими примерами можно будет решать другие подобные задачи.

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

7 (изменено: shiz, 2015-07-25 15:38:10)

Re: AHK: Изменение текста в файле

Ну ждите ответа на "изящно сформулированную проблему", если избегаете наводящих вопросов. Может, найдётся телепат.
Думаю, в школе вам хорошо удавались гуманитарные предметы .

Забыл пароль и потерял e-mail.

8

Re: AHK: Изменение текста в файле

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

http://www.script-coding.com/AutoHotkey/RegExMatch.html

9 (изменено: mouse25, 2015-07-24 22:14:58)

Re: AHK: Изменение текста в файле

shiz пишет:

Ну ждите ответа на "изящно сформулированную проблему"

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

shiz пишет:

Может, найдётся телепат.

Мне и ваших сеансов спиритизма уже хватило, ещё одного такого "телепата" не надо.

10

Re: AHK: Изменение текста в файле

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

11 (изменено: Malcev, 2015-07-24 22:29:35)

Re: AHK: Изменение текста в файле

text := "Каждый создаваемый скрипт придставляет собой текстовый, содержащий команды, которые потом будет выполнять наша программа - AutoHotkey.exe. "

RegExMatch(text, "(.+?\s+).+?\s+(.+?\s+..).(.+?)(,.+)", match)
msgbox % match1 match2 "е" match3 " файл" match4

12 (изменено: mouse25, 2015-07-24 23:06:34)

Re: AHK: Изменение текста в файле

Спасибо. Необходимо только чтобы скрипт менял файл с этим отрывком текста, то есть без сообщения msgbox, допустим, файл every key.ahk
Это реализуемо?

13

Re: AHK: Изменение текста в файле

FileRead
FileDelete
FileAppend

14 (изменено: mouse25, 2015-07-24 23:41:08)

Re: AHK: Изменение текста в файле

Значит FileRead.
Я так понимаю, текст всего файла - если в нем будет что-то ещё, то загружать и перезаписывать придется все, загрузиться в Clipboard, а чем с ним там работать?

Жаль с RegExMatch это выполнить не получается, доступнее и нагляднее выглядит.

15

Re: AHK: Изменение текста в файле

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

16

Re: AHK: Изменение текста в файле

mouse25 пишет:

Но там, бегло вижу, ищутся соответствия с текстом, а мне нужен тонкий инструмент работы с текстом,

Нельзя ли из всех этих +.?\|^ собрать набор команд, чтобы они работали по принципу обычного перемещения по тексту - вторая строка вниз, десять символов вправо итд? С тем что там есть, оказывается, невозможно работать.

17 (изменено: shiz, 2015-07-25 15:54:20)

Re: AHK: Изменение текста в файле

А вот и я с похвальным постоянством опять спешу протянуть руку помощи!

mouse25 пишет:

а мне нужен тонкий инструмент работы с текстом

Вообще-то, регулярные выражения — и есть тонкий инструмент (нет, не для работы с файлами, а именно для обработки текста).

mouse25 пишет:

Нельзя ли из всех этих +.?\|^ собрать набор команд, чтобы они работали по принципу обычного перемещения по тексту - вторая строка вниз, десять символов вправо итд?

Спускаемься с заоблачных высот на землю, коллега? И вопросы становятся осмысленнее — именно по теме о работе с файлами (даже регулярные выражения — это уже другой вопрос — об обработке текста после прочтения или перед записью в файл).

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

1) класcическая построчная обработка файла в цикле Loop Read (для сформулированной выше задачи, вероятно, не очень удобна);
2) команда FileRead для считывания всего файла в переменную — вероятно, вам уже знакома; тут, вероятно, не помешают регулярные выражения для дальнейшей обработки…
3) тоже, вероятно, вам знакомая команда FileAppend для дозаписи в файл;
4) FileReadLine — получение строки из файла по её номеру;
5) современный подход при помощи файлового объекта — советую ознакомиться!
6) близкий к предыдущему подход с помощью COM-объекта "Scripting.FileSystemObject" — всё в точности как в WSH (а может, вам и не нужен AutoHotkey и вы решите свою задачу на JScript/VBScript?).
(Есть ещё команды для работы с INI-файлами…)

Забыл пароль и потерял e-mail.

18

Re: AHK: Изменение текста в файле

С тем что там есть, оказывается, невозможно работать.

Можно функции свои понаписать:

text = 
(
1_слово 2_слово 3_слово 4_слово 5_слово 6_слово 7_слово
1_слово 2_слово 3_слово 4_слово 5_слово 6_слово
1_слово 2_слово 3_слово 4_слово 5_слово
)

msgbox % ReplaceWord(text, 3, 2, "test")

ReplaceWord(text, line, word, replacement)
{
   RegExMatch(text, "^((?:.+?\R){" line-1 "})((?:[^\r\n]+? +){" word-1 "}).+?(?:(\s+.+)|$)", match)
   if match
      result := match1 match2 replacement match3
   else
      result := "error"
   return result
}