Программы, отправляющие результат своей работы на временную панель

Здесь обсуждаются темы, косвенно связанные с Far.
User avatar
sToLp
Posts: 697
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

Программы, отправляющие результат своей работы на временную панель

Post by sToLp » Thu 26 May, 2016 05:25

buniak_a_h
На ру-борде обнародованы два очень полезных макроса, создающих бранч-списки:

Make file list (автор shmuz2) — создаёт перечень полных имён файлов;

@ Filter Duplicates FileName in Editor (автор Alexyz21) — создаёт расширенный список с дополнительной информацией об атрибутах и размерах файлов. Данным макросом также можно произвести дальнейшую обработку файл-списка по ряду параметров.

И, если это возможно, приведите, пожалуйста, ссылки на используемые Вами утилиты по работе с временной панелью.
Attachments
@ Filter Duplicates FileName in Editor (Alexyz21).lua
(10.73 KiB) Downloaded 42 times
Make file list (shmuz2).lua
(702 Bytes) Downloaded 41 times
Last edited by HaRT on Thu 26 May, 2016 22:47, edited 2 times in total.
Reason: Исправлен заголовок Темы; добавлена ссылка на исходную Тему.

buniak_a_h
Posts: 281
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 32 times
Been thanked: 4 times
Contact:

TmpPanel: Temporary Panel — Временная панель

Post by buniak_a_h » Thu 26 May, 2016 07:36

sToLp wrote:buniak_a_h
И, если это возможно, приведите, пожалуйста, ссылки на используемые Вами утилиты по работе с временной панелью.
Во вложении две программы (Bad и Good); вторая - исправленная
FinDB Example.rar
(1.22 MiB) Downloaded 23 times
Суть программы - поиск записи в БД, удовлетворяющей условию, написанному на языке DBase, а также составление списка файлов, содержащих такие записи, или целиком удовлетворяющих условию (ключ /F) в текущем каталоге и подкаталогах (ключ /R). Во вложении "выжимка" из FarMenu.ini для реализации запросов. Примеры запросов здесь:


Кстати, эта же программа может быть использована и для выборочной модификации записей. В качестве условия поиска надо записать выражение типа iif(Code=='10202058',FieldPVal('TTT','qwe'),.F.)
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

User avatar
sToLp
Posts: 697
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

Программы, отправляющие результат своей работы на временную панель

Post by sToLp » Thu 26 May, 2016 22:34

buniak_a_h
Судя по меню пользователя, применяемому в FinDB Example, в нём Вы употребляете оператор перенаправления потока "<". А он без перехода на кодовую страницу 65001 неверно передаёт юникодные символы в именах файлов. Из-за этого отдельные файлы могут не попадать на временную панель. Расскажите, пожалуйста, как Вы с этим справляетесь?

buniak_a_h
Posts: 281
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 32 times
Been thanked: 4 times
Contact:

Программы, отправляющие результат своей работы на временную панель

Post by buniak_a_h » Thu 26 May, 2016 23:53

sToLp wrote:buniak_a_h
Судя по меню пользователя, применяемому в FinDB Example, в нём Вы употребляете оператор перенаправления потока "<". А он без перехода на кодовую страницу 65001 неверно передаёт юникодные символы в именах файлов. Из-за этого отдельные файлы могут не попадать на временную панель.
Можно примеры файлов (имена)? Я добавил ко всем именам файлов слово "Переименованный " - ничего не сломалось. Т.е. русских имен недостаточно, чтобы сбить процедуру с толку.
sToLp wrote:Расскажите, пожалуйста, как Вы с этим справляетесь?
1. Программа предназначена для поиска в таблицах *.dbf. Это - очень старый формат, исторически предназначенный для работы 16-разрядных программ, написанных для MS DOS (как правило, на языке Clipper. Собственно, Harbour, на котором теперь написана эта программа - наследник Clipper-а, и не работает с файлами, содержащими в имени юникодные символы типа «©»). А следовательно, файлы в большинстве удовлетворяют стандарту 8.3
2. Программа была разработана ещё для FAR 1.75. Там проблем не было...
3. Кстати! При попытке открыть результирующий файл в редакторе FAR 3.0.4655 автоматически выбирается кодировка 1253 - Кириллица. С какого перепуга - вопрос к разработчикам ФАРа; там гарантированно нет ни одного спец. символа, хотя редактор пишет что-то другое:
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

buniak_a_h
Posts: 281
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 32 times
Been thanked: 4 times
Contact:

Программы, отправляющие результат своей работы на временную панель

Post by buniak_a_h » Fri 27 May, 2016 00:09

sToLp
Я нашёл "странность" редактора ФАРа: при наличии в файле буквы "к" кодировка OEM не распознаётся автоматически. Не знаю, имеет ли смысл рассказать об этом разработчикам...
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

2useven10
Posts: 2978
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

Программы, отправляющие результат своей работы на временную панель

Post by 2useven10 » Fri 27 May, 2016 06:18

