Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

[wlx] csvtab - просмотр CSV файлов
Goto page Previous  1, 2, 3 ... , 9, 10, 11  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Avada



Joined: 01 Aug 2008
Posts: 10266
Location: Россия, Саратов

Post (Separately) Posted: Sat Jan 06, 2024 10:35    Post subject: Reply with quote

jentoso
Таким способом устанавливать плагины мешает как минимум здравый смысл. Не надо учить плохому. Кстати, даже при прописывании новой строки плагина вручную (если иначе никак, что на практике бывает крайне редко) достаточно просто присвоить ей последний номер в секции, а на нужное место в списке переместить потом через диалог. Потраченные на это время и усилия будут многократно меньше, чем по предложенной методике.

ZorKon71
Человеку, зарегистрированному на этом форуме с 2010 года, задавать подобные вопросы должно быть стыдно. Справка и материалы форума доступны. (Слова "Как установить плагин?" и последующие пошаговые рекомендации здесь видны?) Вместо занятия предлагаемыми выше глупостями с ручной перенумерацией строк секции существуют два нормальных способа полуавтоматической установки (если плагин уже скопирован в какую-то папку). Первый вариант: открыть в настройках TC страницу "Плагины", в ней открыть диалог настройки Lister-плагинов, там нажать кнопку "Добавить", затем найти и выбрать нужный файл. Второй вариант, которым пользуюсь я сам: обращение к внешней утилите TC Plugins Manager, которую в её настройках можно опцией "Регистрация расширений..." легко ассоциировать с типовыми расширениями 32-битных плагинов. Далее двойным щелчком или Enter по имени файла плагина (в данном случае это csvtab.wlx) открывается и подтверждается запрос на установку. И всё, без всяких неуместных копаний в INI-файлах.
Замечание за нарушение правил форума.
Дискуссия об установке плагинов здесь на этом закончена.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
ZorKon71



Joined: 11 May 2010
Posts: 30
Location: Обираловка, МО

Post (Separately) Posted: Sat Jan 06, 2024 23:52    Post subject: Reply with quote

А вот стыдить меня не надо.
Avada wrote:
Справка и материалы форума доступны. (Слова "Как установить плагин?" и последующие пошаговые рекомендации здесь видны?)

Именно про это я и спрашивал.
Зарегистрирован я давно, но не слежу постоянно.
Для этого и есть такие форумы - для оперативной помощи.

Про автоустановку - я видел. Но случайно нажал отмену. И повторно она не сработала.

Ок.
Дискуссия закончена.
_________________
TC 11.00, Win7/10x64


Last edited by ZorKon71 on Sun Jan 14, 2024 23:53; edited 1 time in total
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10266
Location: Россия, Саратов

Post (Separately) Posted: Sun Jan 07, 2024 11:21    Post subject: Reply with quote

ZorKon71
Ещё раз — вам посоветовали, мягко говоря, нерациональное решение, которое вы, судя по продолжавшему оффтоп ответу, с удовольствием подхватили, провоцируя наступление на новые грабли, хотя существуют гораздо более цивилизованные и безопасные способы.
Про 64-битные плагины всё давно пояснено (подробнее всего здесь) и персонально для вас повторяться больше не будет, особенно в посторонних темах. (Тем более, что там полная автоматика и пользователю в норме вообще нечего в это лезть.) То же касается и восстановления случайно отменённой автоустановки, если вы об этом не знали.
Форум для запрашивания заново многократно пояснённой (в т.ч. на нём самом) информации не предназначен точно. Для чего ещё он не предназначен, сказано в его правилах. Периодичность вашего слежения за новациями TC здесь никому не интересна, тем более что текущему порядку установки плагинов много-много лет. Зарегистрировались — извольте соблюдать правила форума. В связи с чем напоминаю достаточно старый свой ответ на подобные же ваши художества. Похоже, воз и ныне там...
Вся откровенно оффтопная часть вашего сообщения удалена. Явно избыточное цитирование основной части моего ответа тоже удалено. Ещё одно замечание за множественное нарушение правил с предупреждением о более серьёзных последствиях при рецидиве.
Дальше в этой теме — только сообщения по делу, оффтоп будет удаляться.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Destiny



Joined: 15 Dec 2015
Posts: 212

Post (Separately) Posted: Fri Mar 15, 2024 13:10    Post subject: Reply with quote

little-brother
А не напомните мне и себе заодно - на основе чего(какого буфера считанных данных) определяется кодировка? У меня вдруг пошли фолсы на UTF - открывает как ANSI. Хотя там ну вообще без шансов на то, чтобы НЕ увидеть UTF. К сожалению, прям щаз не могу скинуть файл - слишком Перс.данные там.
Back to top
View user's profile Send private message
little-brother



Joined: 29 Sep 2021
Posts: 205

Post (Separately) Posted: Sun Mar 17, 2024 01:29    Post subject: Reply with quote

https://github.com/little-brother/csvtab-wlx/blob/main/main.c#L1724

Читается BOM-метка. Если её нет, то читается первая строка в попытке определить какая версия UFT16 используется. Если не получилось, то вызывается проверка на UTF8 строку

https://github.com/little-brother/csvtab-wlx/blob/main/main.c#L1854

Если UTF8 не определился, то считается что ANSI.

По сути в качестве образца достаточно одной строки, где все буквы можно забить одной.

С UTF8 или UTF16 проблема? Возможно у вас невозможные символы для UTF-кодировки и потому фунции их определений не определяют их как UTF-текст.
Back to top
View user's profile Send private message
Destiny



Joined: 15 Dec 2015
Posts: 212

Post (Separately) Posted: Sun Mar 17, 2024 13:36    Post subject: Reply with quote

little-brother wrote:
https://github.com/little-brother/csvtab-wlx/blob/main/main.c#L1724

По сути в качестве образца достаточно одной строки, где все буквы можно забить одной.


к сожалению, всё как-то страннее.... полный файл открывается и UTF-8 без BOM вдруг НЕ определяется....
Обрезаешь файл до первых 10 строк - и при открытии тут же уже видится корректно как UTF-8 без BOM....

Берешь полный файл - и заменяешь ВСЕ буквы одной - и файл тут же при просмотре видится корректно
как UTF-8 без BOM....

P.S. хоспади.... кажись нашел причину... НО! вы походу не неким буфером пытаетесь проверить конвертацию
текста в UTF-8, а всем его объемом? Ошибка просто нашлась на 101 строке. Приблизительно на 9575 байтах.
Стал обрезать постепенно файл и дошел до этой строки. Там было это:
Code:
Звонорв Д.А.

Т.е. буквы `О` не оказалось на своем месте.

Как бы с одной стороны - это реально ошибка входных данных.... Но ведь редакторы-то отрывали этот файл и
этот кусок БЕЗ проблем как верный UTF-8 без BOM. Может все же плагин можно будет обучить этому же трюку?
Back to top
View user's profile Send private message
little-brother



Joined: 29 Sep 2021
Posts: 205

Post (Separately) Posted: Sun Mar 17, 2024 13:58    Post subject: Reply with quote

Первая строка используется для определения порядка байт в utf16.
Для определения UTF8 используется весь файл, т.к. в вашем случае BOM-метки нет. Подозреваю, что определитель в каком то месте обнаруживает неверный с точки зрения utf8 последовательность бит, которая не может быть декодирована. Это может быть как косяк кода определителя, так и проблема в вашем файле.
Чтобы исключить второе - попробуйте сохранить файл как ANSI или UTF16, а потом обратно в utf8 и после этого бинарно сравнить исходный и полученный файл.

Для обнаружения места, где utf8 ломается можно на 1885 строке добавить
Code:

bytes + 100 = 0;
MessageBoxA(0, (const char*)bytes, 0, 0);

и перекомпилировать плагин (см. Wiki). Это покажет место, где проверка не прошла.

Quote:

Но ведь редакторы-то отрывали этот файл и
этот кусок БЕЗ проблем как верный UTF-8 без BOM

Так и плагин я думаю может открыть как UTF-8, если принудительно переключить. Проблема в том, что у вас получается не utf8 файл из-за неверного символа => плагин предполагает что это ANSI.

Можно наверно добавить общее количество ошибок при определении utf8-кодировки, чтобы если 1-2 неверных символа попали, то плагин продолжал считать, что все ок.
Back to top
View user's profile Send private message
Destiny



Joined: 15 Dec 2015
Posts: 212

Post (Separately) Posted: Sun Mar 17, 2024 15:42    Post subject: Reply with quote

little-brother wrote:
Подозреваю, что определитель в каком то месте обнаруживает неверный с точки зрения utf8 последовательность бит, которая не может быть декодирована.

Я же ТОЧНО указал где и что:
Code:
Звонорв Д.А.

на этом символе-квадрате, что представляет собой 0x001A символ, - всё и падает при определении...

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

little-brother wrote:
Так и плагин я думаю может открыть как UTF-8, если принудительно переключить.

Да, может, поэтому я и не сразу решился писать сюда об этой проблеме...
Проблема стала серьёзнее когда я стал использовать плагин для просмотра итоговых XML, полученных после обработки входных CSV.
Эта ошибка - этот символ - стал "ронять" весь Тотал при использовании XML плагина. Но об этом я уже в той теме расписал.
А тут осталась лишь неверная трактовка UTF-8 из-за него одного такого....

И да, пожалуй, при наличии 1/2/3 ошибок наверное реально можно считать файл в первую очередь всё же как UTF-8.
Или не в точном кол-ве штук, а в процентном отношении?
Типа, если на все 1000 символов текста найдено лишь до 5% ошибочных, не перекодируемых в UTF-8 символов - то
в целом весь текст по прежнему считаем как UTF-8.
Back to top
View user's profile Send private message
helb



Joined: 08 Oct 2014
Posts: 57

Post (Separately) Posted: Tue Mar 19, 2024 22:49    Post subject: Reply with quote

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

И еще, стандартный формат экспорта powershell предполагает опционально наличие типа данных первой строкой в виде комментария (начинающегося с #). А вот второй строкой там уже будут идти названия колонок (тоже опционально). У вас в итоге колонки не определяются, отображается ненужный комментарий как название первой, а реальные колонки значатся первой строкой данных.
Back to top
View user's profile Send private message
Destiny



Joined: 15 Dec 2015
Posts: 212

Post (Separately) Posted: Wed Mar 20, 2024 10:20    Post subject: Reply with quote

helb wrote:
стандартный формат экспорта powershell предполагает опционально

Эээээ, уж насколько я сам топил за поддержку комментариев.
Но этот вариант, имхо, слишком "опционален", чтобы даже ожидать от плагина его поддержки...
Может этот стандарт для шелла и стандарт. НО для CSV, точнее для TSV (раз уж мы про табуляцию топим) это точно не стандарт.
Ну и этот двойной капкан. А по другому и не назовешь... Сперва комментарий, потом названия колонок, потом данные.
А если шелл введет допы к своему "стандарту"? И первыми будут идти три строки комментов, даже если они пустые будут?
ХОТЯ уже вы можете в нижней части окна плагина выбрать свой вариант КАК надо "разбираться" со строками, начинающимися на #.
Там три варианта. Попробуйте - может что и подойдет для начала...
Back to top
View user's profile Send private message
little-brother



Joined: 29 Sep 2021
Posts: 205

Post (Separately) Posted: Wed Mar 20, 2024 13:31    Post subject: Reply with quote

Quote:
Автодетект чересчур умничает. В CSV с путями файлов и временами счёл двоеточие разделителями, хотя там табы.

У плагина нет каких то сакральных знаний о произвольном файле, потому используется простой алгоритм подсчета ,;|\t: в первых пяти строках. Каких символов больше, тот и выбирается. Так для файла вида: путь TAB путь TAB путь, т.е. получается три : и два TAB => выбирается :.
Если у вас большинство файлов с TAB, то имеет смысл в ini-файле выставить default-column-delimiter=\t (по умолчанию значение не задано и потому плагин сам пытается найти разделитель).

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

Destiny, по поводу кривых utf8: подозреваю, что проблема для всех трех плагинов, работающих с текстом, т.е. xmltab, jsontab и csvtab, кривой utf8 может приводить к падению плагина и самого TC. Надо разбираться можно ли обработать utf8-текст, чтобы выкинуть из него неверные символы.
Back to top
View user's profile Send private message
helb



Joined: 08 Oct 2014
Posts: 57

Post (Separately) Posted: Wed Mar 20, 2024 17:37    Post subject: Reply with quote

little-brother
С таким алгоритмом много неправильных определений будет. Вероятность запятых и двоеточий высока, и очень часто их там будет больше чем разделителей.
Я думаю, лучше ранжировать: \t | ; , :
У вас при детекте одинаковое количество разделителей в строках учитывается? Тех же запятых и точек с запятой в данных часто будет разное количество (в именах файлов, например).

Вообще, таб все же исключительный случай: скорее всего вы в дикой природе вообще не найдете ни один CSV-файл где были бы табы, и они при этом не были бы разделителями. Я потому его исключительно использую: никаких гаданий + ничего «закавычивать» или эскейпить не надо, еще и с текстовыми редакторами поддерживающими эластичные табы всё наглядно.


Далее, как и подозревал, опции комментариев не работают для первой строки, когда там BOM.

Помимо этого, вариант «не парсить» по-логике должен и на определение названий колонок распространяться.
Плюс названия второго и третьего малость неинтуитивны: по смыслу оба — это «игнорировать», с разницей лишь в том показывать как есть или скрывать.

Destiny
У CSV нет никаких стандартов, жалкое упоминание пунктиком в каком-то RFC, который вообще все игнорируют — это не стандарт :)
Вопрос в том, что при любом парсинге структуры комментарии должны игнорироваться везде — не важно где они расположены и сколько их.
Back to top
View user's profile Send private message
Destiny



Joined: 15 Dec 2015
Posts: 212

Post (Separately) Posted: Thu Mar 21, 2024 11:47    Post subject: Reply with quote

helb wrote:
У CSV нет никаких стандартов, жалкое упоминание пунктиком в каком-то RFC, который вообще все игнорируют — это не стандарт Smile
Вопрос в том, что при любом парсинге структуры комментарии должны игнорироваться везде — не важно где они расположены и сколько их.

Его может и не быть, но мы же понимаем, что даже просто тот формат CSV|TSV, который мы привыкли за годы использования "видеть" в файлах - уже
"тянет" на некое подобие оного, просто потому что, (хей, как там юристы пишут?) это уже Де-факто.
Ну дык, тогда вопрос - а что вы привыкли видеть КАК комментарий? Я вот точку с запятой. Решетку.... хм, ну да, бывает вижу. Но если ранжировать
по частоте попадания "на стол", то она явно на 4 месте. На втором //, на третьем многострочный /**/
Значит тогда кроме кнопки Comment Mode внизу еще для удобства вводим кнопку Comment sign?
Ну и для полного скрытия вроде как режим#3 вполне подходит же?

Но теперь вопросы - а для каких вариантов файла CSV, не имеющего стандарт, и как применять эти символы комментариев?
А если они внутри текста, который внутри как бы ячейки с данными. А если они вдруг разбивают один файл TSV на две таблицы?
Угу, есть такая прога - она ТОЛЬКО с таким своим, понятно дело, стандартом TSV так работает.

Собсно я к тому, что не фига не простое это дело парсить нестандартизированный типовой файл CSV|TSV.

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

little-brother wrote:
по поводу кривых utf8: подозреваю, что проблема для всех трех плагинов, работающих с текстом, т.е. xmltab, jsontab и csvtab,
кривой utf8 может приводить к падению плагина и самого TC. Надо разбираться можно ли обработать utf8-текст, чтобы выкинуть из него неверные символы.

Хм, ну так-то да, если учесть, что многое одинаково в исходниках эти плагинов.
Учитывая, что я в xmltab теме написал:
Quote:
можно для начала проверять НАБОР символов, встреченных в файле и типа если есть те, что
принадлежат явно НЕ "человеческому цифро-символьно-буквенному диапазону - то писать уведомление,
что в файле "что-то" не то... И даже не обязательно точно указывать в каком, мол, это месте "не то"....

может "подогнать" под реалии эту логику - если такая последовательность символов найдена - то удалять такие символы,
но все равно плюсом обязательно выводить инфу об этом действии пользователю.
Back to top
View user's profile Send private message
little-brother



Joined: 29 Sep 2021
Posts: 205

Post (Separately) Posted: Fri Mar 22, 2024 00:38    Post subject: Reply with quote

