Ru-Board.club
← Вернуться в раздел «Программы»

» Far Manager

Автор: Angel_Ka
Дата сообщения: 05.05.2016 13:21
Alexyz21

Цитата:
Количество дубликатов, наверное

Ой-е-ёй! У меня тут кроме множества двоек и четвёрок также выскочили числа 799, 765 и 458. Такое действительно полезно знать.
Ещё раз БЛАГОДАРЮ Вас за очередной отличный макрос!
Автор: Alexyz21
Дата сообщения: 05.05.2016 13:24
shmuz2
Кстати, а как вы, с вашим опытом, представляете себе такую функцию? Результат будет вообще-то не [0..1], а ]0..1].
Автор: shmuz2
Дата сообщения: 05.05.2016 13:37

Цитата:
Кстати, а как вы, с вашим опытом, представляете себе такую функцию?

Есть такие функции и даже библиотеки. Например есть библиотека рег. выражений TRE, содержащая функции приблизительного совпадения.
Лично у меня опыта в этом нет на данный момент.
Автор: Alexyz21
Дата сообщения: 05.05.2016 13:39
Angel_Ka

Цитата:
Речь идёт о файлах, внутрь имён которых вставлены разные маркеры типа ]Ббк68.405к[.

Кто не даёт сортировать с регэкспами?
Автор: Angel_Ka
Дата сообщения: 05.05.2016 13:42
shmuz2

Цитата:
_macroinit.lua гарантированно вызывается первым, это документированная фича.
Что же касается вызова по алфавиту, то это не документировано, и не обязательно будет работать одинаково на разных системах.

Вот это прямо в блокнотик. БОЛЬШОЕ СПАСИБО за столь полезную информацию!

Alexyz21

Цитата:
Если напишите функцию ...

Писать начну немедленно. А вот закончу ли до гробовой доски?
Но всё же отрадно знать, что желаемая автоматизация анализа бранчей в принципе возможна, т.е. можно надеяться.
Автор: wseventeen
Дата сообщения: 05.05.2016 13:50
Похоже пора переименовать ветку в 'Макросы для Angel_Ka'
Автор: shmuz2
Дата сообщения: 05.05.2016 13:55
wseventeen
Получается так. Но, во-первых, никому не запрещается постить по другим вопросам, а во-вторых, лучше так, чем кладбищенская тишина на форуме.
Автор: Alexyz21
Дата сообщения: 05.05.2016 14:06
Вот и дожились - лучше слоняющиеся по погосту зомби, чем кладбищенская тишина. Оно и впрямь - веселее
А вот от функции, или даже семейства функций Fuzzy match в FAR я бы не отказался... Бывает нужно нечто такое - этакое...

Добавлено:
Может господин 17-й самурай может расписать panel.GetPanelItem(nil,1,i).FileName на lua с FAR API?
Автор: Angel_Ka
Дата сообщения: 05.05.2016 14:10
Alexyz21

Цитата:
Кто не даёт сортировать с регэкспами?

Такая то сортировка делается повседневно. И очень быстро, благодаря Вашим замечательным макросам. Но в данном случае нужна как раз не сортировка, а группировка с пометкой. И с учётом того, что маркеры заранее не известны. Это я просто привёл примитивнейший, но характерный, как Вы наверняка заметили — скобки развёрнуты. Такие маркеры отлично выявляет опция Symbols Вашего восхитительного сборного макроса Panel.CustomSortByName.lua.

А теперь вот желательно решить и другую задачу, которую наверное можно было бы охарактеризовать как противоположную. Нужно на бранч-панели (т.е. среди файлов, находящихся в разных ветках) пометить группы файлов с несколько, но не сильно, отличающимися именами. То есть сгруппировать файлы, в которых ещё нет пометки, с ранее одноимёнными им файлами, в которых пометка уже присутствует. Файлы же с одинаковыми именами (есть в них пометка или нет — не важно) нас в этом случае не интересуют.
Автор: Alexyz21
Дата сообщения: 05.05.2016 14:36
Angel_Ka
Пока не будет функции неточного совпадения строк, вайдовых строк в FAR, либо внешней либе, которую можно "прикрутить" к lua - до тех пор эта задача неразрешима, имхо. А этого можно ждать до второго пришествия.

И даже если бы такие функции появились, то возник бы вопрос их производительности - они ресурсоёмки. А отсортировать ваши объёмы с применением такой ресурсоёмкой функции...

По поводу маркеров внутри строк (имён) - было бы проще, если бы маркеры были стандартизированы, например [marker:тут можно всякий бед, но не квадратные кавычки или ПС]. Тогда вычленять их было бы легко.
Автор: Angel_Ka
Дата сообщения: 05.05.2016 14:38

Цитата:
Похоже пора переименовать ветку в 'Макросы для Angel_Ka'

Лично я ни сколько бы не был против создания отдельных тем по макросам, по регексам и т.п. Однако уважаемый VictorVG4 просит пока воздержаться от этого на время починки сайта. А ремонт всё затягивается. Но когда он будет завершён можно будет отделить темы и ссылки на них поместить в шапку данной основной.

Но если дружно прикажете заткнуться, то так и будет. С форума Фара то уже выдавили. Да и не только меня. Вины же за собой ни какой не чувствую, все обращения были и есть искренние, с уважением к формучанам и по делу.
Автор: Alexyz21
Дата сообщения: 05.05.2016 14:48

Цитата:
С форума Фара то уже выдавили.

Шаг влево, шаг вправо - побег, прыжок на месте - провокация
Автор: Angel_Ka
Дата сообщения: 05.05.2016 14:53
Alexyz21

Цитата:
По поводу маркеров внутри строк (имён) - было бы проще, если бы маркеры были стандартизированы, например [marker:тут можно всякий бред, но не квадратные кавычки или ПС]. Тогда вычленять их было бы легко.

Это абсолютно верно. Но, увы, такое пока Вне нашей компетенции.
Автор: Benchmark
Дата сообщения: 05.05.2016 15:22
Angel_Ka

Цитата:
Лично я ни сколько бы не был против создания отдельных тем по макросам, по регексам и т.п. Однако уважаемый VictorVG4 просит пока воздержаться от этого на время починки сайта. А ремонт всё затягивается. Но когда он будет завершён

Он никогда не будет завершен. Текущая ситуация с форумом не меняется уже много лет, и конца этому не видно.

Поэтому, ребят, не нужно бояться создать ещё одну или две новых темы. Они никак не повредят форуму даже в его текущем состоянии.
Автор: Alexyz21
Дата сообщения: 05.05.2016 15:39
Не столько у FAR'a пользователей, чтобы темы плодить - тут и в одной фиг помощи дождёшься, что говорить тогда про разные - кто их читать будет, у кого времени немеряно и желание такое есть?
Автор: Angel_Ka
Дата сообщения: 05.05.2016 16:05
Alexyz21

А нельзя ли попробовать следующее. Сначала сравнить файлы не по полной длине имени, а по его части. Желательно настраиваемой подобно Offset в Сборном макросе. Совпавшие снова сравнить уже по полной длине. И те, которые и по частичной и по полной длине совпали исключить. А те, которые совпали только по частичной длине и не совпали по полной пометить. Так можно было бы сделать? Возможно, это позволит решить задачу с маркерами.
Понятно, что если это возможно, то будет дольше как минимум в два раза. Но вот я сегодня померял седьмую версию на базе в 1 млн 800 тыс файлов, и она с ней управлялась за 11 секунд. Ну пусть будет дольше в 10 раз, даже в 100 раз. И это совсем не будет критично. Поскольку Вы сделали настолько фантастический прорыв в скорости работы макроса, что он позволяет допустить очень большое отступление по времени.

shmuz2

По Вашей любезной подсказке для создания бранчей чаще всего я использую плагин LuaFAR Search. Так как делает он это примерно в 2,5 раза быстрее, чем команда tmp:<dir /b /s /a-d. Но в отличие от консольной команды, которая срабатывает практически всегда, плагин иногда падает. Ссылаясь на нехватку памяти. Случается это на действительно больших базах. Вот и сегодня из четырёх попыток он трижды упал на базе, ёмкостью 1 824 845 файлов, не создав бранч. А жалко. Потому, что бранч из этой базы он может создать за полчаса. Тогда как консольная команда — за 1 час и 20 – 25 минут.
Автор: shmuz2
Дата сообщения: 05.05.2016 17:18
Alexyz21

Цитата:
Не столько у FAR'a пользователей, чтобы темы плодить - тут и в одной фиг помощи дождёшься

Блин, оказывается вам здесь помощь не оказывается. Чего-то недопонимаю, видно.

Добавлено:
Angel_Ka
Если плагину не хватает памяти, ничего с этим не поделаешь. Это LuaFAR-плагин, ему нужно больше памяти, чем "обычному".

Попробуйте сделать так (расширение .temp, имя не важно):
dir /b /s /a-d > file.temp
Затем нажать Enter на file.temp. Не будет ли это быстрее?
Автор: VictorVG4
Дата сообщения: 05.05.2016 17:51
shmuz2

Дак Alexyz21 как этот малыш



на ручки просится.

Автор: Alexyz21
Дата сообщения: 05.05.2016 18:19

Цитата:
Совпавшие снова сравнить уже по полной длине. И те, которые и по частичной и по полной длине совпали исключить.

Нет смысла сравнивать полностью, если они исключаются, ведь они уже находятся во множестве частично совпавших, которые вы также предлагаете исключать :)

