Input dan output fail Ruby


Ruby menyediakan set lengkap kaedah berkaitan I/O, dilaksanakan dalam modul kernel. Semua kaedah I/O diperoleh daripada kelas IO. Kelas

IO menyediakan semua kaedah asas, seperti baca, tulis, dapatkan, letak, garis baca, getc dan printf.

Bab ini akan menerangkan semua fungsi I/O asas yang terdapat dalam Ruby. Untuk lebih banyak fungsi, lihat kelas IO Ruby.

meletakkan pernyataan

Dalam bab sebelumnya, anda memberikan nilai kepada pembolehubah dan kemudian menggunakan pernyataan puts untuk mencetak output. Penyataan

puts mengarahkan program untuk memaparkan nilai yang disimpan dalam pembolehubah. Ini akan menambah baris baharu pada penghujung setiap baris.

Instance

#!/usr/bin/ruby

val1 = "This is variable one"
val2 = "This is variable two"
puts val1
puts val2

Hasil keluaran menjalankan contoh di atas ialah:

This is variable one
This is variable two

mendapat pernyataan

mendapat pernyataan Boleh digunakan untuk mendapatkan input pengguna daripada skrin standard yang dipanggil STDIN.

Contoh

Kod berikut menunjukkan cara menggunakan pernyataan gets. Kod ini akan menggesa pengguna untuk nilai, yang akan disimpan dalam val pembolehubah dan akhirnya dicetak pada STDOUT.

#!/usr/bin/ruby

puts "Enter a value :"
val = gets
puts val

Hasil keluaran contoh di atas ialah:

Enter a value :
This is entered value
This is entered value

putc Pernyataan

berbeza daripada pernyataan puts , meletakkan Pernyataan mengeluarkan keseluruhan rentetan ke skrin, manakala pernyataan putc boleh digunakan untuk mengeluarkan aksara satu demi satu.

Contoh

Output kod berikut hanyalah aksara H:

#!/usr/bin/ruby

str="Hello Ruby!"
putc str

Hasil keluaran contoh di atas ialah:

H

cetak pernyataan Pernyataan

cetak adalah serupa dengan pernyataan meletakkan. Satu-satunya perbezaan ialah pernyataan puts melompat ke baris seterusnya selepas mengeluarkan kandungan, manakala apabila menggunakan pernyataan cetak, kursor diletakkan pada baris yang sama.

Contoh

#!/usr/bin/ruby

print "Hello World"
print "Good Morning"

Keluaran contoh di atas ialah:

Hello WorldGood Morning

Membuka dan menutup fail

Setakat ini, anda telah membaca dan menulis mengikut standard input dan output. Sekarang, kita akan melihat bagaimana untuk memanipulasi fail data sebenar.

Kaedah File.new

Anda boleh menggunakan kaedah File.new untuk mencipta objek Fail untuk membaca, Kebenaran menulis atau membaca dan menulis, membaca dan menulis bergantung pada parameter mod. Akhir sekali, anda boleh menutup fail menggunakan kaedah File.close.

Syntax

aFile = File.new("filename", "mode")
   # ... 处理文件
aFile.close

File.open Kaedah

Anda boleh menggunakan kaedah File.open untuk mencipta objek fail baharu , Dan tetapkan objek fail kepada fail. Walau bagaimanapun, terdapat sedikit perbezaan antara kaedah File.open dan File.new. Perbezaannya ialah kaedah File.open boleh dikaitkan dengan blok, manakala kaedah File.new tidak boleh.

File.open("filename", "mode") do |aFile|
   # ... process the file
end

Jadual di bawah menyenaraikan mod yang berbeza untuk membuka fail:

模式描述
r只读模式。文件指针被放置在文件的开头。这是默认模式。
r+读写模式。文件指针被放置在文件的开头。
w只写模式。如果文件存在,则重写文件。如果文件不存在,则创建一个新文件用于写入。
w+读写模式。如果文件存在,则重写已存在的文件。如果文件不存在,则创建一个新文件用于读写。
a只写模式。如果文件存在,则文件指针被放置在文件的末尾。也就是说,文件是追加模式。如果文件不存在,则创建一个新文件用于写入。
a+读写模式。如果文件存在,则文件指针被放置在文件的末尾。也就是说,文件是追加模式。如果文件不存在,则创建一个新文件用于读写。

Membaca dan menulis fail

Kaedah yang digunakan untuk I/O mudah juga tersedia untuk semua objek fail. Jadi, membaca baris daripada input standard dan aFile.gets membaca baris daripada objek fail aFile.

