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

Pietro Giorgianni giorgian a gmail.com
Gio 25 Mar 2010 12:02:56 CET


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


More information about the Ml mailing list