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!!!

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs