# Lettura file di testo

**URL:** <https://www.ruby-forum.com/t/lettura-file-di-testo/67737>\
**Category:** IT\
**Created:** [September 6, 2006, 2:09pm UTC](https://www.ruby-forum.com/t/lettura-file-di-testo/67737 "2006-09-06T14:09:50Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![maximo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/cab0a1/32.png) [@maximo](https://www.ruby-forum.com/u/maximo)\
**Post date:** [September 6, 2006, 2:09pm UTC](https://www.ruby-forum.com/t/lettura-file-di-testo/67737/1 "2006-09-06T14:09:50Z")

</div>

salve a tutti,

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?

grazie per qualsiasi aiuto

massimo

---

<div class="post-metadata">

**Author:** ![maximo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/cab0a1/32.png) [@maximo](https://www.ruby-forum.com/u/maximo)\
**Post date:** [September 6, 2006, 2:17pm UTC](https://www.ruby-forum.com/t/lettura-file-di-testo/67737/2 "2006-09-06T14:17:50Z")

</div>

E’ il codice ascii quello che becchi, direi.

🙂

“print x.chr” dovrebbe funzionare!

Massimo C. wrote:

> mezzo del quale apro un file di testo e stampo sull’output le  
> else  
> massimo
> 
> * * *
> 
> Ml mailing list  
> removed\_email\_address@domain.invalid  
> [http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)

–  
“Remember, always be yourself. Unless you suck.” - Joss Whedon

---

<div class="post-metadata">

**Author:** ![maximo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/cab0a1/32.png) [@maximo](https://www.ruby-forum.com/u/maximo)\
**Post date:** [September 6, 2006, 2:31pm UTC](https://www.ruby-forum.com/t/lettura-file-di-testo/67737/3 "2006-09-06T14:31:51Z")

</div>

si, funziona 🙂  
che fesso che sono, cmq mi lascia degli spazi nell’output  
e non mi cambia il carattere … ma, stasera cercher’ di capirci  
qualcosa

grazie!

ciao

Il 06/09/06, david [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:

---

<div class="post-metadata">

**Author:** ![maximo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/cab0a1/32.png) [@maximo](https://www.ruby-forum.com/u/maximo)\
**Post date:** [September 6, 2006, 2:55pm UTC](https://www.ruby-forum.com/t/lettura-file-di-testo/67737/4 "2006-09-06T14:55:56Z")

</div>

> 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:-/

–  
David N. Welton

- [David N. Welton](http://www.dedasys.com/davidw/)

Linux, Open Source Consulting

- [http://www.dedasys.com/](http://www.dedasys.com/)

---

<div class="post-metadata">

**Author:** ![maximo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/cab0a1/32.png) [@maximo](https://www.ruby-forum.com/u/maximo)\
**Post date:** [September 6, 2006, 2:59pm UTC](https://www.ruby-forum.com/t/lettura-file-di-testo/67737/5 "2006-09-06T14:59:57Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![maximo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/cab0a1/32.png) [@maximo](https://www.ruby-forum.com/u/maximo)\
**Post date:** [September 6, 2006, 2:39pm UTC](https://www.ruby-forum.com/t/lettura-file-di-testo/67737/6 "2006-09-06T14:39:54Z")

</div>

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

così funziona 🙂

2006/9/6, Massimo C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

---

<div class="post-metadata">

**Author:** ![maximo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/cab0a1/32.png) [@maximo](https://www.ruby-forum.com/u/maximo)\
**Post date:** [September 7, 2006, 9:36am UTC](https://www.ruby-forum.com/t/lettura-file-di-testo/67737/7 "2006-09-07T09:36:14Z")

</div>

accidenti … e chi se lo aspettava che una cosa cosi’ semplice fosse  
cosi’  
complessa ? :")

grazie a tutti per i chiarimenti

Il 06/09/06, Stefano C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:

---

<div class="post-metadata">

**Author:** ![maximo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/cab0a1/32.png) [@maximo](https://www.ruby-forum.com/u/maximo)\
**Post date:** [September 6, 2006, 3:01pm UTC](https://www.ruby-forum.com/t/lettura-file-di-testo/67737/8 "2006-09-06T15:01:57Z")

</div>

On Sep 6, 2006, at 2:08 PM, Massimo C. wrote:

> 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’, ’ '))

🙂
