English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Input e output di file Ruby

Ruby fornisce una serie completa di metodi di I/O implementati nel modulo Kernel. Tutti i metodi di I/O derivano dalla classe IO.

Classe IO Fornisce tutti i metodi di base, come read, write, gets, puts, readline, getcprintf.

Questa sezione spiega tutte le funzioni di base di I/O disponibili in Ruby. Per ulteriori funzioni, consulta il manuale di Ruby. IO di classe.

puts La sentenza

Nelle sezioni precedenti, assegni un valore alle variabili e poi utilizzi puts La frase stampa l'output.

puts La frase indica che il programma visualizzi il valore memorizzato nella variabile. Questo aggiungerà una nuova riga alla fine di ogni riga.

Esempio online

#!/usr/bin/ruby
 
val1 = "Questo è il variabile uno"
val2 = "Questo è il variabile due"
puts val1
puts val2

I risultati di esecuzione degli esempi sopra elencati sono:

Questo è il variabile uno
Questo è il variabile due

gets La sentenza

gets La frase può essere utilizzata per ottenere l'input utente dalla schermata standard denominata STDIN.

Esempio online

Il codice seguente dimostra come utilizzare la sentenza gets. Il codice chiede all'utente di inserire un valore, che viene memorizzato nella variabile val e infine stampato sullo STDOUT.

Esempio online

#!/usr/bin/ruby
 
puts "Inserisci un valore :"
val = gets
puts val

I risultati di esecuzione degli esempi sopra elencati sono:

Inserisci un valore :
This is entered value
This is entered value

putc La sentenza

Con puts La sentenza è diversa,puts La sentenza esporta l'intera stringa sullo schermo, mentre putc La sentenza può essere utilizzata per esportare un carattere alla volta.

Esempio online

L'output del codice seguente è solo il carattere H:

Esempio online

#!/usr/bin/ruby
 
str="Hello Ruby!"
putc str

I risultati di esecuzione degli esempi sopra elencati sono:

H

print La sentenza

print La sentenza con puts La sentenza è simile. L'unica differenza è puts La sentenza salta alla riga successiva dopo aver eseguito il contenuto di output, mentre print Quando si esegue la sentenza, il cursore si posiziona sulla stessa riga.

Esempio online

#!/usr/bin/ruby
 
print "Hello World"
print "Good Morning"

I risultati di esecuzione degli esempi sopra elencati sono:

Hello WorldGood Morning

Apertura e chiusura del file

Fino ad ora, avete letto e scritto sugli input e output standard. Ora, vediamo come operare su file dati reali.

File.new metodo

您可以使用 File.new Il metodo per creare un File L'oggetto viene utilizzato per leggere, scrivere o leggere/scrivere, i permessi di lettura/scrittura dipendono dal parametro mode. Infine, è possibile utilizzare File.close Il metodo per chiudere il file.

Sintassi

aFile = File.new("filename", "mode")
   # ... elaborare il file
aFile.close

File.open metodo

您可以使用 File.open Il metodo crea un nuovo oggetto file e assegna questo oggetto file al file. Tuttavia,File.openFile.new I metodi hanno alcune differenze. La differenza è File.open Il metodo può essere associato al blocco, mentre File.new Il metodo non può.

File.open("filename", "mode") do |aFile|
   # ... elaborare il file
end

La tabella seguente elenca le diverse modalità di apertura dei file:

ModalitàDescrizione
rModalità di sola lettura. Il puntatore del file viene posizionato all'inizio del file. Questa è la modalità predefinita.
r+Modalità di lettura/scrittura. Il puntatore del file viene posizionato all'inizio del file.
wModalità di scrittura. Se il file esiste, viene sovrascritto il file. Se il file non esiste, viene creato un nuovo file per la scrittura.
w+Modalità di lettura/scrittura. Se il file esiste, viene sovrascritto il file esistente. Se il file non esiste, viene creato un nuovo file per la lettura e la scrittura.
aModalità di scrittura. Se il file esiste, il puntatore del file viene posizionato alla fine del file. Questo significa che il file è in modalità di appendimento. Se il file non esiste, viene creato un nuovo file per la scrittura.
a+Modalità di lettura e scrittura. Se il file esiste, il puntatore del file viene posizionato alla fine del file. Questo significa che il file è in modalità append. Se il file non esiste, viene creato un nuovo file per la lettura e la scrittura.

Lettura e scrittura dei file

I metodi per I/O semplice possono essere utilizzati per tutti gli oggetti file. Quindi, gets legge una riga dall'input standard,aFile.gets Leggi una riga dall'oggetto del file aFile.