Walau bagaimanapun, objek I/O menyediakan tetapan tambahan untuk kaedah akses untuk memberikan kemudahan kepada kami.

sysread Kaedah

Anda boleh menggunakan kaedah sysread untuk membaca kandungan fail. Apabila menggunakan kaedah sysread, anda boleh membuka fail dalam mana-mana mod. Contohnya:

Berikut ialah fail teks input:

This is a simple text file for testing purpose.

Sekarang mari kita cuba membaca fail ini:

#!/usr/bin/ruby

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

Pernyataan ini akan memasukkan 20 aksara pertama fail . Penunjuk fail akan diletakkan pada aksara 21 dalam fail.

syswrite Kaedah

Anda boleh menggunakan kaedah syswrite untuk menulis pada fail. Apabila menggunakan kaedah syswrite anda perlu membuka fail dalam mod tulis. Contohnya:

#!/usr/bin/ruby

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

Pernyataan ini akan menulis "ABCDEF" pada fail.

setiap_bait kaedah

Kaedah ini tergolong dalam kelas Fail. Kaedah setiap_bait boleh berulang pada setiap aksara dalam rentetan. Sila lihat contoh kod berikut:

#!/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

aksara dihantar ke pembolehubah ch satu demi satu, dan kemudian dipaparkan pada skrin, seperti berikut:

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 Kaedah

KelasFail ialah subkelas kelas IO. Kelas IO juga mempunyai kaedah untuk memanipulasi fail.

IO.readlines ialah kaedah dalam kelas IO. Kaedah ini mengembalikan kandungan fail baris demi baris. Kod berikut menunjukkan penggunaan kaedah IO.readlines:

#!/usr/bin/ruby

arr = IO.readlines("input.txt")
puts arr[0]
puts arr[1]

Dalam kod ini, pembolehubah arr ialah tatasusunan. Setiap baris fail input.txt akan menjadi elemen dalam arr tatasusunan. Oleh itu, arr[0] akan mengandungi baris pertama, dan arr[1] akan mengandungi baris kedua fail.

IO.foreach Kaedah

Kaedah ini juga mengembalikan output baris demi baris. Perbezaan antara kaedah foreach dan kaedah readlines ialah kaedah foreach dikaitkan dengan blok. Walau bagaimanapun, tidak seperti kaedah garis baca, kaedah foreach tidak mengembalikan tatasusunan. Contohnya:

#!/usr/bin/ruby

IO.foreach("input.txt"){|block| puts block}

Kod ini akan menghantar kandungan fail ujian ke blok pembolehubah baris demi baris, dan kemudian output akan dipaparkan pada skrin.

Menamakan semula dan memadam fail

Anda boleh menamakan semula dan memadam fail melalui kaedah menamakan semula dan memadamkan.

Contoh berikut menamakan semula fail sedia ada test1.txt:

#!/usr/bin/ruby

# 重命名文件 test1.txt 为 test2.txt
File.rename( "test1.txt", "test2.txt" )

Contoh berikut memadamkan fail sedia ada test2.txt:

#!/usr/bin/ruby

# 删除文件 test2.txt
File.delete("text2.txt")

Mod Fail dan Pemilikan

Gunakan kaedah chmod dengan topeng untuk menukar mod atau senarai kebenaran/akses fail:

di bawah Contoh: Tukar mod fail sedia ada test.txt kepada nilai topeng:

#!/usr/bin/ruby

file = File.new( "test.txt", "w" )
file.chmod( 0755 )

Jadual berikut menyenaraikan topeng berbeza yang boleh digunakan dalam chmod Kod kaedah:

掩码描述
0700rwx 掩码,针对所有者
0400r ,针对所有者
0200w ,针对所有者
0100x ,针对所有者
0070rwx 掩码,针对所属组
0040r ,针对所属组
0020w ,针对所属组
0010x ,针对所属组
0007rwx 掩码,针对其他人
0004r ,针对其他人
0002w ,针对其他人
0001x ,针对其他人
4000执行时设置用户 ID
2000执行时设置所属组 ID
1000保存交换文本,甚至在使用后也会保存

Pertanyaan fail

Perintah berikut menyemak sama ada fail sudah wujud sebelum membukanya:

#!/usr/bin/ruby

File.open("file.rb") if File::exists?( "file.rb" )

Perintah berikut menanyakan sama ada fail itu memang fail:

#!/usr/bin/ruby

# 返回 true 或false
File.file?( "text.txt" )

Arahan berikut menyemak sama ada nama fail yang diberikan ialah direktori:

#!/usr/bin/ruby

# 一个目录
File::directory?( "/usr/local/bin" ) # => true

# 一个文件
File::directory?( "file.rb" ) # => false

Arahan berikut menyemak sama ada fail itu boleh dibaca, boleh ditulis dan boleh laku:

#!/usr/bin/ruby

File.readable?( "test.txt" )   # => true
File.writable?( "test.txt" )   # => true
File.executable?( "test.txt" ) # => false

Arahan berikut menyemak sama ada fail boleh dibaca, boleh ditulis dan boleh laku: Sama ada saiznya sifar:

#!/usr/bin/ruby

File.zero?( "test.txt" )      # => true

Arahan berikut mengembalikan saiz fail:

#!/usr/bin/ruby

File.size?( "text.txt" )     # => 1002

Arahan berikut digunakan untuk menyemak jenis fail:

#!/usr/bin/ruby

File::ftype( "test.txt" )     # => file

kaedah ftype mengembalikan salah satu daripada berikut Nilai tertentu mengenal pasti jenis fail: fail, direktori, characterSpecial, blockSpecial, fifo, pautan, soket atau tidak diketahui.

Arahan berikut digunakan untuk menyemak apabila fail dicipta, diubah suai atau diakses terakhir:

#!/usr/bin/ruby

File::ctime( "test.txt" ) # => Fri May 09 10:06:37 -0700 2008
File::mtime( "text.txt" ) # => Fri May 09 10:44:44 -0700 2008
File::atime( "text.txt" ) # => Fri May 09 10:45:01 -0700 2008

Direktori dalam Ruby

Semua fail terkandung dalam direktori, Ruby menyediakan cara untuk bekerja dengan fail dan direktori. Kelas Fail digunakan untuk mengendalikan fail dan kelas Dir digunakan untuk mengendalikan direktori.

Semak Imbas Direktori

Untuk menukar direktori dalam program Ruby, gunakan Dir.chdir. Contoh berikut menukar direktori semasa kepada /usr/bin.

Dir.chdir("/usr/bin")

Anda boleh melihat direktori semasa melalui Dir.pwd:

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

Anda boleh menggunakan Dir.entry untuk memasukkan fail dan direktori Senarai direktori yang ditentukan:

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

Dir.entry Mengembalikan tatasusunan yang mengandungi semua entri dalam direktori yang ditentukan. Dir.foreach menyediakan fungsi yang sama:

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

Cara yang lebih mudah untuk mendapatkan penyenaraian direktori adalah dengan menggunakan kaedah seperti tatasusunan Dir:

Dir["/usr/bin/*"]

Buat direktori

Dir.mkdir boleh digunakan untuk mencipta direktori:

Dir.mkdir("mynewdir")

Anda juga boleh menetapkan kebenaran pada direktori baharu (bukan direktori sedia ada) melalui mkdir:

Nota: Mask 755 menetapkan kebenaran pemilik, kumpulan dan dunia [sesiapa sahaja] kepada rwxr-xr-x, dengan r = w = tulis, x = laksana.

Dir.mkdir( "mynewdir", 755 )

Padam Direktori

Dir.delete boleh digunakan untuk memadamkan direktori. Dir.unlink dan Dir.rmdir melaksanakan fungsi yang sama untuk kemudahan kita.

Dir.delete("testdir")

Buat Fail & Direktori Sementara

Fail sementara ialah maklumat yang hanya dicipta semasa pelaksanaan program tetapi tidak disimpan secara kekal.

Dir.tmpdir menyediakan laluan ke direktori sementara pada sistem semasa, tetapi kaedah ini tidak tersedia secara lalai. Untuk menjadikan Dir.tmpdir tersedia, menggunakan 'tmpdir' yang diperlukan adalah perlu.

Anda boleh menggunakan Dir.tmpdir dan File.join bersama-sama untuk mencipta fail sementara bebas platform:

require 'tmpdir'
   tempfilename = File.join(Dir.tmpdir, "tingtong")
   tempfile = File.new(tempfilename, "w")
   tempfile.puts "This is a temporary file"
   tempfile.close
   File.delete(tempfilename)

Perenggan ini Kod mencipta fail sementara, menulis data kepadanya, dan kemudian memadam fail itu. Pustaka standard Ruby juga mengandungi perpustakaan bernama Tempfile, yang boleh digunakan untuk mencipta fail sementara:

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

Fungsi terbina dalam

Yang berikut menyediakan pemprosesan dalam Ruby Complete senarai fungsi terbina dalam untuk fail dan direktori:

  • Fail kelas dan kaedah.

  • Kelas dan kaedah pengarah.