С выделением по совпадению N первых символов: [more]
Код: local F = far.Flags
local ffi = require'ffi'
local C = ffi.C
local BS = string.byte("\\")

ffi.cdef[[
int strcmp(const char*, const char*);
int _stricmp(const char*, const char*);
int _strnicmp(const char*, const char*, size_t);
char* strrchr(const char*, int);
size_t strlen(const char*);
int memcmp(const void*, const void*, size_t);
]]

local function StartAndLen(name)
local ptr = C.strrchr(name,BS)
name = ptr==nil and name or ptr+1
local len = tonumber(C.strlen(name))
return name,len
end

Macro {
description="* Select Duplicates FileName in Branch panel"; name="SDFN"; area="Shell";
action=function()
local sz=far.InputBox(nil,"Select duplicates","Compare first symbols: ",nil,"999",4,nil,F.FIB_NONE)
if sz then
sz = tonumber(sz)
local pBL=ffi.cast("BOOL*",1)
local pc=ffi.cast("struct PluginStartupInfo*",far.CPluginStartupInfo()).PanelControl
local pin=panel.GetPanelInfo(nil,1)
if bit.band(pin.Flags,F.PFLAGS_SELECTEDFIRST)>0 then Keys("ShiftF12") end
pc(PANEL_ACTIVE,"FCTL_SETNUMERICSORT",0,nil)
pc(PANEL_ACTIVE,"FCTL_SETCASESENSITIVESORT",0,nil)
if pin.SortMode~=F.SM_NAME then panel.SetSortMode(nil,1,F.SM_NAME) end
local sid,sel,j,fn0,fn1,st0,ln0,st1,ln1,t0 = 0,{},0,"","",0,0,0,0,far.FarClock()
pc(PANEL_ACTIVE,"FCTL_BEGINSELECTION",0,nil)
for i=1,pin.ItemsNumber do
fn0=fn1
st1,ln1=StartAndLen(panel.GetPanelItem(nil,1,i).FileName)
fn1=ffi.string(st1,ln1)
if C._strnicmp(fn1,fn0,sz)==0 then
if i>j then
pc(PANEL_ACTIVE,"FCTL_SETSELECTION",i-2,pBL)
table.insert(sel,{fn0,1})
sid=1
end
pc(PANEL_ACTIVE,"FCTL_SETSELECTION",i-1,pBL)
j,sid=i+1,sid+1
sel[#sel][2]=sid
end
end
pc(PANEL_ACTIVE,"FCTL_ENDSELECTION",0,nil)
pc(PANEL_ACTIVE,"FCTL_REDRAWPANEL",0,nil)
table.sort(sel,function(a,b) return a[2]>b[2] end)
local s=""
for i=1,#sel do s=s..sel[i][2].."\t"..sel[i][1].."\n" end
fwrite(s,"Z:\\Temp\\Report.txt")
Keys("ShiftF12")
msgbox("SDFN","mcs: "..far.FarClock()-t0.."\n\nUse ShiftF12 for sort")
end
end;
}
Автор: shmuz2
Дата сообщения: 05.05.2016 19:01
Alexyz21

Цитата:
Может господин 17-й самурай может расписать panel.GetPanelItem(nil,1,i).FileName на lua с FAR API?

Достали уже всех, сделал. И да, время на это затратил.
https://www.sendspace.com/file/iovbpe
В этом файле расписано. Файл запаролен. Напомните через недельку-другую, дам пароль.
Автор: Alexyz21
Дата сообщения: 05.05.2016 19:16
Так то ж лучше как пример в мануал. И лучше сейчас, а то через недельку-другую скажете что пароль забыли А время мы все тратим - карма требует жертв
Автор: shmuz2
Дата сообщения: 05.05.2016 19:30

Цитата:
а то через недельку-другую скажете что пароль забыли

Пароль лежит у меня рядом в отдельном файле. Если диск или я не сдохнем, будет вам пароль.
Автор: Alexyz21
Дата сообщения: 05.05.2016 20:31

Цитата:
Пароль лежит у меня рядом в отдельном файле. Если диск или я не сдохнем, будет вам пароль.

Да-а... Насчёт того, что помощи не дождёшься, каюсь - был не прав!
Автор: Angel_Ka
Дата сообщения: 05.05.2016 20:51
shmuz2

Цитата:
Если плагину не хватает памяти, ничего с этим не поделаешь.

Спасибо за информацию! Определённость однозначно полезнее неопределённости. И нам в декабре обещают новые машины — попробую выклянчить к ним дополнительные линейки.

Цитата:
Попробуйте сделать так (расширение .temp, имя не важно):
dir /b /s /a-d > file.temp
Затем нажать Enter на file.temp. Не будет ли это быстрее?

Благодарю Вас за ценный совет! Попробовал трижды на относительно небольших базах. Вероятно у Вас в Фаре ассоциация на .temp? А я делал через tmp:file.temp и получается, что так даже чуть-чуть помедленне чем напрямую. При этом совет Ваш в копилку положу — он пригодится, когда надо будет делать совсем без вывода хода выполнения команды на консоль, а файл список формировать в другой папке.

Alexyz21

Цитата:
С выделением по совпадению N первых символов

Очень хорошо! Даже отлично! И очень удобно!
Почти совсем то, что надо. Макрос на бранче маленькой тестовой базы пометил все искомые парные файлы (один из пары с "чистым" именем, а другой — с вкраплённым в имя маркером). Однако он пометил также и файлы с полностью идентичными именами, а вот их бы в данном случае надо было бы исключать из пометки, то есть не помечать их.


Цитата:
True Branch не подходит, или он медленный?

Он, к сожалению, бузит. И может быть это из-за Win10.


Цитата:
А! LF Search позволяет делать предварительный отбор.

Этого не понял. Подскажите, пожалуйста, что Вы здесь имеете ввиду?


Добавлено:
shmuz2
Нижайше ходатайствую перед Вами об оперативной выдаче пароля Alexyz21, как отзывчивому и талантливому макросописателю и в целях последовательного наращивания мощностей Фара!
Автор: Alexyz21
Дата сообщения: 05.05.2016 21:20

Цитата:
Однако он пометил также и файлы с полностью идентичными именами, а вот их бы в данном случае надо было бы исключать из пометки, то есть не помечать их.

Алгоритм следующий - выбираем с указанием N символов, ShiftF12 - возвращаем выделенные на свои места, Grey* - инвертируем выделение, выбираем с 999 символами, инвертируем выделение.

Альтернатива - сделать не установку выделения, а инверсию состояния выделения, тогда выбираем N символов, затем 999, исключая таким образом полные дубликаты. Время отработки будет дольше, чем тискать вручную 2 раза Grey*, насколько дольше - сказать сложно. Хотя можно сделать проще - добавить checkbox [x] не выделять полные дубликаты, тогда будет более привычно.

Добавлено:

Цитата:
Нижайше ходатайствую перед Вами об оперативной выдаче пароля Alexyz21, как отзывчивому и талантливому макросописателю и в целях последовательного наращивания мощностей Фара!

Не надо вмешиваться в процесс воспитания - я посмотрю на них, когда им будет по полтиннику и как в таком возрасте они будут "влёт" усваивать совершенно новые дисциплины. Я в бытность учёбы в универе не понимал одногруппников, когда они говорили - читаю учебник по вышке и меня в сон клонит... Зато теперь я их отлично понимаю - также читаю - не понимаю, начинает в сон клонить. Чуть пересидел за ПК - глазное давление, головная боль на день-два - красота!

Добавлено:
И... кончайте переслащивать - уж точно не талантливый, да и насчёт отзывчивости слишком сильно сказано.
Автор: shmuz2
Дата сообщения: 05.05.2016 22:01

Цитата:
я посмотрю на них, когда им будет по полтиннику и как в таком возрасте они будут "влёт" усваивать совершенно новые дисциплины

Да речь-то совсем не о талантах и успехах, а о том, что некоторые товарищи заявляют, что им-де не помогают в форуме (тогда как, например, я помогал вам десятки раз). Это называется эгоизм (типа, мне положено) и неблагодарность.

И вроде бы сегодня только разъяснял, почему не всегда возможно помочь. Если своих дел невпроворот, а тут надо сесть на час возиться с кодом, чтобы помочь кому-то в форуме - меня поймут? начальник на работе или домашние?
Автор: Alexyz21
Дата сообщения: 05.05.2016 22:22
shmuz2
сказано мною об отсутствии помощи было не конкретно в ваш адрес, а в "общем" и именно потому, что у всех высокая загрузка. Не вижу я смысла размазывать по некольким темам - и пользователей с гулькин нос, да и специфика фара всё равно будет периодически "стучаться". Кто там будет отвечать - 1.5 пользователя? Вялотекущая тема обречена. Но это моё имхо.
Автор: Angel_Ka
Дата сообщения: 05.05.2016 22:52
Alexyz21

Цитата:
добавить checkbox [x] не выделять полные дубликаты

А вот это, наверное, было бы совсем то, что нужно.
Автор: VictorVG4
Дата сообщения: 05.05.2016 23:01
Angel_Ka
Alexyz21
shmuz2

Мабуть кому и ещё кому пользу сослужит - xdoc2txt v2.0.16 от 26.04.2016 xdoc2txt216.zip. Не стал ждать новый билд, добавил апдейтом. А если кому нужен полный вариант (CLI/COM/DLL) то в моём архиве. Документацию переводил роботом - автор пишет только на своём родном японском так что если что не обессудьте. Замечено что с кириллицей кроме как в RTF дружит не лучшим образом. Со скриптом коим её зову думаю как сделать так, чтобы можно было подсунуть на вход программе времянку вытащенную из архива - сейчас он этого не умеет.
Автор: Angel_Ka
Дата сообщения: 05.05.2016 23:53
VictorVG4

Цитата:
xdoc2txt v2.0.16 от 26.04.2016

Большое спасибо! Регулярно этой утилитой пользуюсь, а обновления беру из Ваших сборок.
Цитата:
Замечено что с кириллицей кроме как в RTF дружит не лучшим образом.

На утилиту у меня на маски *.xls,*.xlsx,*.csv,*.do[ct][mx] давняя ассоциация настроена: edit:< xdoc2txt.exe -8 "!\!.!". И сейчас перепроверил — кириллические .doc и .docx читает превосходно.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: оффтоп


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.