Format plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Infocatcher
:) видимо изначально было "Расшифровывание", "Зашифровывание".

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

Post by Andrey_A_A »

Чего бы хотелось видеть ещё в плагине:
1. Сортировка текста по Длине строк
(по убыванию\возрастанию)
(алфавитный порядок прямой\обратный)
-------------------------------
Выделение строк N длины
Получение строк N длины
Удаление строк N длины

2. Сортировка текста по Кодам символов (по убыванию\возрастанию)

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

Andrey_A_A
хотя бы одно применение, которое пригодится не только тебе - ?

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Fr0sT, да ладно. Большинство фич-реквестов были нужны кому-то одному.

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

Post by opk44 »

Andrey_A_A wrote:Чего бы хотелось видеть ещё в плагине:
1. Сортировка текста по Длине строк ...
Какой-то странный "букет" сортировок предложен, но по ассоциации подумалось, что неплохо было бы добавить воможность задавать в виде параметра позицию начального символа при сортировке. Идея "пропускать N первых символов при сортировке" не новая. Еще во времена DOS в редакторе MultiEdit была такая возможность. Применялось при/для сортировки таблиц по заданной колонке (позиции каретки). Например, была приходно-расходная ведомость ТМЦ сформированная по алфавиту или по артикулам. Можно было найти всю номенклатуру "дороже цены ИКС" отсортировав ведомость по колонке с ценой (все колонки в ведомости были фиксированной ширины).

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

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

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

Post by Andrey_A_A »

Да действительно эта функция не на каждый день (сортировка по Длинне строки). Но есть ряд больших списков, которые именно так и отсортированы.. переиодически приходится в них добавлять новые строки... и вновь отсортировывать. Вначале я использовал текст редактор Hieroglyph (в котором есть расширенный функционал по сортировки строк- всё в одном). Кстати был бы такой в AkelPad - цены б ему не было. Потом я нашел утилиту с поддержкой командной строки с параметрами сортировки TextDuplicateKiller - который сейчал и использую. Оба варианта не поддерживают кроме сортировки по длине (убыв.\возраст.), ещё и алфавитный(прямой\обратный) Пример
Можно отсортировать
aa
ab
aaa
aab
aaaa
aaab
...
а можно:
ab
aa
aab
aaa
aaab
aaaa

а так как супер редактор AkelPad стал родным, я и хотел попросить у Гуру о такой возможности иметь такой функционал в AkelPade. Спасибо за понимание

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

FeyFre, и большинство из этого большинства отправились в /dev/null ;)
Andrey_A_A
кажется, я видел нечто похожее в коллекции скриптов, поройся там

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

Post by Andrey_A_A »

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

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

FeyFre, и большинство из этого большинства отправились в /dev/null
А меньшинство из большинства родили плагины SpellCheck и Speech, ну и ещё Templates.
Ах да, вон KDJ клепает скрипты как на конвейере, хотя фич-реквестов на них не было(а значит они так или иначе сначала нужны были только ему). И как бы /dev/null тут ни при чем.

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

FeyFre, собственно, это очевидно - если что-то нужно только тебе, то do it yourself. Хотя к плагинам это не относится :)

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

К плагинам это относится точно так же как и к скриптам макросам и прочему. Негоже изза потребности забить гвоздь каждый раз за соседом плотником бегать(если Вы конечно замуж за него не собрались), а лучше самому научиться забивать гвозди. :D

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

Post by opk44 »

Andrey_A_A wrote:В скриптах я роюсь уже три недели. Почти все разобрал...
1) Похвально. Но разве при таком-то количестве свободного времени, не имеет смысл написать свои скрипты, а не искать чужие?
2) Скорее всего, идеально подходящего и универсального решения сразу сделать не получится, поэтому предлагаю Вам реализовывать задачу отдельными фрагментами. Тогда сгодятся даже не очень красивые, но зато очень простые решения. Допустим, по первой части запроса, можно на основе исходного файла списка создавать новый файл, в котором каждая строка будет начинаться числом, равным длине этой строки. Полученный файл отсортировать затем а AkelPad-e стандартным образом (by integer). После сортировки и обработки (например, нахождения всех строк с нужными длинами и их удаления) останется удалить левую колонку с цифрами у всех оставшихся строк.

Вот примерный текст скрипта:

Code: Select all

var ForReading = 1, ForWriting = 2, ForAppending = 8;
// директория, имя и расширение исходного (_IN) и выходного (_OUT) файлов
var DIR_NAME		= 'D:\\WORK\\';
var FILE_NAME_IN		= 'INS_FIZ_1011';
var FILE_EXTENSION_IN		= '.sql';
var FILE_NAME_OUT		= 'INS_FIZ_1011_NUM';
var FILE_EXTENSION_OUT		= '.txt';

var TXT = '';
var TXT_SIZE = 0;
// открытие исходного файла на чтение
	var fso_in = new ActiveXObject("Scripting.FileSystemObject");
	var TXT_IN = DIR_NAME + FILE_NAME_IN + FILE_EXTENSION_IN;
	var file_in = fso_in.OpenTextFile(TXT_IN,ForReading,false);

// открытие производного файла на добавление
	var fso_out = new ActiveXObject("Scripting.FileSystemObject");
	var TXT_OUT = DIR_NAME + FILE_NAME_OUT + FILE_EXTENSION_OUT;
	var file_out = fso_out.OpenTextFile(TXT_OUT,ForAppending,true);

// построчно читаем входной файл, считаем длину строки, 
// дописываем в выходной файл (дополнительно вставляется символ табуляции).
while (!file_in.atEndOfStream)
{
	TXT = file_in.ReadLine();
	TXT_SIZE = TXT.length;	// получить длину строки
	file_out.WriteLine(TXT_SIZE + '\t' + TXT);
}
	file_in.Close();
	file_out.Close();


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

Надеюсь, понятно, что задача "удаление/получение строк N длины" получается на основе данного подхода почти автоматически? Достаточно в цикле вставить проверку значения TXT_SIZE и игнорировать запись лишних в выходной файл или наоборот, вписывать только нужные:

Code: Select all

	...
	if (TXT_SIZE = N) 
	{
		file_out.WriteLine(TXT);
	}
(если сортировка остальных строк не потребуется, то тут можно и не вписывать длины строк).

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

Post by Andrey_A_A »

Спасибо за расширенный ответ. Скрипты я разбирал в плане полезности для себя и работоспособности для вставки в меню. Сам скрипты я начал писать недавно на vbs и au3 для организации файловой системы в тотале. В алелпаде большинство написано на js, а к нему привыкнуть и понять надо. Но всё равно спасибо. Идеи понятны, будем реализовывать...

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Andrey_A_A
vbs акел тоже понимает, как и любой другой язык, который понятен для Windows Scripting Host
Post Reply