Пометить на панелях файлы с одинаковым содержимым независимо от имён

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
buniak_a_h
Posts: 2564
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 140 times
Been thanked: 332 times
Contact:

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by buniak_a_h »

Novosedoff wrote: Fri 01 Jan, 2021 19:14 Более общая задача в моём случае выглядела так: есть такая утилитка FastPhotoTagger, которая позволяет добавлять ключевые слова к картинкам и фоткам. Я обычно когда с планшета читаю, то скриншочу те страницы, которые мне кажутся интересными. А потом кидаю их сразу в облако. В облаке созданы несколько тематических папок (например, История, Финансы, Демография и тд) и порой я, в зависимости от содержания страницы, могу закинуть скриншот в 1-2-3 папки одновременно. И вот здесь начинаются проблемы, потому что потом когда позднее я начинаю работать с этими страницами и добавлять к ним метатаги для более быстрого поиска, то порой сталкиваюсь с тем, что одна и та же картинка оказалась в разных облачных папках под разными именами (обычно это связано с тем, что я в спешке присваиваю файлам простые типизированные имена типа 111.jpg - подозреваю, что Google-облако в этом случае видит что в папке, скажем, История уже 33 файла с таким именем и индексирует новый файл добавляя (34) в скобках, а в другой папке может быть 55 таких файлов и, соответственно, туда Google поместит его добавив на конце имени "(56)", хотя честно говоря алгоритм присвоения имён в облаке Google мне самому непонятен)! Вот здесь утилиты для Far являются незаменимым подспорьем. Это избавляет от необходимости по несколько раз заниматься метатагированием одних и тех же картинок, сокращая работу в среднем 1.5-2 раза
Я сделал маленький макрос, группирующий (пока - в памяти) одинаковые файлы на двух панелях и отмечающий их. Что делать с этим дальше, я не очень понял. Например, если Вам надо добавить тег в файл на активной панели и другой тег в такой же файл на пассивной панели, и Ваша утилита FastPhotoTagger позволяет это делать через параметры командной строки, то эта задача решается просто (я не доделывал до этого, но там дальше легко). Другой вариант - если у Вас есть скрипт на любом языке сценариев (например, на bat), то его можно было бы вызвать, передав ему имя файла на активной и на пассивной панели. Или список одинаковых файлов на активной и на пассивной панели (если файл не уникален даже в пределах панели) Хорошо бы Вы уточнили задачку.
Во вложении - макрос. Доступен из меню плагинов («Сравнение панелей по содержимому»). Попробуйте хотя бы пока это.
ContentCompare.lua.7z
Распаковать в любой подкаталог каталога %FARPROFILE%\Macros\Scripts
(1.68 KiB) Downloaded 31 times
Last edited by HaRT on Thu 14 Jan, 2021 23:14, edited 1 time in total.
Reason: Тема отделена
Novosedoff
Posts: 48
Joined: Wed 02 Mar, 2011 19:31
Has thanked: 27 times

Как выделить на панели элементы с именами из (текстового) файла

Post by Novosedoff »



Провёл испытание вашего скрипта. В одной панели было 262 картинки одной из папок, в другой - 574 картинки из другой папки. Скрипт сработал великолепно и нашёл 51 одинаковых файлов, половина из которых была с разными именами. Без вашего скрипта мне пришлось бы запускать в каждой папке Integrity Checker, а потом искать совпадения путём матчинга списков в Excel, т.е. с кучей ручных трудозатрат. Сняли с меня целую гору своей небольшой автоматизацией, за что Вам огромное спасибо. Каких-то иных действий в продолжение, как мне видится, не требуется. Задача полностью решена.
Last edited by Novosedoff on Thu 14 Jan, 2021 06:37, edited 1 time in total.
User avatar
Ann
Posts: 429
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 90 times
Been thanked: 14 times

Как выделить на панели элементы с именами из (текстового) файла

Post by Ann »