Tuttavia, gli oggetti I/O forniscono impostazioni aggiuntive per i metodi di accesso, rendendo più comodo.

sysread metodo

Puoi usare il metodo sysread Per leggere il contenuto del file. Quando si utilizza il metodo sysread, è possibile aprire il file in qualsiasi modalità. Ad esempio:

Ecco il file di testo di input:

Questo è un file di testo semplice per il fine di test.

Ora proviamo a leggere questo file:

Esempio online

#!/usr/bin/ruby
 
aFile = File.new("input.txt", "r")
if aFile
   content = aFile.sysread(20)
   puts content
else
   puts "Unable to open file!"
end

Questa istruzione scrive i primi 20 caratteri del file di input. Il puntatore del file viene posizionato alla posizione del 21 ° carattere del file.

syswrite metodo

Puoi usare il metodo syswrite Per scrivere contenuti nel file. Quando si utilizza il metodo syswrite, è necessario aprire il file in modalità scrittura. Ad esempio:

Esempio online

#!/usr/bin/ruby
 
aFile = File.new("input.txt", "r+")
if aFile
   aFile.syswrite("ABCDEF")
else
   puts "Unable to open file!"
end

Questa istruzione scrive "ABCDEF" nel file.

each_byte metodo

Questo metodo appartiene alla classe FileMetodo each_byte È una capacità di iterare ogni carattere di una stringa. Ecco un esempio di codice:

Esempio online

#!/usr/bin/ruby
 
aFile = File.new("input.txt", "r+")
if aFile
   aFile.syswrite("ABCDEF")
   aFile.rewind
   aFile.each_byte {|ch| putc ch; putc ?; }
else
   puts "Unable to open file!"
end

Il carattere viene trasmesso uno per uno alla variabile ch e visualizzato sullo schermo, come segue:

A.B.C.D.E.F.s. .a. .s.i.m.p.l.e. .t.e.x.t. .f.i.l.e. .f.o.r. .t.e.s.t.i.n.g. .p.u.r.p.o.s.e...

IO.readlines metodo

Classe File È una sottoclasse di classe IO. La classe IO ha anche alcuni metodi per l'operazione dei file.

IO.readlines È un metodo di classe IO. Questo metodo restituisce riga per riga il contenuto del file. Il seguente codice mostra il metodo IO.readlines utilizzo:

Esempio online

#!/usr/bin/ruby
 
arr = IO.readlines("input.txt")
puts arr[0]
puts arr[1]

In questo codice, la variabile arr è un array. Il file input.txt Ogni riga sarà un elemento dell'array arr. Pertanto, arr[0] conterrà la prima riga e arr[1] conterrà la seconda riga del file.

IO.foreach metodo

Questo metodo restituisce anche l'output riga per riga. Il metodo foreach con il metodo readlines tra cui, il metodo foreach associato al blocco. Tuttavia, diversamente dal metodo readlinesmetodo foreach Non restituisce un array. Ad esempio:

Esempio online

#!/usr/bin/ruby
 
IO.foreach("input.txt"){|block| puts block}

Questo codice trasferirà il file test Il contenuto del file viene trasmesso alla variabile block riga per riga, quindi l'output verrà visualizzato sullo schermo.

Rinomina e eliminazione di file

您可以通过 renamedelete Metodo per rinominare e eliminare file.

Esempio di rinomina di un file esistente: test1.txt:

Esempio online

#!/usr/bin/ruby
 
# Rinomina del file test1.txt in test2.txt
File.rename("test1.txt", "test2.txt")

Esempio di eliminazione di un file esistente: test2.txt:

Esempio online

#!/usr/bin/ruby
 
# Eliminazione del file test2.txt
File.delete("text2.txt")

Modello di file e proprietà

Usare con maschera chmod Metodo per modificare il modello o i permessi/la lista di accesso del file:

Esempio di modifica di un file esistente: test.txt Il modello è un valore di maschera:

Esempio online

#!/usr/bin/ruby
 
file = File.new("test.txt", "w")
file.chmod(0755)

La tabella seguente elenca: chmod Diversi maschere disponibili nel metodo:

MascheraDescrizione
0700maschera rwx, per il proprietario
0400r, per il proprietario
0200w, per il proprietario
0100x, per il proprietario
0070maschera rwx, per il gruppo di appartenenza
0040r, per il gruppo di appartenenza
0020w, per il gruppo di appartenenza
0010x, per il gruppo di appartenenza
0007maschera rwx, per altre persone
0004r, per altre persone
0002w, per altre persone
0001x, per altre persone
4000Esecuzione impostazione ID utente
2000Imposta l'ID del gruppo proprietario durante l'esecuzione
1000Salva il testo di scambio, persino dopo l'uso

