File.basename("xxx", "x*x") l'asterisco funziona?

Premetto che non sono un esperto di informatica, e con ruby ho iniziato
praticamente in questo momento.
Il mio problema, che ho cercato di risolvere anche con infinite ricerche
in internet ma senza risultato, e che vi sembrerà roba da asilo (sic!)
neanche da elementari è il seguente: ho creato una interfaccia grafica
per il programma di archiviazione Dar (datosi che è da cualche tempo che
dargui non mi funziona); ci ho rimesso le mani moltissime volte per
cercare di snellirlo e migliorarlo…lasciamo stare. Vorrei inserire in
una combo la lista dei file archiviati, base e differenziali, senza
l’estensione. Sono riuscito soltanto ad inserire il primo e l’ultimo,
con first e last, e neanche cosi…sempre per il numero, l’asterisco
sembra non funzionare. Vi posto le linee interessate.

#leggo il percorso dei file dar da un file
@percorso=cat "#{@file}"
@[email protected] “\n”
@filename=ls "#{@percorso2}"*.dar
@[email protected]e.split “\n”
@[email protected]
@file_first=File.basename("#{@filename3}", “.1.dar”)
@[email protected]_a.last
@file_last=File.basename("#{@filename3}", “.1.dar”)

Ho provato con: each do, for i in, etc, senza risultato (sono sicuro che
si può fare ma non sono ancora a questo livello), alla fine ho pensato
ha questo:

@var_l1=File.basename("#{@filename2[0]}", “.*.dar”)#ho anche
provato:[0-9] e altro
@var_l2=File.basename("#{@filename2[1]}", “”)
@var_l3=File.basename("#{@filename2[2]}", “”)
@var_l4=File.basename("#{@filename2[3]}", “”)
@var_l5=File.basename("#{@filename2[4]}", “”)

se al posto del numero inserisco l’asterisco o altro, mi restituisce il
file con tutta l’estensione. Ormai sapere perché l’asterisco non
funziona è diventata una questione di principio. Grazie a tutti

le api di ruby dicono:

Returns the last component of the filename given in file_name, which
must be formed using forward slashes (``/’’) regardless of the separator
used on the local file system. If suffix is given and present at the end
of file_name, it is removed.

File.basename("/home/gumby/work/ruby.rb") #=> “ruby.rb”
File.basename("/home/gumby/work/ruby.rb", “.rb”) #=> “ruby”

puoi postare come sono i nomi file e cosa c’è nel file @ file ?

per altro così a occhio (immagino tu usi linux) se usi il comando ls
“#{@percorso2}”*.dar ti restituisce l’elenco file senza il path quindi
fare basename non ti serve puoi fare direttamente
filename2.gsub(’.1.dar’, ‘’) o una regex per togliere qualunque
carattere al posto di 1 … (che è quasi la stessa cosa che fare
basename con il parametro estensione)

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

Alessandro S. wrote:

le api di ruby dicono:

Returns the last component of the filename given in file_name, which
must be formed using forward slashes (``/’’) regardless of the separator
used on the local file system. If suffix is given and present at the end
of file_name, it is removed.

File.basename("/home/gumby/work/ruby.rb") #=> “ruby.rb”
File.basename("/home/gumby/work/ruby.rb", “.rb”) #=> “ruby”

puoi postare come sono i nomi file e cosa c’è nel file @ file ?

per altro così a occhio (immagino tu usi linux) se usi il comando ls
“#{@percorso2}”*.dar ti restituisce l’elenco file senza il path quindi
fare basename non ti serve puoi fare direttamente
filename2.gsub(’.1.dar’, ‘’) o una regex per togliere qualunque
carattere al posto di 1 … (che è quasi la stessa cosa che fare
basename con il parametro estensione)

Mi scuso per il ritardo. Quelle api di ruby le avevo gia lette, ma il
problema è che i file Dar, se divisi in slices hanno delle estensioni
tipo “nome.1.dar - .2.dar” etc.
@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?
Ora devo uscire; mi connetterò più tardi e ti farò sapere. Comunque
grazie.

Il 25 marzo 2010 13.24, Antonio F. [email protected] 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
..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
..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

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

Il 25 marzo 2010 18.02, Antonio F. [email protected] ha scritto:

Il cat serve per questo, salvare il percorso del nuovo backup in una
variabile per poi, con ls #{variabile_con_il_percorso}*.dar, avere una
lista dei file di backup.

Invece del cat puoi fare:
File.open(nomedelfile, ‘w’) {|f| f.write percorso }
Per non usare ls c’è Dir.glob, come hai visto.

Ormai è solo una curiosità: in File.basename("#{var}", “.*.dar”)
l’asterisco non funzionerà mai?

Mai dire mai, ma attualmente non funziona e, a meno che qualcuno non
decida di implementarlo così, continuerà a non funzionare anche in
futuro.

Se hai tempo di correggere le linee che mi hai scritto
potrò confrontarle con le mie.

Non mi sembra ci sia niente da correggere…

pietro

Pietro G. wrote:

Il 25 marzo 2010 13.24, Antonio F. [email protected] 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
..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
..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

Scusami Pietro, la colpa è mia, mi sono espresso male; dovevo scrivere:
@file(@file=/home/utente/dir_backup/file.txt). Quando faccio un backup
devo salvare il percorso della cartella in cui salvo i file di backup
(cioè .n.dar) in un file, perché non sempre si fa il backup nella stessa
cartella, e per memorizzare questo percorso non ho trovato di meglio che
creare un file (file.txt di cui sopra) e scriverci dentro il percorso
della cartella contenente i file .n.dar; voglio dire che il file
“file.txt” contiene la scritta: /home/utente/dir_file_di_backup/, o
meglio ancora: /media/disk, perché l’altro percorso è quello di prova.
Tutto questo ai fini del ripristino.
Il cat serve per questo, salvare il percorso del nuovo backup in una
variabile per poi, con ls #{variabile_con_il_percorso}.dar, avere una
lista dei file di backup.
Sapevo che il mio metodo era a dir poco aggrovigliato pero…come si
dice…nessuno nasce imparato.
Comunque credo che anche in ruby i dati si salvano nei file, o no?
Ormai è solo una curiosità : in File.basename("#{var}", ".
.dar")
l’asterisco non funzionerà mai?
Proverò il tuo codice, naturalmente cambiando quello che ce da cambiare
e posterò il risultato, domani spero. Se hai tempo di correggere le
linee che mi hai scritto potrò confrontarle con le mie.
In tutti i casi ti ringrazio per l’aiuto.

antonio

Pietro G. wrote:

Il 25 marzo 2010 18.02, Antonio F. [email protected] ha scritto:

Il cat serve per questo, salvare il percorso del nuovo backup in una
variabile per poi, con ls #{variabile_con_il_percorso}*.dar, avere una
lista dei file di backup.

Invece del cat puoi fare:
File.open(nomedelfile, ‘w’) {|f| f.write percorso }
Per non usare ls c’� Dir.glob, come hai visto.

Ormai � solo una curiosit�: in File.basename("#{var}", “.*.dar”)
l’asterisco non funzioner� mai?

Mai dire mai, ma attualmente non funziona e, a meno che qualcuno non
decida di implementarlo cos�, continuer� a non funzionare anche in
futuro.

Se hai tempo di correggere le linee che mi hai scritto
potr� confrontarle con le mie.

Non mi sembra ci sia niente da correggere…

pietro

nomi = File.open(‘elenco’) {|f| f.readlines}.map {|x|

Dir.glob("#{x.strip}/*.dar").map {|y| File.basename(y).gsub
/(.\d+)?.dar$/, ‘’ }.uniq }.flatten

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.
Comunque ho provato le linee che mi hai scritto (due giorni!), però mi
da un errore di compilazione proprio su gsub; allora ho fatto delle
modifiche, anche perché da quello che ho letto il pattern andrebbe
racchiuso tra “()” e “[]”, questo è quello che ne è venuto fuori:

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$]/, “”)

