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:
掩码 | 描述 |
---|---|
0700 | rwx 掩码,针对所有者 |
0400 | r ,针对所有者 |
0200 | w ,针对所有者 |
0100 | x ,针对所有者 |
0070 | rwx 掩码,针对所属组 |
0040 | r ,针对所属组 |
0020 | w ,针对所属组 |
0010 | x ,针对所属组 |
0007 | rwx 掩码,针对其他人 |
0004 | r ,针对其他人 |
0002 | w ,针对其他人 |
0001 | x ,针对其他人 |
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.