Ricerca di file

I seguenti comandi verificano se il file esiste prima di aprirlo:

Esempio online

#!/usr/bin/ruby
 
File.open("file.rb") if File::exists?("file.rb")

I seguenti comandi verificano se il file è effettivamente un file:

Esempio online

#!/usr/bin/ruby
 
# Restituisce true o false
File.file?("text.txt")

I seguenti comandi verificano se il nome del file fornito è una directory:

Esempio online

#!/usr/bin/ruby
 
# Una directory
File::directory?("/usr/local/bin") # => true
 
# Un file
File::directory?("file.rb") # => false

I seguenti comandi verificano se il file è leggibile, scrivibile o eseguibile:

Esempio online

#!/usr/bin/ruby
 
File.readable?("test.txt") # => true
File.writable?("test.txt") # => true
File.executable?("test.txt") # => false

I seguenti comandi verificano se la dimensione del file è zero:

Esempio online

#!/usr/bin/ruby
 
File.zero?("test.txt") # => true

I seguenti comandi restituiscono la dimensione del file:

Esempio online

#!/usr/bin/ruby
 
File.size?("text.txt") # => 1002

I seguenti comandi vengono utilizzati per verificare il tipo del file:

Esempio online

#!/usr/bin/ruby
 
File::ftype("test.txt") # => file

Il metodo ftype identifica il tipo di file restituendo uno dei seguenti valori:file, directory, characterSpecial, blockSpecial, fifo, link, socket o unknown.

Le seguenti comandi vengono utilizzati per verificare il tempo di creazione, modifica o ultima accessibilità del file:

Esempio online

#!/usr/bin/ruby
 
File::ctime("test.txt") # => Ven 09 Mag 10:06:37 -0700 2008
File::mtime("text.txt") # => Ven 09 Mag 10:44:44 -0700 2008
File::atime("text.txt") # => Ven 09 Mag 10:45:01 -0700 2008

Rubin中的目录

所有的文件都是包含在目录中,Ruby 提供了处理文件和目录的方式。File 类用于处理文件,Dir 类用于处理目录。

浏览目录

为了在 Ruby 程序中改变目录,请使用 Dir.chdir。下面的示例改变当前目录为 /usr/bin.

Dir.chdir("/usr/bin")

您可以通过 Dir.pwd 查看当前目录:

puts Dir.pwd # 返回当前目录,类似 /usr/bin

您可以使用 Dir.entries 获取指定目录内的文件和目录列表:

puts Dir.entries("/usr/bin").join(' ')

Dir.entries 返回一个数组,包含指定目录内的所有项。Dir.foreach 提供了相同的功能:

Dir.foreach("/usr/bin") do |entry|
   puts entry
end

获取目录列表的一个更简洁的方式是通过使用 Dir 的类数组的方法:

Dir["/usr/bin/*"]

创建目录

Dir.mkdir 可用于创建目录:

Dir.mkdir("mynewdir")

您也可以通过 mkdir 在新目录(不是已存在的目录)上设置权限:

注意:掩码 755 设置所有者(owner)、所属组(group)、每个人(world [anyone])的权限为 rwxr-xr-x,其中 r = read 读取,w = write 写入,x = execute 执行。

Dir.mkdir( "mynewdir", 755 )

删除目录

Dir.delete 可用于删除目录。Dir.unlinkDir.rmdir 执行同样的功能,为我们提供了便利。

Dir.delete("testdir")

创建文件 & 临时目录

临时文件是那些在程序执行过程中被简单地创建,但不会永久性存储的信息。

Dir.tmpdir 提供了当前系统上临时目录的路径,但是该方法默认情况下是不可用的。为了让 Dir.tmpdir 可用,使用必需的 'tmpdir' 是必要的。

您可以把 Dir.tmpdirFile.join 一起使用,来创建一个独立于平台的临时文件:

require 'tmpdir'
tempfilename = File.join(Dir.tmpdir, "tingtong")
tempfile = File.new(tempfilename, "w")
tempfile.puts "Questo è un file temporaneo"
tempfile.close
File.delete(tempfilename)

Questo codice crea un file temporaneo, scrive dati al suo interno e poi elimina il file. La libreria standard di Ruby include anche una chiamata Tempfile La libreria, che può essere utilizzata per creare file temporanei:

require 'tempfile'
f = Tempfile.new('tingtong')
f.puts "Hello"
puts f.path
f.close

Funzioni native

Di seguito è fornita una lista completa delle funzioni native per la gestione dei file e delle directory in Ruby: