[ruby-it] File.basename("xxx", "x*x") l'asterisco funziona?

Antonio Flamini iusimi a libero.it
Gio 25 Mar 2010 13:59:36 CET


Pietro Giorgianni wrote:
> Il 25 marzo 2010 11.17, Antonio Flamini <iusimi a libero.it> ha scritto:
>> Vorrei inserire in una combo la lista dei file archiviati, base
>> e differenziali, senza l'estensione.
>>
>> #leggo il percorso dei file dar da un file
>> @percorso=`cat "#{@file}"`
>> @percorso2=@percorso.split "\n"
>> @filename=`ls "#{@percorso2}"*.dar`
> 
> Primo consiglio: non usare comandi shell a meno di non esserne
> costretto: aumenta la probabilit� che qualcosa vada storto.
> 
> Secondo consiglio: non usare variabili d'istanza per valori
> temporanei: i vari percorso, percorso2 etc. non hanno motivo di
> esistere all'infuori del metodo corrente.
> 
> Una cosa che non ho capito: ogni riga del file di nome @file cosa
> contiene? Il nome dell'archivio senza numero e senza estensione, tipo:
> 
> ciccio
> 
> che sta per:
> ciccio.1.dar
> ciccio.2.dar
> ...
> 
> oppure qualcos'altro? In mezzo c'� pure il percorso?
> 
> Se contiene quello che credo io, potresti fare:
> nomi = File.open(@file) {|f| f.readlines}.map {|x| x.strip}
> nomi.each do |name|
>   files_della_singola_riga = Dir.glob "#{name}.*.dar"
>   # vedi sotto
> end
> 
> Di volta in volta files_della_singola_riga contiene una cosa tipo:
> ['/primo/percorso/ciccio.1.dar', '/primo/percorso/ciccio.2.dar',
> '/primo/percorso/ciccio.3.dar']
> A quel punto, cosa vuoi fare? Togliere sia il percorso che l'estensione 
> .dar?
>>> files_della_singola_riga.map {|x| File.basename(x, '.dar')}
> => ['ciccio.1', 'ciccio.2', 'ciccio.3']
> Vuoi tenere il percorso ma non l'estensione?
>>> files_della_singola_riga.map {|x| x.gsub(/\.dar$/, '')}
> => ['/primo/percorso/ciccio.1', '/primo/percorso/ciccio.2',
> '/primo/percorso/ciccio.3']
> Altro (speficicare)?
> 
> Nota che io uso map, che restituisce un array, ma se invece vuoi agire
> sul singolo elemento puoi usare each e fare qualcosa, ad esempio:
> 
> nomi = File.open(@file) {|f| f.readlines}
> nomi.each do |name|
>   Dir.glob("#{name.strip}.*.dar").each do |f|
>     puts "ecco il file cos� com'�: #{f}"
>     puts "ecco il file senza percorso e senza destinazione:
> #{File.basename f, '.dar'}"
>     puts "ecco invece il file col percorso e senza destinazione:
> #{f.gsub /\.dar$/, ''}"
>   end
> end
> 
> Se invece non ho proprio capito il problema, spiegalo pi� in dettaglio...
> 
> 
> pietro

Uso i comandi shell perché finora non ho letto nessuna guida, in 
italiano ma credo neanche inglese, che mi dica come sostituire i cmd 
shell.

Per le variabili hai ragione, ma siccome ho dovuto inserirne qualcuna in 
dei blocchi....per non sbagliarmi...ma gia vi avevo accennato che sono 
alle primissime armi.

@file è il percorso del file dove ho salvato il percorso della cartella 
dei file di backup. Mi rendo conto che gli split possano spiazzare però 
cuando avevo cominciato a scriverlo, provando con irb, non mi ricordo 
neanche più dove mi dava dei ritorni a capo, adesso, riprovando, sembra 
di no; scusate.
Il percorso del file mi serve per inserirlo, insieme al nome, in una 
combo e con i comandi -l -t -d fare delle verifiche al contenuto dei 
suddetti file; in unaltra per il file di riferimento per il backup 
differenziale, poi ci sarebbe altro che ora non ricordo perché ancora 
non ho imparato a preparare il lavoro prima.
L'unico file di cui devo leggere il contenuto è 
@file(@file=/home/utente/dir_backup/), con questo posso leggere il 
contenuto della cartella dove sono contenuti i file di backup(`ls 
"#{@file}"*.dar), quindi eliminare l'estensione ".n.dar" e inserire i 
nomi dei file in una combo. Dove mi servirà anche il percorso inserirò 
la variabile percorso a fianco della variabile nome_file.

I nomi degli archivi divisi in slices sono: nome.1.dar nome.2.dar etc. 
io devo togliere .n.dar è per questo che credevo, come con shell, di 
poter sostituire il numero con * però non funziona, qualsiasi cosa 
inserisco al posto del numero esatto mi restituisce il file con tutta 
l'estensione.

Ora devo uscire, però nel pomeriggio proverò il codice che mi hai 
scritto poi posterò il risultato.
Grazie per l'aiuto Pietro


-- 
Posted via http://www.ruby-forum.com/.


More information about the Ml mailing list