[ruby-it] File.basename("xxx", "x*x") l'asterisco funziona?
Pietro Giorgianni
giorgian a gmail.com
Gio 25 Mar 2010 13:57:27 CET
Il 25 marzo 2010 13.24, Antonio Flamini <iusimi a libero.it> ha scritto:
> @file è il percorso di un file in cui ho salvato il percorso della
> cartella dove sono contenuti i file di backup. Lo so, è un po contorto,
> infatti tutte le volte che ci ho rimesso le mani, e sono tantissime, ho
> dovuto ricominciare tutto da capo, non ci capivo niente neanche io.
> Per quanto riguarda il metodo gsub lo proverò però siccome i numeri
> dell'estensione cambiano...accetta l'asterisco?
Dunque, @file contiene directory contenenti file che finiscono in
.<numero>.dar, giusto?
nomi = File.open('elenco') {|f| f.readlines}.map {|x|
Dir.glob("#{x.strip}/*.dar").map {|y| File.basename(y).gsub
/\(.\d+)?\.dar$/, '' }.uniq }.flatten
(Scrivere tutto su un'unica riga è una cosa che non si fa, perché alla
fine non ci si capisce niente, però non ho resistito alla tentazione).
Ora nomi contiene un array dei nomi degli archivi; se ad esempio il
file di nome @file contiene:
/primo/path/
/secondo/path
e /primo/path/ contiene ecco.1.dar, ecco.2.dar, ecco.3.dar, prova.dar,
mentre secondo/path contiene vedi.1.dar, vedi.3.dar, vedi.4.dar, nome
varrà:
['ecco', 'prova', 'vedi']
Con File.basename tolgo il path, poi con gsub /\.\d+\.dar$/, '' tolgo
.<numero>.dar e con uniq elimino le ripetizioni (perché altrimenti
troverei [ ecco', 'ecco', ecco', 'prova', 'vedi', 'vedi', 'vedi',
'vedi']).
File.basename potresti eliminarlo e usare solo regular expression, tipo così:
nomi = File.open('elenco') {|f| f.readlines}.collect {|x|
Dir.glob("#{x.strip}/*.dar").map {|y| y.gsub
/.*\/(.*?)(\.\d+)?\.dar$/, $1 }.uniq }.flatten
Spezzetta questa riga provando le varie parti per vedere l'effetto che fa.
pietro
More information about the Ml
mailing list