buniak_a_h wrote: Fri 08 Jan, 2021 04:48 Я сделал маленький макрос, группирующий (пока - в памяти) одинаковые файлы на двух панелях и отмечающий их. ... Доступен из меню плагинов («Сравнение панелей по содержимому»). Попробуйте хотя бы пока это.
ContentCompare.lua.7z
Эвент весьма полезный. Спасибо!
1. Желательно бы сделать его вызов и "обычным образом" тоже (так будет побыстрее).
2. При наличии на панели файла нулевого размера вылезает ошибка.
buniak_a_h
Posts: 2564
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 140 times
Been thanked: 332 times
Contact:

Как выделить на панели элементы с именами из (текстового) файла

Post by buniak_a_h »

Ann wrote: Thu 14 Jan, 2021 15:48 1. Желательно бы сделать его вызов и "обычным образом" тоже (так будет побыстрее).
Это Вы можете сделать простым клавиатурным макросом. Просто у меня хоткеев уже почти не осталось, а настройку делать влом.
Я предполагал, что кто-нить захочет вызов по хоткею. Поэтому для удобства доделки выделил основной функционал в функцию CmpFunc().
Ann wrote: Thu 14 Jan, 2021 15:48 2. При наличии на панели файла нулевого размера вылезает ошибка.
Видимо, вылет в плагине Integrity Checker. Ок, сделаю перехват такой ситуации. Заодно сделаю "рыбу" для макроса, вызываемого по хоткею. Вставить конкретный хоткей Вы, наверно, сможете сами ;-)
buniak_a_h
Posts: 2564
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 140 times
Been thanked: 332 times
Contact:

Как выделить на панели элементы с именами из (текстового) файла

Post by buniak_a_h »

Ann, попробуйте то, что во вложении. Там требуется переделать "под себя" две строки (83 и 86); помечены комментариями
Attachments
ContentCompare.lua.7z
(1.86 KiB) Downloaded 21 times
User avatar
Ann
Posts: 429
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 90 times
Been thanked: 14 times

Как выделить на панели элементы с именами из (текстового) файла

Post by Ann »

buniak_a_h wrote: Thu 14 Jan, 2021 17:24 попробуйте то, что во вложении.
Большое спасибо за оперативную отзывчивость. Теперь очень лучше.

При этом: при наличии на панели файл(а/ов) нулевого размера он/они ложно помечаются.
buniak_a_h
Posts: 2564
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 140 times
Been thanked: 332 times
Contact:

Как выделить на панели элементы с именами из (текстового) файла

Post by buniak_a_h »

Ann wrote: Thu 14 Jan, 2021 22:23 при наличии на панели файл(а/ов) нулевого размера он/они ложно помечаются.
А почему "ложно"? Я проверил: отмечаются только если на обеих панелях есть пустые файлы. Но они же совпадают по содержимому? Потому и отмечаются.
А что, не надо было?
User avatar
Ann
Posts: 429
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 90 times
Been thanked: 14 times

Как выделить на панели элементы с именами из (текстового) файла

Post by Ann »

buniak_a_h wrote: Thu 14 Jan, 2021 22:46 А почему "ложно"?
Потому что у меня помечаются и тогда, когда на одной панели есть "нулевые" файлы, а на другой — нет или это другие "нулевые".
Сугубо для моей практики порожние файлы было бы целесообразнее вообще игнорировать.
buniak_a_h
Posts: 2564
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 140 times
Been thanked: 332 times
Contact:

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by buniak_a_h »

Ann wrote: Thu 14 Jan, 2021 23:11 у меня помечаются и тогда, когда на одной панели есть "нулевые" файлы, а на другой — нет
Такие у меня точно не выделяются
Ann wrote: Thu 14 Jan, 2021 23:11 или это другие "нулевые"
Как в том диалоге: инструктор - ученику на водителя: "Поворачиваем направо. Нет, на другое право"
Как это - "другой нулевой"?
Ну да ладно. Для скорости поправьте у себя: вместо строки
if not Item.FileAttributes:match"d" then
(это примерно 38-я строка; точно не могу с казать - у меня другой скрипт)
запишите строку:
if not Item.FileAttributes:match"d" and Item.FileSize > 0 then
User avatar
HaRT
Moderator
Posts: 9695
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 124 times
Been thanked: 254 times

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by HaRT »

buniak_a_h wrote: Thu 14 Jan, 2021 22:46 они же совпадают по содержимому? Потому и отмечаются.
Поддерживаю
Ann wrote: Thu 14 Jan, 2021 23:11 Сугубо для моей практики порожние файлы было бы целесообразнее вообще игнорировать.
Снять выделение с файлов нулевого размера — это просто. Думаю, не стоит ради них нарушать логическую стройность общего скрипта.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
Ann
Posts: 429
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 90 times
Been thanked: 14 times

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by Ann »

HaRT wrote: Thu 14 Jan, 2021 23:47 Снять выделение с файлов нулевого размера — это просто. Думаю, не стоит ради них нарушать логическую стройность общего скрипта.
Возражений нет. Мною было подчёркнуто, что речь о субъективной практике.
buniak_a_h wrote: Thu 14 Jan, 2021 23:37 Для скорости поправьте у себя: вместо строки
if not Item.FileAttributes:match"d" then
запишите строку:
if not Item.FileAttributes:match"d" and Item.FileSize > 0 then
Полное удовлетворение и огромная благодарность.
Novosedoff
Posts: 48
Joined: Wed 02 Mar, 2011 19:31
Has thanked: 27 times

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by Novosedoff »



Кстати, не нашёл в интернете в доступном описании по языку lua описание использованной Вами в скрипте команды tin ..
Last edited by HaRT on Fri 15 Jan, 2021 01:20, edited 2 times in total.
Reason: Спрятан офтопик
2useven10
Posts: 4230
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 6 times
Been thanked: 210 times

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by 2useven10 »

Last edited by 2useven10 on Fri 15 Jan, 2021 01:22, edited 1 time in total.
citRiks
Posts: 1316
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 388 times
Been thanked: 80 times

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by citRiks »

buniak_a_h,
а есть идеи как отменить calculations не выходя из ФАРа ?
А то он пока не досчитает не успокоится..
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
citRiks
Posts: 1316
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 388 times
Been thanked: 80 times

Пометить на панелях файлы с одинаковым содержимым независимо от имён

Post by citRiks »

Впрочем, решаемо:

Code: Select all

local function CreateList(_Panel, WhatPanel, whatpanel)
	local Result = {}
	local res_status
	local Path = _Panel.Path..(_Panel.Path:sub(-1) == '\\' and '' or '\\')
	local i1 = 1
	local i2 = _Panel.Selected and _Panel.SelCount or _Panel.ItemCount
	local GetFun = _Panel.Selected and panel.GetSelectedPanelItem or panel.GetPanelItem
	for i = i1, i2 do
		local Item = GetFun(nil, whatpanel, i)
		if not Item.FileAttributes:match("d")
		then
			local	FullName = Path..Item.FileName
			local	plgin_call_res = Plugin.SyncCall("E186306E-3B0D-48C1-9668-ED7CF64C0E65", "gethash", 'SHA-512', FullName, true)
			if	plgin_call_res == "userabort"
			then	res_status = plgin_call_res
				break
			end
			local sKey = ('%.10d;%s'):format(
				Item.FileSize,
			--	Item.FileSize == 0 and (' '):rep(128) or
				plgin_call_res
					)
			if Result[sKey] == nil then Result[sKey] = { } end
			tin(Result[sKey], Item.FileName)
		end
	end
	return Result, res_status
end -- CreateList
.. и:

Code: Select all

	local AList, act_status
	local PList, pas_status
	AList, act_status = CreateList(APanel, 0, 1)
	if act_status == "userabort" then goto after_create_list end
	PList, pas_status = CreateList(PPanel, 1, 0)
	if pas_status == "userabort" then goto after_create_list end
	::after_create_list::
--	local ASelList, PSelList, KeyList = { }, { }, { }
	local ASelList, PSelList = { }, { }
Да, я знаю что GOTO это плохо, только не знаю почему :)
Думаю что так же как и со всем остальным,
в одних ситуациях это хорошо, а в других - плохо
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
Post Reply

Return to “Нужна помощь”