Pietro G. wrote:
Il 25 marzo 2010 11.17, Antonio F. [email protected] 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}"
@[email protected] “\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