Come vedi invece di usare File.open ho usato File.read, e ora so che al
posto di ls posso usare Dir.glob (grazie!). 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, mentre che con File.basename
avevo come risultato il basename e basta.
Avevo pensato che invece di avere una lista infinita di file di bakup
avrei potuto conformarmi con il tenere solamente un numero limitato di
file, es. 5, e salvarli in una variabile con:

darfile_list.each do |x|
case x
when “data.1.dar”
var[0]=x
when
etc

o qualcosa del genere. Però credo di averci provato ma senza risultato.
Per cuanto riguarda le linee che mi hai scritto, e anche quelle che ho
modificato: dove ho sbagliato?

antonio

Il 27 marzo 2010 11.44, Antonio F. [email protected] 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

Pietro G. wrote:

Il 27 marzo 2010 11.44, Antonio F. [email protected] 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.

Il 27 marzo 2010 14.48, Antonio F. [email protected] ha scritto:

from :0
Ops! Hai ragione, ho sbagliato qualcosa nel ricopiare: l’espressione
giusta è /(.\d+)?.dar$/, non /(.\d+)?.dar$/ ; in pratica ho
invertito “(” e “”.

Lo so che gsub! cambia definitivamente il risultato però irb dovrebbe
restituirmi tutto.

No. Irb mostra il valore dell’espressione; nel caso di array.each
&block, il valore è l’array finale:

[1, 2, 3].each {|x| ‘ciao’}
=> [1, 2, 3]

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.

Sì, infatti sono due apici, cioè stringa vuota; non l’ho specificato
perché davo per scontato che avresti fatto copia e incolla.

pietro

Pietro G. wrote:

Il 27 marzo 2010 14.48, Antonio F. [email protected] ha scritto:

�from :0
Ops! Hai ragione, ho sbagliato qualcosa nel ricopiare: l’espressione
giusta � /(.\d+)?.dar$/, non /(.\d+)?.dar$/ ; in pratica ho
invertito “(” e “”.

Lo so che gsub! cambia definitivamente il risultato per� irb dovrebbe
restituirmi tutto.

No. Irb mostra il valore dell’espressione; nel caso di array.each
&block, il valore � l’array finale:

[1, 2, 3].each {|x| ‘ciao’}
=> [1, 2, 3]

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.

S�, infatti sono due apici, cio� stringa vuota; non l’ho specificato
perch� davo per scontato che avresti fatto copia e incolla.

pietro

Mi da errore anche con la correzione che hai fatto.
Comunque ho risolto in questa maniera:

path_file="/home/user/dar_file/file_backup.txt"
var_path=File.read path_file
darfile_list=Dir.glob("#{var_path}*.dar").sort!
darfile_list.each do |f|

Questa linea elimina solamente l’estensione “.dar”

var=File.basename("#{f}", “.dar”)
var.each do |y|

Questa il numero e il punto

var2="#{y}".gsub(/.[0-9]/, “”)
puts var2
end
end

=> 2010-03-25-data
=> 2010-03-26-data
=> 2010-03-27-data
=> 2010-03-28-data
=> 2010-03-28-diff1

Beh, ho dovuto girargli un po’ intorno, ci sono troppi passaggi, però
funziona.
Comunque grazie per l’aiuto, se non c’eri tu a spronarmi chissà se ci
sarei arrivato. Però ora sorge spontanea una domanda: se inserisco var2
in una combo_list funzionerà ?
Ancora una cosa: l’interfaccia è a dir poco spartana, anzi io direi
paleolitica, più avanti vorrei provare a dotarla dei menubar, però come
posso collegare gli elementi del menu alle cartelle e/o ai file del
sistema?

antonio