l’argomento e’ gia’ stato trattato qualche post fa ma ho ancora dei
dubbi.
Premetto che sto muovendo i primi passi in ruby e sto cercando di
scrivere semplici programmi senza l’utilizzo di classi o funzioni
avanzate,
almeno per il momento.
Come esercizio stavo sperimentando un programma molto semplice, per
mezzo del quale apro un file di testo e stampo sull’output le occorrenze
del
carattere “x” con un’altro:
f = file.open(“prova.txt”)
x= f.getc
while x
if x == “c”
print " "
else
print x
end
x = f.getc
end
il risultato pero’ e’ una sequenza numerica …
qualcuno ha capito cosa sto sbagliando?
f=File.open(“prova.txt”) #File con la maiuscola
while(x=f.getc) #così è più elegante e leggibile
if x.chr==“c” #devi usare .chr anche qui o usare il
codice asci del carattere
print " "
else
print x.chr
end
end
f.close
Naturalmente tutto questo non funziona con gli encoding multibyte, che
io sappia:-/
Infatti. In una mia applicazione arrivano dei file CSV nati in Siebel
CRM: sono in UTF-16 e processarli è una brutta vicenda. Alla fine ho
optato per una chiamata “system” al commando iconv che converte
l’originale e lo scrive in /tmp.
Il giorno in cui Ruby parla unicode sarò molto felice.
David W. wrote:
Naturalmente tutto questo non funziona con gli encoding multibyte, che
io sappia:-/
–
“Remember, always be yourself. Unless you suck.” - Joss Whedon
f=File.open(“prova.txt”) #File con la maiuscola
while(x=f.getc) #così è più elegante e leggibile
if x.chr==“c” #devi usare .chr anche qui o usare il
codice asci del carattere
print " "
else
print x.chr
end
end
f.close
mezzo del quale apro un file di testo e stampo sull’output le
occorrenze del
carattere “x” con un’altro:
IO#getc ritorna un intero, se lo vuoi confrontare
con un carattere senza usare il suo codice ASCII puoi usare la
notazione ?c (e.g. ?A e’
uguale a 65, ?B a 66 ecc.)
E questa forma:
if cond
print this
else
print that
end
e’ piu’ compatta scritta cosi’:
print cond ? this : that
(anche se molti aborrono l’operatore ?
pero’ fai prima cosi’:
STDOUT.write(File.read(‘prova.txt’).tr(‘x’, ’ '))
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.