buniak_a_h wrote: вопрос к разработчикам ФАРа; там гарантированно нет ни одного спец. символа
buniak_a_h wrote: при наличии в файле буквы "к" кодировка OEM не распознаётся автоматически.
1) здесь это оффтоп.
2) до 'вопросов к' прочтите это

buniak_a_h
Posts: 281
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 32 times
Been thanked: 4 times
Contact:

Программы, отправляющие результат своей работы на временную панель

Post by buniak_a_h » Fri 27 May, 2016 09:57

2useven10 wrote: 1) здесь это оффтоп.
Ну, извините. Да вообще эта тема к этому форуму (и вообще к ФАРу) отношения не имеет. Просто воспитание требовало ответить - вот и случилась.
2useven10 wrote: 2) до 'вопросов к' прочтите это
В этой теме тоже одни вопросы. Видимо, проблемы кодировки разработчиков уже не интересуют.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

2useven10
Posts: 2978
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

Программы, отправляющие результат своей работы на временную панель

Post by 2useven10 » Fri 27 May, 2016 10:34

buniak_a_h wrote: Видимо, проблемы кодировки разработчиков уже не интересуют.
Осмысленные вопросы интересуют.
Офтопик с оттенком истерики нет.

User avatar
sToLp
Posts: 697
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

Программы, отправляющие результат своей работы на временную панель

Post by sToLp » Fri 27 May, 2016 19:57

buniak_a_h wrote: Можно примеры файлов (имена)?
На ру-борде примерно с этого поста прошло обсуждение, там приведены и примеры и определена причина — виновато перенаправление "потока" (оператор <), а также появилось и решение:
start /min /wait cmd /c "chcp 65001 & cmd /c dir /b /s /a-d >t.tmp"

start /I /B cmd /c "chcp 65001 & cmd /c dir /b/s/a-d >dirlist.txt"

cmd /c "chcp 65001 & cmd /c dir /b /s /a-d>bra_.tmps & chcp 866"

— … каждый из трёх вариантов команды [dir] выдаёт нормальный юникодный результат и непосредственно из комстроки, и из батника, и из алиаса.
buniak_a_h wrote: При попытке открыть результирующий файл в редакторе FAR 3.0.4655 автоматически выбирается кодировка 1253 - Кириллица.
buniak_a_h wrote: Я нашёл "странность" редактора ФАРа: ... кодировка OEM не распознаётся автоматически.
Решению и того, и другого вопросов должен помочь макрос, подобный этому.

buniak_a_h
Posts: 281
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 32 times
Been thanked: 4 times
Contact:

Программы, отправляющие результат своей работы на временную панель

Post by buniak_a_h » Fri 27 May, 2016 22:50

sToLp
Спасибо.
Видимо достаточно просто перед командой tmp:< FinDB32 ... вставить строку chcp 65001. К сожалению, проверить это именно на FinDB32 пока невозможно, т.к. сама программа не работает с файлами, содержащими в имени юникодные символы. Проверил на команде tmp:< dir /b - срабатывает замечательно. :) Правда, кодовая страница изменяется на постоянно, что может оказаться плохо... Надо запоминать и восстанавливать как-то.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

User avatar
sToLp
Posts: 697
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

Программы, отправляющие результат своей работы на временную панель

Post by sToLp » Fri 27 May, 2016 23:09

buniak_a_h wrote: Надо запоминать и восстанавливать как-то.
Так выше же постом специально для этого приведены три варианта команды Dir. Третий вариант с восстановлением кодовой страницы, а два первых в текущей консоли её и не меняют, поскольку запускаются во временной другой. Почитайте подробнее на ру-борде, там же ссылка есть.

buniak_a_h
Posts: 281
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 32 times
Been thanked: 4 times
Contact:

Программы, отправляющие результат своей работы на временную панель

Post by buniak_a_h » Sat 28 May, 2016 00:11

sToLp wrote:
buniak_a_h wrote: Надо запоминать и восстанавливать как-то.
Так выше же постом специально для этого приведены три варианта команды Dir.
Требуется заключать строку в двойные кавычки. А в самой команде критерий поиска также обязательно заключать в кавычки. Как это помирить - я не знаю, не настолько знаком с языком cmd. :oops:
sToLp wrote:Третий вариант с восстановлением кодовой страницы, а два первых в текущей консоли её и не меняют, поскольку запускаются во временной другой. Почитайте подробнее на ру-борде, там же ссылка есть.
В принципе, если не заморачиваться с запоминанием, а просто по окончании работы переключать на 866, то можно также просто добавить в конец пункта ещё строку chcp 866.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

User avatar
sToLp
Posts: 697
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

Программы, отправляющие результат своей работы на временную панель

Post by sToLp » Sat 28 May, 2016 07:20

buniak_a_h

А не пробовали просто поменять в примерах команду Dir на Вашу программу и вывод не в файл указать, а сразу на временную панель? Типа:

Code: Select all

tmp:<start /min /wait cmd /c "chcp 65001 & FinDB32"

tmp:<start /I /B cmd /c "chcp 65001 & FinDB32"

tmp:<cmd /c "chcp 65001 & cmd /c FinDB32 & chcp 866"
Отпишитесь, пожалуйста, работает это или как? И, между прочим, в какой оси Вы программы запускаете? Потому, что в Win10x64entRu они не запускаются.

buniak_a_h
Posts: 281
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 32 times
Been thanked: 4 times
Contact:

Программы, отправляющие результат своей работы на временную панель

Post by buniak_a_h » Sat 28 May, 2016 13:28

sToLp wrote:
Отпишитесь, пожалуйста, работает это или как? И, между прочим, в какой оси Вы программы запускаете? Потому, что в Win10x64entRu они не запускаются.
1. Как я уже писал, выражение для поиска обязательно должно быть заключено в кавычки. В частности, там могут присутствовать пробелы и символы "<" и ">". А как указать двойные кавычки, входящие в строку, заключённую в двойные кавычки, я не знаю.
2. Мою программу пришлось немного переделать: научить работать с юникодными именами файлов и добавить ключ, требующий только вывод имён файлов (без "лишней" информации).
3. Пункт меню работает почти по типу (3) только вместо указания трёх команд через "&" указал три строки:

Code: Select all

    chcp 65001
    tmp: <FinDb32_UTF8.exe !?$FinDB_Mask$Маска файлов?*! "!?$FinDB_Exp$Условие поиска?!" !?$FinDN_Switch$Ключ ( /F(ile), /S(et), /R(ecurce) )?! /L
    chcp 866
Такое работает с файлами типа © Переименовано Cnt_Oto.DBF. Правда, возникает вопрос, что с этим дальше делать. Плугин LookDBF с такими именами не работает, и я не знаю ни одной программы, работающей с такими файлами. Так что конкретно в данном случае интерес чисто академический..
ЗЫ. Если вопрос интересует, могу обновить вложение.
ЗЗЫ.
1. У меня Windows XP. При необходимости можно собрать 64-разрядную версию.
2. Программа ...Bad... - вообще, по-моему, собрана была Clipper - 16-разрядная. Хотя не уверен - очень старая тема.
Last edited by buniak_a_h on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Спрятан оверквотинг
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

User avatar
sToLp
Posts: 697
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

Программы, отправляющие результат своей работы на временную панель

Post by sToLp » Sat 28 May, 2016 17:48

buniak_a_h wrote: 1. ... как указать двойные кавычки, входящие в строку, заключённую в двойные кавычки ...
Насколько я понимаю, в одинарные кавычки, и наоборот.
2. Мою программу пришлось немного переделать: научить работать с юникодными именами файлов и добавить ключ, требующий только вывод имён файлов (без "лишней" информации).
Смотря какая информация относится к лишней. Макрос авторства Alexyz21 в первом посте, например, на первом этапе создаёт бранч-список, в котором в первых двух колонках указаны атрибуты и размеры, а в третьей — полные имена файлов. И опираясь на эту дополнительную информацию обрабатывает список дальше. А макрос авторства shmuz2 создаёт список стандартного содержания только из полных имён файлов. Зато, конечно, побыстрее и всеядно для временных панелей.
3. Пункт меню работает почти по типу (3) только вместо указания трёх команд через "&" указал три строки
Принцип тот же.
Если вопрос интересует, могу обновить вложение...
У меня Windows XP. При необходимости можно собрать 64-разрядную версию.
У меня интерес в данном случае тоже чисто академический. И я сомневаюсь, что программа вдруг начнёт работать из под Win10. Если только кому нибудь ещё интересно будет.

buniak_a_h
Posts: 281
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 32 times
Been thanked: 4 times
Contact:

Программы, отправляющие результат своей работы на временную панель

Post by buniak_a_h » Sat 28 May, 2016 18:42

sToLp wrote: buniak_a_h писал(а):
1. ... как указать двойные кавычки, входящие в строку, заключённую в двойные кавычки ...
Насколько я понимаю, в одинарные кавычки, и наоборот.
Увы, не получается. Например, выражение поиска FIELD1<>'qqq' . Ясно, что при вызове его надо заключить в "". А потом всё это вставить в строку, которая тоже в каких-то кавычках. Удвоение кавычек не проходит; Escape-символа (типа «\"») я не знаю
sToLp wrote: Смотря какая информация относится к лишней.
Эта программа перед списком выводит строки типа

Code: Select all

  Поиск в БД по выражению:
            FIELD1 <> 'qqq'
и далее - список файлов БД, в которых найдены записи, удовлетворяющие условию и для каждого файла - номера записей. Проблема в том, что я не смог побороть вывод "заглавия" в кодировке UTF8. А в результате tmp: "не понимает" списка. Бороться с этой бедой я не стал - легче просто не выводить лишнего.
sToLp wrote: У меня интерес в данном случае тоже чисто академический. И я сомневаюсь, что программа вдруг начнёт работать из под Win10. Если только кому нибудь ещё интересно будет.
У товарища Windows-7 x64, программа используется активно. Windows 10 для меня пока неактуально: на таможнях не сильно распространён.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

Post Reply

Return to “Операционные системы, командные оболочки и прочее”