Выделение случайной выборки файлов в каталоге

Столкнулись с проблемой в использовании Far? Здесь можно получить помощь.
Novosedoff
Posts: 69
Joined: Wed 02 Mar, 2011 19:31
Has thanked: 43 times

Выделение случайной выборки файлов в каталоге

Post by Novosedoff »

Приветствую.

Возникла задачка выделить для копирования случайную выборку файлов внутри определенного каталога, указав просто размер выборки. Например, 5% или 10% файлов от числа содержащихся в каталоге. В каталог архивируются некоторые промежуточные результаты мониторинга. Сформировать такой sample нужно просто для целей контроля.

Существует ли решение в виде плагина или скрипта, чтобы сделать это быстро?

Заранее благодарю за помощь.
Last edited by Novosedoff on Sat 19 Jun, 2021 23:08, edited 1 time in total.
Покажи мне список твоих плагинов, и я скажу кто ты...
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Выделение случайной выборки файлов в каталоге

Post by Shmuel »

Novosedoff wrote: Sat 19 Jun, 2021 23:07 Существует ли решение в виде плагина или скрипта, чтобы сделать это быстро?
Готовое решение мне неизвестно. В то же время задача элементарная, можно сделать макросом, используя math.random, и (возможно) даже батч-файлом, используя %RANDOM%.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Выделение случайной выборки файлов в каталоге

Post by buniak_a_h »

Novosedoff wrote: Sat 19 Jun, 2021 23:07 В каталог архивируются некоторые промежуточные результаты мониторинга.
Вот это я не понял…
Novosedoff
Posts: 69
Joined: Wed 02 Mar, 2011 19:31
Has thanked: 43 times

Выделение случайной выборки файлов в каталоге

Post by Novosedoff »

buniak_a_h wrote: Sun 20 Jun, 2021 01:19 Вот это я не понял…
Картинки там, но не суть. Главное чтоб случайное выделение не подсвечивало только подряд идущие файлы
Покажи мне список твоих плагинов, и я скажу кто ты...
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Выделение случайной выборки файлов в каталоге

Post by buniak_a_h »

Вот такой макрос решает Вашу задачу:
  1. local function RandSel()
  2.  
  3.  local aF = {}
  4.  
  5.  do
  6.  
  7.   local n = APanel.ItemCount
  8.  
  9.   for i=1,n do
  10.  
  11.    if band(Panel.Item(0, i, 2), 0x00000010) == 0 then
  12.  
  13.     aF[#aF+1] = Panel.Item(0, i, 0)
  14.  
  15.    end
  16.  
  17.   end
  18.  
  19.  end
  20.  
  21.  local P = tonumber(far.InputBox('', 'Случайная отметка', 'Введите процент файлов')) or 0
  22.  
  23.  if P < 1 or P > 99 then return end
  24.  
  25.  Panel.Select(0, 0)
  26.  
  27.  local nn = math.floor(#aF * P / 100)
  28.  
  29.  if nn == 0 then return end
  30.  
  31.  math.randomseed(Far.UpTime)
  32.  
  33.  local aSel = {}
  34.  
  35.  while #aSel < nn and #aF > 0 do
  36.  
  37.   local i=math.random(1,#aF)
  38.  
  39.   aSel[#aSel+1] = table.remove(aF, i)
  40.  
  41.  end
  42.  
  43.  Panel.Select(0,1,2,table.concat(aSel,'\n'))
  44.  
  45. end -- RandSel
  46.  
  47.  
  48.  
  49. Macro{
  50.  
  51.   id="F66943B0-60F2-48EE-8CA7-D5128B3E57C0";
  52.  
  53.   area="Shell";
  54.  
  55.   key="AltShiftAdd";
  56.  
  57.   description="Пометка случайных файлов";
  58.  
  59.   action=function(data) RandSel() end;
  60.  
  61. }
Макрос повешен на Alt+Shift+серый+
Novosedoff
Posts: 69
Joined: Wed 02 Mar, 2011 19:31
Has thanked: 43 times

Выделение случайной выборки файлов в каталоге

Post by Novosedoff »

Спасибо, только напомните пжста как макросы добавлять/активировать? Еще у меня на ноуте клавиша "серый+" - это клавиша "+" на доп.цифровой клавиатуре?
Last edited by Novosedoff on Sun 20 Jun, 2021 08:33, edited 2 times in total.
Покажи мне список твоих плагинов, и я скажу кто ты...
Novosedoff
Posts: 69
Joined: Wed 02 Mar, 2011 19:31
Has thanked: 43 times

Выделение случайной выборки файлов в каталоге

Post by Novosedoff »

Читаю справку по макросам
https://api.farmanager.com/ru/macro/index.html

Со второй попытки редактирую команду для сочетания клавиш AltShiftAdd: не пойму куда вставить текст написанного Вами кода? В Description что ли?
Attachments
111.jpg
Last edited by Novosedoff on Sun 20 Jun, 2021 09:53, edited 1 time in total.
Покажи мне список твоих плагинов, и я скажу кто ты...
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Выделение случайной выборки файлов в каталоге

Post by buniak_a_h »

Novosedoff wrote: Sun 20 Jun, 2021 09:52 напомните пжста как макросы добавлять/активировать?
Shift+F4 -> %FARPROFILE%\macros\scripts\RandSel.lua, CodePage выбрать 65001 (UTF-8)
В открывшийся редактор вставить текст макроса из сообщения
При необходимости заменить хоткей (значение 28-й строки). Если не знаете имён клавиш, наберите в ком.строке lua:=mf.waitkey()
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Выделение случайной выборки файлов в каталоге

Post by buniak_a_h »

Novosedoff wrote: Sun 20 Jun, 2021 09:52 Читаю справку по макросам…
Вы читаете справку по клавиатурным макросам, а я прислал Вам стационарный макрос. Соответственно, Ваш скриншот к стационарным макросам не имеет отношения.
P/S. Клавиатурные макросы - это очень ограниченный инструмент. Нужен только для замены последовательности нажатий на пимпочки одним нажатием. Ничего относительно серьёзного в них не сделать.
Last edited by buniak_a_h on Sun 20 Jun, 2021 10:19, edited 1 time in total.
Novosedoff
Posts: 69
Joined: Wed 02 Mar, 2011 19:31
Has thanked: 43 times

Выделение случайной выборки файлов в каталоге

Post by Novosedoff »

Супер! Заработало. Спасибо большое!
Покажи мне список твоих плагинов, и я скажу кто ты...
Novosedoff
Posts: 69
Joined: Wed 02 Mar, 2011 19:31
Has thanked: 43 times

Выделение случайной выборки файлов в каталоге

Post by Novosedoff »

Простите за любопытство, хотел поинтересоваться, каким образом генерируются id для макросов и плагинов? :)
Они как-то привязаны к коду или случайным образом генерируются? Их формат как-то предопределён или положение и количество дефисов тоже случайно?
buniak_a_h wrote: Sun 20 Jun, 2021 05:17 Macro{
  id="F66943B0-60F2-48EE-8CA7-D5128B3E57C0";
  area="Shell";
Покажи мне список твоих плагинов, и я скажу кто ты...
User avatar
Taciturn
Posts: 600
Joined: Thu 26 May, 2005 17:14
Location: Санкт-Петербург
Has thanked: 89 times
Been thanked: 31 times
Contact:

Выделение случайной выборки файлов в каталоге

Post by Taciturn »

User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Выделение случайной выборки файлов в каталоге

Post by buniak_a_h »

Novosedoff, ну и для генерации GUID-а используется такое выражение: win.Uuid(win.Uuid()). Это, вроде, гарантирует его уникальность, т.к. завязан на mac-адрес и время создания. Как минимум.
P/S. У меня сделан макрос, вставляющий "рыбу" макроса и других стандартных комбинаций. Заодно этот макрос и GUID генерирует.
Novosedoff
Posts: 69
Joined: Wed 02 Mar, 2011 19:31
Has thanked: 43 times

Выделение случайной выборки файлов в каталоге

Post by Novosedoff »

Спасибо. Скажите, а вынести этот макрос в пользовательское меню (которое вызывается через F2) как-то можно сделать? А то я если месяц что-то не использую, то забываю комбинацию клавиш для вызова.
Покажи мне список твоих плагинов, и я скажу кто ты...
Post Reply

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