[ruby-it] File.basename("xxx", "x*x") l'asterisco funziona?
Antonio Flamini
iusimi a libero.it
Sab 27 Mar 2010 14:48:32 CET
Pietro Giorgianni wrote:
> Il 27 marzo 2010 11.44, Antonio Flamini <iusimi a libero.it> ha scritto:
>
>> Immagino che per 'elenco' tu intenda un file contenente la lista dei
>> file di backup, per� non � cosi: il file che devo leggere contiene il
>> percorso della cartella contenente gli stessi file di backup.
>
> E invece no, per elenco intendevo la lista dei *path* di file db, e
> quindi *� cos�*: semplicemente la tua � una lista con un solo
> elemento, non cambia assolutamente nulla.
>
>> Comunque ho provato le linee che mi hai scritto (due giorni!), per� mi
>> da un errore di compilazione proprio su gsub;
> Che errore ti
>d�?
> da quello che ho letto il pattern andrebbe
>> racchiuso tra �"()" e "[]", questo � quello che ne � venuto fuori:
>
> Assolutamente no!
>
>> path_file="/home/user/dar_file/file_backup.txt"
>> var_path=File.read path_file => /media/disk/
>> darfile_list=Dir.glob("#{var_path}*.dar") => ["data.1.dar", data.2.dar",
>> etc]
>> darfile_list.each do |y| File.basename(y).gsub(/[\(.\d+)?\.dar$]/, "")
>
>> L'ultima riga, gsub, ora non
>> mi da nessun errore per� mi restituisce i file di backup non solo con
>> l'estensione ma anche con il percorso
>
> Attenzione, l'ultima riga non fa assolutamente niente, giusta o
> sbagliata che sia la regexp.
> Infatti, lista.each &blocco applica il blocco a ogni elemento,
> buttando via il risultato.
> Quindi hai due
> possibilit�:1) usare lista.each {|x| x.gsub! ... } (infatti gsub! modifica
> l'oggetto, a differenza di gsub);
> 2) usare lista = lista.map {|x| x.gsub ... }
>
>
>
> Pietro
Perdonami però non ho molta familiarità con il gergo informatico. Per
spiegermi meglio:
## il file "backup.txt" contiene "/media/disk/"
path_file="/home/user/dar_file/file_backup.txt"
## questa inserisce in una variabile "/media/disk/
var_path=File.read path_file
## questa inserisce in un'altra variabile i nomi compresi di estensione
.1.dar, .2.dar, etc
darfile_list=Dir.glob("#{var_path}*.dar")
## o anche sostituito 'path_file' con "#{path_file}"
nomi = File.open('path_file') {|f| f.readlines}.map {|x|
Dir.glob("#{x.strip}/*.dar").map {|y| File.basename(y).gsub
/\(.\d+)?\.dar$/, '' }.uniq }.flatten
SyntaxError: compile error
(irb):10: unmatched ): /\(.\d+)?\.dar$/
(irb):10: syntax error, unexpected ',', expecting '}'
/\(.\d+)?\.dar$/, '' }.uniq }.flatten
^
from (irb):10
from :0
Il percorso o path contenuto in file_backup.txt è solo uno, contiene il
percorso dell'ultimo backup e viene aggiornato a ogni backup.
Posto che le variabili var_path e darfile_list non influiscono, le
suddette sono le linee di codice che ho provato e il seguente errore di
compilazione.
Ho provato a sostituire File.open('variabile') con tutte e tre le
variabili: path_file, var_path e darfile_list ma l'errore è sempre lo
stesso.
Lo so che gsub! cambia definitivamente il risultato però irb dovrebbe
restituirmi tutto.
Uno cosa non ho capito, gli apici '' }.uniq sono apici singoli che
segnano un posto vuoto per sostituire .n.dar o sono " (virgolette)? io
le ho sostituite con i 2 apici singoli perché non ho visto l'altro paio,
per fare la coppia.
--
Posted via http://www.ruby-forum.com/.
More information about the Ml
mailing list