Quote:
если такая последовательность символов найдена - то удалять такие символы

Там не какая то фиксированная последовательность. utf8 кодирует один символ в 1-4 байта. Английские - это всегда 1 байт и в принципе совпадает с ANSI, а вот русские буквы - это уже по два байта. При этом содержимое первого байта содержит бит, прямо указывающий, что для декодирования символа надо читать дальше. Нарушить эти правила кодирования достаточно легко, в результате, даже подсчет длины кривой строки в символах, а не в байтах, может приводить к падению, если не зафиксировать, что один символ это не более 4-х байт.

Надо разбираться, но пока желания особо нет. Просто в ToDo добавил.

С приоритетом с TAB, пожалуй соглашусь. Надо будет допилить авто-обнаружение.

Quote:
Далее, как и подозревал, опции комментариев не работают для первой строки, когда там BOM.

Видимо баг, надо править. Пример файла можете добавить?

Quote:
Помимо этого, вариант «не парсить» по-логике должен и на определение названий колонок распространяться.
Плюс названия второго и третьего малость неинтуитивны: по смыслу оба — это «игнорировать», с разницей лишь в том показывать как есть или скрывать.

Можете предложить варианты лучше?
Back to top
View user's profile Send private message
Destiny



Joined: 15 Dec 2015
Posts: 212

Post (Separately) Posted: Fri Mar 22, 2024 11:02    Post subject: Reply with quote

little-brother wrote:
Там не какая то фиксированная последовательность. utf8 кодирует один символ в 1-4 байта. Английские - это всегда 1 байт и в принципе совпадает с ANSI, а вот русские буквы - это уже по два байта.

Ну я же не про это написал свои мысли! Пример ошибочного символа вас разве не навел на мысль, что такими "неверными"
символами надо сразу изначально рассматривать такой диапазон знаков, который в принципе не может существовать в текстовом файле?

Вроде как вот такой набор символов должен быть нормальным:

Основные многоязычные плоскости (Basic Multilingual Plane):

От 0x0020 до 0x007E (включительно) - символы ASCII и их расширения.
От 0x00A0 до 0x00FF - дополнительные символы, такие как латинские расширения.
От 0x0100 до 0x017F - латинские расширения А и В.
От 0x0180 до 0x024F - различные расширения, включая латиницу, кириллицу, греческий алфавит и другие.


Символы за пределами основной многоязычной плоскости:

От 0x0370 до 0x03FF - дополнительные греческие символы.
От 0x0400 до 0x04FF - кириллические символы.
От 0x0500 до 0x052F - дополнительные кириллические символы.
От 0x1E00 до 0x1EFF - дополнительные символы для различных алфавитов.


Символы для математических и технических вычислений:

От 0x2200 до 0x22FF - математические операторы.
От 0x2300 до 0x23FF - технические символы и различные стрелки.
Специальные символы и эмодзи:


От 0x1F300 и выше:

Эмодзи (символы смайликов и иконки):
От 0x1F300 до 0x1F6FF.

Графические символы (включая флаги, карты, знаки зодиака):
От 0x1F700 до 0x1F77F.

Дополнительные символы и пиктограммы:
От 0x1F780 до 0x1F7FF.

Символы и пиктограммы для музыки:
От 0x1F800 до 0x1F8FF.

Символы и пиктограммы для иероглифов и других символов:
От 0x1F900 до 0x1F9FF.

Дополнительные специальные символы:
От 0x1FA00 и выше.

А вот наш "обламывающий всё" символ имеет код 0x001A (U+0000 до U+001F) - а значит он НЕ входит в диапазон понятных
человеку/бумаге символов. И вот такие явно понятные bad-символы искать и исключать, но и сообщать пользователь об этом.

И такой код он сохранил после перекодировки. Т.е. мы выполняем общую перекодировку в UTF-8. Если нет ошибок - шикарно.
Если есть - то для каких символов? Если полученный код символа не входит в разрешённый, то нафиг его и дать знать юзеру.
Еще раз - тот же xmlreview вполне лего и трезво указал на этот символ после перекодировки в UTF-8 всего файла.
Code:
Reason: The character "0x001A" cannot occur in text.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... , 9, 10, 11  Next
Page 10 of 11

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group