Size: a a a

Ruby, Rails, Hanami | dry-rb

2020 December 01

IS

Igor Shum in Ruby, Rails, Hanami | dry-rb
написать регулярку мб
источник

DG

Denis Gorbunov in Ruby, Rails, Hanami | dry-rb
выписал все файлы в массив

Dir.glob("#{target}/**/*").sort.each do |f| 
file = File.basename(f).match(/^([\w]+)\s\(([0-9\-\_]+)\)\.(\w+)/)
if !file.nil?
 list << {'name': file.captures[0], 'date': DateTime.strptime(file.captures[1], '%d_%m_%Y_%H-%M-%S'), 'file': f}
end
end


Теперь могу сравнить отдельно даты, и удалить тот файл, что меньше
но нужно сравнивать не все подряд, а только между файлами одного типа (name) с одним расширением
источник

DG

Denis Gorbunov in Ruby, Rails, Hanami | dry-rb
чую что в какие-то дебри пошел, но пока не вижу выход (
источник

MM

Mikhail Melnyk in Ruby, Rails, Hanami | dry-rb
Igor Shum
написать регулярку мб
Та не, зачем? Просто отсортировать список строк, и убрать не нужные.
источник

IS

Igor Shum in Ruby, Rails, Hanami | dry-rb
ну если просто то отсортируй и убери)
источник

IS

Igor Shum in Ruby, Rails, Hanami | dry-rb
а вдруг файл будет не с таким именем каким нужно и отсортируется не правильно
источник

MM

Mikhail Melnyk in Ruby, Rails, Hanami | dry-rb
Igor Shum
ну если просто то отсортируй и убери)
Ладно, наверное лучше регулярочку сначала, а потом сортить)
источник

SS

Sergii Serogin in Ruby, Rails, Hanami | dry-rb
Denis Gorbunov
выписал все файлы в массив

Dir.glob("#{target}/**/*").sort.each do |f| 
file = File.basename(f).match(/^([\w]+)\s\(([0-9\-\_]+)\)\.(\w+)/)
if !file.nil?
 list << {'name': file.captures[0], 'date': DateTime.strptime(file.captures[1], '%d_%m_%Y_%H-%M-%S'), 'file': f}
end
end


Теперь могу сравнить отдельно даты, и удалить тот файл, что меньше
но нужно сравнивать не все подряд, а только между файлами одного типа (name) с одним расширением
собери в хеш имя: дата
источник

SS

Sergii Serogin in Ruby, Rails, Hanami | dry-rb
ну а если таргет известно, я б вообще шелом сделал бы
источник

AA

Alex A in Ruby, Rails, Hanami | dry-rb
Sergii Serogin
ну а если таргет известно, я б вообще шелом сделал бы
я против шела, руби нагляднее и понятнее
источник

AA

Alex A in Ruby, Rails, Hanami | dry-rb
или ты только про удаление файлов?
источник

AI

Alex Iv in Ruby, Rails, Hanami | dry-rb
Denis Gorbunov
привет!

Прошу помощи 🙂 что-то я затупил с задачкой.. уже мозги раком встали, но никак не найду решение

Есть список файлов:
doc_client_locate_fact (25_12_2019_12-52-21).pdf
doc_client_locate_fact (26_12_2019_10-03-30).pdf
doc_client_locate_fact (26_12_2019_11-14-29).pdf
doc_client_locate_fact (26_12_2019_11-14-29).pdf.sig
doc_client_locate_fact (26_12_2019_12-17-12).pdf
doc_client_locate_fact (26_12_2019_12-17-12).pdf.sig
doc_client_locate_fact (26_12_2019_12-21-53).pdf
doc_executor_nomination (26_12_2019_11-08-24).pdf
doc_executor_nomination (26_12_2019_11-08-24).pdf.sig
doc_executor_nomination (26_12_2019_12-16-03).pdf
doc_executor_nomination (26_12_2019_12-16-03).pdf.sig
doc_executor_nomination (26_12_2019_12-19-32).pdf


в имени каждого файла указана дата.

Задача такая: для каждого типа файла (в данном случае doc_client_locate_fact или doc_executor_nomination) опеределить самый старший файл по дате из названия, остальные удалить.

Т.е. в результате должны остаться след файлы:
doc_client_locate_fact (26_12_2019_12-17-12).pdf.sig
doc_client_locate_fact (26_12_2019_12-21-53).pdf
doc_executor_nomination (26_12_2019_12-16-03).pdf.sig
doc_executor_nomination (26_12_2019_12-19-32).pdf
Что-то вроде group_by(&:itself).transform_values(…)
Я про сортировку хеша
источник

SS

Sergii Serogin in Ruby, Rails, Hanami | dry-rb
инжект же
источник

AI

Alex Iv in Ruby, Rails, Hanami | dry-rb
@DenisGorbunov
*,b,c = s.match(/(\d{2}.\d{2}.\d{4}).(\d{2}.\d{2}.\d{2})/).to_a
источник

АД

Антон Дьячук... in Ruby, Rails, Hanami | dry-rb
Denis Gorbunov
чую что в какие-то дебри пошел, но пока не вижу выход (
А что конкретно не получается?
источник

SS

Sergii Serogin in Ruby, Rails, Hanami | dry-rb
некрасиво, говорит, выходит 🙂
источник

SS

Sergii Serogin in Ruby, Rails, Hanami | dry-rb
save_list = Dir.glob("#{target}/**/*").inject({}){ |_h, filename|
   base, date, rest = filename.match(/^([\w]+)\s\(([0-9\-\_]+)\)\.(\w+)/).to_a
   base += rest
   _h[base] = {file: file, date: date} if !list[base] || list[base] && list[base][:date] > date
   _h
 end.map{|x,y| y[:file]}

что-то такое,    тоже не очень єлегантно
источник

SS

Sergii Serogin in Ruby, Rails, Hanami | dry-rb
поправил)
источник

SS

Sergii Serogin in Ruby, Rails, Hanami | dry-rb
ну и второй проход, удалять все что   шевелится не в списке
источник

DM

Denis Misiurca in Ruby, Rails, Hanami | dry-rb
хм…
источник