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
Se vuoi aggiornamenti su Development inserisci la tua email nel box qui sotto: