[Req] WDX для отображения 1-й строки файла

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: Моторокер, Avada, CaptainFlint, Nik, d-view

Skif_off
Сообщения: 1260
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

ProgMan13
Спасибо, надо было сразу репортить :)
Skif_off
Сообщения: 1260
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

ProgMan13
Только сейчас вспомнил, что не проверил

Код: Выделить всё

[HintsCustomField]
0exts=*.txt;*.ini;*.inf
0fields=[=textline.1]\n[=textline.2]\n[=textline.3]\n[=textline.4]\n[=textline.5]\n[=textline.6]\n[=textline.7]\n[=textline.8]\n[=textline.9]\n[=textline.10]
таки упало:
х86

Код: Выделить всё

  Имя события проблемы:	APPCRASH
  Имя приложения:	TOTALCMD.EXE
  Версия приложения:	8.5.1.1
  Отметка времени приложения:	2a425e19
  Имя модуля с ошибкой:	TOTALCMD.EXE
  Версия модуля с ошибкой:	8.5.1.1
  Отметка времени модуля с ошибкой:	2a425e19
  Код исключения:	c0000005
  Смещение исключения:	00001c10
  Версия ОС:	6.1.7601.2.1.0.256.48
  Код языка:	1049
  Дополнительные сведения 1:	f808
  Дополнительные сведения 2:	f80848a68588a5910da39d482cd0246c
  Дополнительные сведения 3:	9015
  Дополнительные сведения 4:	90152e151883825ea6413858bc39daed
или

Код: Выделить всё

---------------------------
Total Commander 8.51a
---------------------------
Access violation at address 00401E7B. Write of address 200E0032.
Access violation at address 00401E7B. Write of address 200E0032
Windows 7 SP1 6.1 (Build 7601)

Please report this error to the Author, with a description
of what you were doing when this error occurred!

Windows exception: C0000005
Stack trace:
00401E7B
401C97  4026B8  58073B  446589  4484F6  >42590C
447A9B  42590C  42AFC8  42B064  7056AB  
Raw:
401E61  4023C7  401C97  401EBD  402363  4026B8
6C5D76  447A9B  630063  690072  690072  690072
690072  46006A  61002C  6FB72C  448852  446589
4487C5  43785A  447AEE  447B66  4484F6  448519
42590C  580299  402E4A  446589  4487C5  448813
4275E8  42590C  447A9B  42590C  690072  690072
690072  690072  46006A  447A09  42590C  4489CE
44886F  446589  4487C5  4484F6  43785A  447AEE
447B66  4484F6  448519  42590C  447A9B  42590C
4023EF  4026B8  4036C1  63AAF4  4487C5  43785A

Press Ctrl+C to copy this report!
Continue execution?
х64

Код: Выделить всё

---------------------------
Total Commander 8.51a
---------------------------
Access violation.
Access violation
Windows 7 SP1 6.1 (Build 7601)

Please report this error to the Author, with a description
of what you were doing when this error occurred!

Stack trace (x64):413F54
414133 412C7E 41D4C1 468C4E 6AE8A9 7E0CF7 431F15 7E5682
7E3C77 7E3AF8 7D3479 7DE8FF 7D3B20 814B6D 8D7E72 76F99BD1

Press Ctrl+C to copy this report!
Continue execution?
Для воспроизведения нужно раз навести на выложенный файл, увести курсор на другой и снова вернуться (х86 падает быстрее).

С обрезанием строк всё работает нормально вроде.
ProgMan13
Сообщения: 341
Зарегистрирован: Ср авг 19, 2009 16:07

Сообщение ProgMan13 »

Skif_off
TC падает если количество символов в подсказке в районе 3000. Плагин для одной строки возвращает максимально 1021 символ. Так что правильно их ограничивать для подсказок.
ProgMan13
Сообщения: 341
Зарегистрирован: Ср авг 19, 2009 16:07

Сообщение ProgMan13 »

Гислер подтвердил баг в TC с длинными подсказками и пообещал исправить.
Проблема в принудительном разбиении строк (CRLF): их 25 и под них резервируется 50 байт, а должно 50 юникодных символов, т.е. 100 байт. Авторы плагинов могут принудительно вставлять разрыв строк, чтобы избежать этих проблем. Правда, как я понимаю, придётся высчитывать кол-во символов. Я разбираться с этим не стал.

Добавил только пропуск пустых строк:
http://progman13.totalcmd.net/downloads ... e_Beta.zip
Skif_off
Сообщения: 1260
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Ни у кого случайно не осталась предыдущая версия, в которой ещё не работает опция SkipEmpty=1?

Добавлено спустя 3 минуты:
ProgMan13 писал(а):Авторы плагинов могут принудительно вставлять разрыв строк, чтобы избежать этих проблем. Правда, как я понимаю, придётся высчитывать кол-во символов. Я разбираться с этим не стал
Полностью поддерживаю ваше решение :) Это наверняка скажется на скорости работы.
ProgMan13
Сообщения: 341
Зарегистрирован: Ср авг 19, 2009 16:07

Сообщение ProgMan13 »

Skif_off писал(а):Ни у кого случайно не осталась предыдущая версия, в которой ещё не работает опция SkipEmpty=1?
Зачем? Если прописать SkipEmpty=0, то будет работать как предыдущая.
Skif_off
Сообщения: 1260
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

ProgMan13
Показалось, что даже с SkipEmpty=0 есть задержка, но лучше поверю на слово, спасибо :)
vitjazzz
Сообщения: 4
Зарегистрирован: Пт фев 27, 2015 13:51

количество строк

Сообщение vitjazzz »

Подскажите каким образом вывести 15 и 20 строки файла? Есть ограничения в количестве строк (до 10)?
Skif_off
Сообщения: 1260
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

vitjazzz
Плагин не умеет больше 10 (пока?) и, наверное, это хорошо - скорость тут должна быть далеко не на последнем месте.

Плагин PCREsearch не пробовали?
vitjazzz
Сообщения: 4
Зарегистрирован: Пт фев 27, 2015 13:51

Skif_off

Сообщение vitjazzz »

Спасибо за оперативность! PCREsearch помог (частично).
Задачей является вывод в колонку ТС информации тэга xml файла (как оказалось послу установки плагина -у разных файлов разные номера строк целевого тэга//не обратил внимание :(

Добавлено спустя 29 минут:

Если правильно понял, для решения моей задачи необходимо написать регулярное выражение для поиска строки с тэгом <LastName>, родителем для которого будет ИМЕННО <FullName>,

Код: Выделить всё

<FullName>
<LastName>Иванов</LastName>
</FullName>
так как строка с тэгом <LastName> в xml файле встречается несколько раз:

Код: Выделить всё

<ChiefName>
<LastName>Петров</LastName>
</ChiefName>
:idea: буду учить regexp-ы :idea:

Добавлено спустя 1 час 55 минут:

<FullName> встречается в файле только один раз, значит необходимо найти и вывести следующую за <FullName> строку. Помогите с регулярным выражением! Мои попытки безрезультатны:

Код: Выделить всё

regex4=(\<\Fullname>\R)
Skif_off
Сообщения: 1260
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

vitjazzz
Попробуйте так:

Код: Выделить всё

regex4=(<FullName>[\r\n]{1, 2}\s+<LastName>)([А-ЯЁа-яё]+)(</LastName>)
regex4replace=$2
vitjazzz
Сообщения: 4
Зарегистрирован: Пт фев 27, 2015 13:51

Сообщение vitjazzz »

Пустые строки выдает ТС. Ни в какую :(
А очень нужно. С регекспами знаком очень поверхностно, а плагин работает именно с ними, придётся разбираться...
Возможно есть RegExp тестеры, которые помогут мне быстрее вникнуть? Что посоветуете?
Skif_off
Сообщения: 1260
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

vitjazzz
Есть масса онлайн-ресурсов, сам только осваиваюсь, предпочитаю RegExp или (чаще) в текстовом редакторе пробую.
Напортачил я в количестве повторений, прошу прощения, попробуйте так:

Код: Выделить всё

regexN=(<FullName>[\r\n]{1,2}\s*<LastName>)([А-ЯЁа-яё]+)(</LastName>) 
regexNreplace=$2
К слову, похожая задача, только я там экранирую скобки <>, это делать необязательно :)

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

P.P.S. Наверное, нужна отдельная тема по регэкспам...
vitjazzz
Сообщения: 4
Зарегистрирован: Пт фев 27, 2015 13:51

TO Skif_off

Сообщение vitjazzz »

Решено и реализовано с помощью идеи Skiff_off,
онлайн-тест-отладчика https://regex101.com/#pcre

Регулярное выражение:

Код: Выделить всё

(<FullName>\K)+[\n\s]+(<LastName>\K)([А-ЯІЇҐ][а-яіїґ]+)
возвращает строку между тэгом LastName идущим ПОСЛЕ тэга FullName (т.к. LastName в искомых файлах встречается минимум три и больше раз)
Часть XML файла:

Код: Выделить всё

 <RegionalContacts>
            <LocalAuthorityHead>
              <LastName>Фамилия</LastName>
              <FirstName>Главы</FirstName>
              <MiddleName>Сельсовета</MiddleName>
            </LocalAuthorityHead>       
..................................................................................
                 <Percent>100</Percent>
                  </ParcelPart>
                  <Authentication>
                    <NaturalPerson>
                      <FullName>
                        <LastName>Іванов</LastName>
                        <FirstName>Іван</FirstName>
                        <MiddleName>Зіновійович</MiddleName>
Огромная благодарность товарищу Skif_off за проявленую помощь и интерес
Dimsok
Сообщения: 664
Зарегистрирован: Вс авг 17, 2014 00:45

Сообщение Dimsok »

ProgMan13 писал(а):
Добавил только пропуск пустых строк:
http://progman13.totalcmd.net/downloads ... e_Beta.zip
Не работает ссылка

Скачалось.

Добавлено спустя 1 час 22 минуты:

Есть идеи, каким образом можно осуществить вывод текстовых строк в колонки из файла, находящегося в архиве? Речь о словарях dsl, упакованных каждый в отдельный архив dz c помощью dictzip. По сути обычный gzipped.
Ответить