Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 24 di 45
  • livello principiante
Indice lezioni

Lettura e scrittura

Come leggere e modificare i dati inclusi in un file: il metodo gets, gli iteratori each, each_byte e il metodo write
Come leggere e modificare i dati inclusi in un file: il metodo gets, gli iteratori each, each_byte e il metodo write
Link copiato negli appunti

Dopo averlo aperto le operazioni base sui file sono la lettura e la scrittura. Per leggere un file una linea alla volta si può utilizzare il metodo gets ereditato da IO:

while linea = mio_file.gets
    puts linea
end

in questo modo con un ciclo while non facciamo altro che stampare a video tutte le righe del file. In alternativa è possibile usare anche gli iteratori che insieme a open con i blocchi rendono le operazioni di lettura molto agevoli. Tra gli iteratori troviamo:

  • each_byte che chiama il blocco per ogni byte
  • each_line, e il suo sinonimo each, chiamano il blocco per ogni riga

Ad esempio supponendo che il nostro file test.txt abbia il seguente contenuto:

Vento invernale
Un monaco scinto
Cammina nel bosco

possiamo leggerne un carattere alla volta con each_byte:

File.open("test.txt") do |f|
    f.each_byte {|c| print c.chr, " "}
end

in questo modo trasformiamo il byte letto, un Fixnum, in carattere con il metodo chr e poi lo stampiamo seguito da uno spazio. L'output sarà:

V e n t o i n v e r n a l e
U n m o n a c o s c i n t o
C a m m i n a n e l b o s c o

Gli iteratori each e each_line, come detto, permettono invece di iterare su ogni linea del file. Un esempio è:

File.open("test.txt") do |f|
    f.each {|l| puts "#{f.lineno} #{l}"}    
end

dove lineno è un metodo della classe IO che restituisce il numero di linea corrente. L'output sarà dunque:

1 Vento invernale
2 Un monaco scinto
3 Cammina nel bosco

Infine un altro iteratore, che è allo stesso tempo un altro modo per aprire un file, è foreach che quando è invocato apre il file passatogli come argomento, chiama il blocco per ogni linea e alla fine chiude il file automaticamente:

IO.foreach("test.txt") {|linea| puts linea}

Per scrivere su di un file si utilizza il metodo write che prende come argomento la stringa da scrivere sul file:

File.open "test.txt", "w" do |mio_file|
    mio_file.write "Ciao file"
end

write restituisce il numero di byte scritti. In alternativa si può utilizzare anche l'operatore << o il metodo puts. L'esempio precedente diventa:

File.open "test.txt", "w" do |mio_file|
    mio_file << "Ciao file"
end

oppure

File.open "test.txt", "w" do |mio_file|
    mio_file.puts "Ciao file"
end

Ti consigliamo anche