Problema con nomi file

Ho un problema con in nomi dei file.

Prima di tutto la mia configurazione:

Ubuntu 9.04 64bit

Utilizzo le API (in ruby) di un programma nativo per Windows tramite
wine e le wxruby.

Utilizzando le Wx::DirDialog ottengo il nome di un percorso che
memorizzo nella varibile $nomecartella

$nomecartella = ‘Z:\home\pippo’

a questo appendo il nome di un file che ho memorizzato in una nuova
variabile: $nomefile= ‘miofile.txt’

per mezzo di

File.join($nomecartella,$nomefile)

ottenendo

Z:\home\alessandro/miofile.txt

come faccio a sostituire gli \ con /?

2010/4/23 Alessandro B. [email protected]

Z:\home\alessandro/miofile.txt

Sicuramente con una String#gsub, ma e’ strano, credevo anche io che
File.join generasse dei nomi di file validi sulla piattaforma su cui
gira lo
script. mumble…

Il 23 aprile 2010 15.45, Alessandro B. [email protected] ha
scritto:

memorizzo nella varibile $nomecartella
ottenendo

Z:\home\alessandro/miofile.txt

come faccio a sostituire gli \ con /?

Ciao,

Ubuntu non c’entra: File.join su windows si comporta
così.
In ogni caso File.open(‘Z:\home\alessandro/miofile.txt’) funziona, ma
magari è brutto da mostrare all’utente.

Potresti reimplementarlo oppure usare File.join e poi gsub, per brutto
che sia.

Non fare semplicemente join, perché quantomento File.join controlla se
i vari pezzi contengono già \ o / iniziali o finali e non li
duplica…

pietro

Il 23 aprile 2010 17.16, Alessandro B. [email protected] ha
scritto:

Usare gsub è proprio quello che volevo fare: ma il comando
$nomefile.gsub("","/") non è corretto.
nomefile = nomefile.gsub("\", “/”)

p.s. Naturalmente non sono affari miei, ma ti sconsiglio di usare
variabili globali.

pietro

Pietro G. wrote:

Ciao,

Ubuntu non c’entra: File.join su windows si comporta
cos�.
In ogni caso File.open(‘Z:\home\alessandro/miofile.txt’) funziona, ma
magari � brutto da mostrare all’utente.

Potresti reimplementarlo oppure usare File.join e poi gsub, per brutto
che sia.

Non fare semplicemente join, perch� quantomento File.join controlla se
i vari pezzi contengono gi� \ o / iniziali o finali e non li
duplica…

pietro

Non posso usare File.open, perchè non devo essere io ad aprire il file
ma il programma principale… (:o

Usare gsub è proprio quello che volevo fare: ma il comando
$nomefile.gsub("","/") non è corretto. Forse dovrei provare con le
espressioni regolari ma non le ho mai studiate!!! sigh!!!

Come faccio?

Pietro G. wrote:

Il 23 aprile 2010 17.16, Alessandro B. [email protected] ha
scritto:

Usare gsub � proprio quello che volevo fare: ma il comando
$nomefile.gsub("","/") non � corretto.
nomefile = nomefile.gsub("\", “/”)

p.s. Naturalmente non sono affari miei, ma ti sconsiglio di usare
variabili globali.

pietro

Grazie pietro, ma (sarò certamente io) non funziona!!

provato da irb:

a=“C:\aaa\bbb/prova.txt”

b = a.gsub("\","/")

mi da nuovamente:

“C:\aaa\bbb/prova.txt”

Luca De Marinis wrote:

Anche a me! mi ci stavo scervellando, poi ho pensato… sara’ una
interazione
con readline/irb/qualcosa??

pero’ se crei uno script e ci scrivi:

#!/usr/bin/ruby

pdio = “C:\foo”

puts pdio.gsub(’\’, ‘/’)

funziona come ti aspetteresti!

Vero. Ma io, usando Wx::DirDialog.get_path ottengo i percorsi con un
solo ‘/’!!!
Come se po fà ?

2010/4/23 Alessandro B. [email protected]

Pietro G. wrote:

Il 23 aprile 2010 17.16, Alessandro B. [email protected] ha
scritto:

“C:\aaa\bbb/prova.txt”

Anche a me! mi ci stavo scervellando, poi ho pensato… sara’ una
interazione
con readline/irb/qualcosa??

pero’ se crei uno script e ci scrivi:

#!/usr/bin/ruby

pdio = “C:\foo”

puts pdio.gsub(’\’, ‘/’)

funziona come ti aspetteresti!

2010/4/23 Alessandro B. [email protected]

Luca De Marinis wrote:

Vero. Ma io, usando Wx::DirDialog.get_path ottengo i percorsi con un
solo ‘/’!!!

No aspetta, e’ che per mettere in una stringa uno \ ne devi mettere
due…
guarda:

#!/usr/bin/ruby

pdio = “C:\foo”
puts “Prima: #{ pdio }”
puts “Dopo: #{ pdio.gsub(’\’, ‘/’) }”

ovvero, ne’ la dichiarazione di variabile dice “metti due backslash” ne’
la
gsub dice “sostituisci due backslash con uno slash”… e’ solo che per il
parser ruby il modo corretto di scrivere uno \ dentro una stringa e’ \

Mah… diciamo che credo fortemente che anche quello ho generato nella
prima
assegnazione alla variabile pdio sia di fatto un solo \ - solo che per
non
farlo interpretare come un’altra cosa ho dovuto escaparlo!

Luca De Marinis wrote:

No aspetta, e’ che per mettere in una stringa uno \ ne devi mettere
due…
guarda:

#!/usr/bin/ruby

pdio = “C:\foo”
puts “Prima: #{ pdio }”
puts “Dopo: #{ pdio.gsub(’\’, ‘/’) }”

ovvero, ne’ la dichiarazione di variabile dice “metti due backslash” ne’
la
gsub dice “sostituisci due backslash con uno slash”… e’ solo che per il
parser ruby il modo corretto di scrivere uno \ dentro una stringa e’ \

Mah… diciamo che credo fortemente che anche quello ho generato nella
prima
assegnazione alla variabile pdio sia di fatto un solo \ - solo che per
non
farlo interpretare come un’altra cosa ho dovuto escaparlo!

Hai ragione!!! In effetti nel mio script funziona, ma in irb invece
no!!!