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

Russian main discussion
Post Reply
  • Author
  • Message
Offline
Posts: 47
Joined: Wed Aug 17, 2011 7:12 pm
Contact:

Post by ermakoov »

Подскажите пожалуйста скрипт на js - найти вверх от текущего положения курсора ближайшую последовательность двух знаков - табулятор, конец строки. Заранее благодарен.

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

Post by VladSh »

ermakoov wrote:... скрипт на js - найти вверх от текущего положения курсора ближайшую последовательность двух знаков - табулятор, конец строки.
Есть скриптец BlockSelect.js, если пройти по функциям, то можно добраться.. Но чтобы не париться, для своих скриптов можно использовать функционал объекта oCh, примеров в скриптах масса.

Offline
Posts: 47
Joined: Wed Aug 17, 2011 7:12 pm
Contact:

Post by ermakoov »

Влад, спасибо! Но напоминаю, что я эксклюзивный чайник. Более того, упрямый до безобразия - не хочу изучать программирование, дабы осталось время на девочек и звёзды. Твой пассаж (ответ) для меня тёмный лес :)

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

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

Post by VladSh »

ermakoov
девочек - это хорошо! :)

Code: Select all

var sTagOpen = "\t";			//сюда вписать искомый текст (сейчас указан "табулятор"); табулятор и конец строки будет выглядеть так: "\t\r"

var iCursor = AkelPad.GetSelStart();			//текущее положение курсора, от него и начинаем искать вверх

var pContent = AkelPad.GetTextRange(0, -1);			//берём весь текст документа
var iTagOpenStart = pContent.lastIndexOf(sTagOpen, iCursor);					//ищем вверх индекс первого найденного тэга

var iTagOpenEnd = iTagOpenStart + sTagOpen.length;			//индекс окончания искомого тега: <индекс начала> + <длина тэга>

AkelPad.SetSel(iTagOpenStart, iTagOpenEnd);			//выделяем найденный текст для наглядности

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

звёзды - это хорошо! :D
а скрипт SearchReplace.js не подойдёт?

Найти \t\n
Esc-последовательности
Вверх

Offline
Posts: 47
Joined: Wed Aug 17, 2011 7:12 pm
Contact:

Post by ermakoov »

VladSh
Кажется, это то, что мне надо - сейчас буду испытывать.

Offline
Posts: 47
Joined: Wed Aug 17, 2011 7:12 pm
Contact:

Post by ermakoov »

Andrey_A_A
Андрюха, а тебя чуть не понял. Сам скрипт "сёчриплейс", конечно, подойдет. То есть - поменять это на то же самое - мне и нужно просто переместить курсор в то неизвестное место, где табулятор и конец строки. Но там же в скрипте много лишнего кода. Мне же нужно автоматом, без открытия вручную окна замены. То есть нужен какой-то коротенький код, как я понимаю. А код ты и не приводишь :(

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

Post by VladSh »

ermakoov wrote:нужно просто переместить курсор в то неизвестное место, где табулятор и конец строки.
Мне же нужно автоматом, без открытия вручную окна замены.
Если нужно не выделение, а простая переброска курсора, то последнюю строку надо заменить на

Code: Select all

AkelPad.SetSel(iTagOpenStart, iTagOpenStart);  //переход к началу искомого текста

Offline
Posts: 47
Joined: Wed Aug 17, 2011 7:12 pm
Contact:

Post by ermakoov »

VladSh
Влад, спасибо! Твой код проверил - всё работает, как надо. То я спрашивал Андрея на счёт скрипта "сёчриплейс". Там я не понял, как надо воспользоваться его советом - поэтому и задал ему допвопрос.

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

поэтому и задал ему допвопрос
ermakoov
SearchReplace.js я имел ввиду для внешнего вызова, где вводишь необходимое - а потом прочитал что нужно без внешнего вызова.

А теперь по делу.
VladSh
Можно сделать это гораздо проще. Есть функция

Code: Select all

TextFind(hHandle, pFindIt, nFlags)
только я не смог добиться поиска с Esc-последовательностями
простой поиск работает - допустим мы ищем русскую букву "а",
то на vbs будет одна строка

Code: Select all

Call AkelPad.TextFind(0, "а", 00200001)
на js и co скриптом EvalCmd.js будет кнопка

Code: Select all

-"Поиск буквы а (руской)" Call("Scripts::Main", 1, "EvalCmd.js", `'AkelPad.TextFind(0, "а", 00200001);'`) Icon(0)
по описанию в Scripts-Rus.txt с Esc-последовательностями - 0x00800000 //FR_ESCAPESEQ

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

Code: Select all

Call AkelPad.TextFind(0, "\t\n", 00900000)
и

Code: Select all

-"Поиск буквы а (руской)" Call("Scripts::Main", 1, "EvalCmd.js", `'AkelPad.TextFind(0, "\t\n", 00900000);'`) Icon(0)
но это не работает...

пошёл по другому пути, это работает только вниз

Code: Select all

Call AkelPad.TextFind(0, Chr(9) & Chr(13), 00200001)
вверх также не смог подобрать нужные цифры вместо 00200001

может Instructor что подскажет

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

Post by opk44 »

Andrey_A_A wrote:...вверх также не смог подобрать нужные цифры вместо 00200001...
...малость потестировал.
Вот так не работает:

Code: Select all

Call("Scripts::Main", 1, "EvalCmd.js", `'AkelPad.TextFind(0, "\t\n", 0x00900000);'`) Icon(0)
Зато вот так работает:

Code: Select all

Call("Scripts::Main", 1, "EvalCmd.js", `'AkelPad.TextFind(0, "\t\r", 0x00900000);'`) Icon(0)
Вывод: замените в вызове "\n" на "\r".

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

Post by VladSh »

Andrey_A_A, opk44
Пользование UI-фишками - плохой стиль, апотому делал по привычке. Но здесь, для переброски курсора (а это и есть UI-фишка), можно и так.

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

VladSh
Пользование UI-фишками - плохой стиль
Что есть UI-фишки? поподробнее, не понял... на будущее ...

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

Post by VladSh »

Andrey_A_A
UI - user interface.
В прогах обычно) есть код, работающий в формах, диалогах и т.п., а есть бэкграундный функционал, т.е. тот, который работает независимо от UI.
Так вот лучше всего, чтобы в бэкграундный был выделен код по максимуму, тогда при изменении форм и т.п. много переписывать не придётся.
Одна из болезней - смешивание UI и BE функционала. Болезнь^2 - это ещё и смешивание кода с данными.

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

VladSh
Если честно я многое не понял о чём ты написал. Не в укор тебе и многим, кто тебя понял. Я не программист, учусь на примерах. Для меня, и других юзеров, есть одно понятие - работает или нет. Зачем же самим создавать такие примеры, которые ведут к тому, что ты описал, если бы не скрипт EvalCmd.js мне бы в голову не пришло "обрезать углы" . До сих пор не знаю что такое UI и BE , единственное, просьба, дать ссылку на прочитку, что такое хорошо и что такое плохо
Post Reply