Помогите написать скрипт

Russian main discussion
  • Author
  • Message
Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

AkelPad с плагином LineBoard подсвечивает цветом сохранённые и несохранённые строки, возможно ли написать скрипт, чтобы по ним можно было перемещаться? Типа Перейти к следующей несохранённой строке, предыдущей и по сохранённым. Вполне достаточно перехода в начало строки. Отменить/Повторить не очень удобно.

Offline
Posts: 4
Joined: Sun Mar 15, 2015 8:16 pm

Post by aleksey.k »

Lenchik
Навряд ли это может пригодиться для широкой аудитории.
Мне это нужно для индексации больших массивов текста, быстрый переход к нужному отрывку. По такому же принципу работают некоторые словари. Этот скрипт на самом деле весьма облегчил мне жизнь, за что я очень благодарен. :D

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

Господа, а помогите написать скрипт, который бы заменил мне команду

Code: Select all

Insert('"\s: \[0027]" \s "\[0027]`n" ', 1)
Эта команда изменяет выделенный текст так, что он обрамляется разного рода кавычками и т.п.

variableName превращается в

Code: Select all

"variableName: '" variableName "'`n" 
Это мне нужно для отладки моих ahk скриптов, чтобы проверять содержимое переменных.
Для проверки переменных используется команда OutputDebug.
Соответственно, надо чтобы скрипт превращал выделенное слово не только в обрамлённое кавычками это же слово, но ещё и дописывал бы в начало строки имя команды (+ пару символов).
Если я просто допишу вставку слова OutputDebug в команду выше, то это слово будет вставляться каждый раз, соответственно если я в одной строке (в одной команде outputdebug) захочу вывести содержимое нескольких переменных, то каждая из них будет обрамлена не только запятыми, но и именем команды.
А надо, чтобы в строке имя команды OutputDebug встречалось только 1 раз, т.е. нужен скрипт который бы делал проверку на присутствие в строке OutputDebug в начале строки (по regex).

Code: Select all

variableName
при выделении слова variableName и срабатывании скрипта должно превратиться в

Code: Select all

OutputDebug, % "variableName: '" variableName "'`n" 
а при выделении слова anotherVar и срабатывании скрипта в строке

Code: Select all

OutputDebug, % "variableName: '" variableName "'`n" anotherVar
строка должна превратиться в

Code: Select all

OutputDebug, % "variableName: '" variableName "'`n" "anotherVar: '" anotherVar "'`n" 
перед OutputDebug в строке может присутствовать любое кол-во пробельных символов (т.е. \s*+).

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Drugmix
По моему, то как Вы описали задачу, напрашивается простое решение:
- если в строке нет "OutputDebug", значить вар-1;
- если нет - вар-2.
Верно?

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

VladSh
Верно. Я вот не смог осилить проверку содержимого строки по regex
i)^\s*+OutputDebug\s*+,\s*+%\s*+

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Drugmix
Зачем регэксп?

Code: Select all

// получаем выделенный текст:
//    ...
// получаем строку целиком:
//    str = ...

if (str.indexOf('OutputDebug') == -1)
	// делаем одно (вар-1)
else
	// делаем другое (вар-2)

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

VladSh
чего-то я не нашёл, что за indexOf такой...

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

Drugmix
Поиск подстроки
Ещё один учебник из закладок http://javascript.ru/String/indexOf

Offline
Posts: 6
Joined: Thu Apr 09, 2015 10:37 am

Post by Dimon485 »

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

Code: Select all

Переведено на Нотабеноиде
http://notabenoid.org/book/***

Переводчики: ***

или

Code: Select all

Внимание! Этот перевод, возможно, ещё не готов.
Его статус: ***

Переведено на Нотабеноиде
http://notabenoid.org/book/***

Переводчики: ***

где на месте звездочек переменный текст.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Dimon485
Приведите пример исходника и желаемого результата.

Offline
Posts: 6
Joined: Thu Apr 09, 2015 10:37 am

Post by Dimon485 »

Instructor wrote:Приведите пример исходника и желаемого результата.
Вот:
https://yadi.sk/d/hNe9Cwk7ftAtQ
Внутри две папки "было" и "стало" соответственно.
В принципе, скрипт DelEmptyLines убирает пустые строки, надо лишь к нему добавить удаление нотабеноидских хвостовиков.

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

Dimon485
Можно по аналогии вот с этим

Code: Select all

AkelPad.SetSel(0, -1);
AkelPad.ReplaceSel(notabenoid(AkelPad.GetSelText())); 

function notabenoid(str) { 
   step1 = str.split('Внимание! Этот перевод, возможно, ещё не готов.');   // режем хвост
   step2 = step1[0].split('Переведено на Нотабеноиде');   // т.к. первой фразы может и не быть
   return step2[0].split(/\r{2,}/).join("\n");
}

Offline
Posts: 6
Joined: Thu Apr 09, 2015 10:37 am

Post by Dimon485 »

opk44 wrote:

Code: Select all

AkelPad.SetSel(0, -1);
AkelPad.ReplaceSel(notabenoid(AkelPad.GetSelText())); 

function notabenoid(str) { 
   step1 = str.split('Внимание! Этот перевод, возможно, ещё не готов.');   // режем хвост
   step2 = step1[0].split('Переведено на Нотабеноиде');   // т.к. первой фразы может и не быть
   return step2[0].split(/\r{2,}/).join("\n");
}
Вставил код перед DelEmptyLines, назначил горячую кнопку - все работает как часы! Спасибо огромное!

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

Dimon485 wrote:Вставил код перед DelEmptyLines...
Вообще-то код был самодостаточным, т.е. DelEmptyLines в вашем случае можно и не использовать.

Offline
Posts: 6
Joined: Thu Apr 09, 2015 10:37 am

Post by Dimon485 »

opk44 wrote:Вообще-то код был самодостаточным, т.е. DelEmptyLines в вашем случае можно и не использовать.
Не совсем так. Ваш алгоритм не удаляет пустую строку в конце файла. Если две, то удаляет обе, а если одна, то оставляет. А вместе с DelEmptyLines - нет проблем ;)
Post Reply