Ruby mengajukan input dan output
Ruby menyediakan satu set I / metode terkait O diimplementasikan dalam kernel (Kernel) modul. Semua metode I / O berasal dari kelas IO.
IOmenyediakan semua pendekatan berbasis kelas, sepertimembaca, menulis, mendapat, menempatkan,readline, getc danprintf.
Bagian ini akan menjelaskan semua fungsi I / O berbasis Ruby tersedia. Untuk fungsi yang lebih, silakan lihatIOkelas Ruby.
menempatkanpernyataan
Pada bagian sebelumnya, Anda ditugaskan untuk variabel, dan kemudian menggunakan cetakan pernyataanputs.
menempatkanpernyataan menunjukkan bahwa program menampilkan nilai-nilai yang disimpan dalam variabel. Ini akan menambahkan baris baru pada akhir setiap baris.
contoh
#!/usr/bin/ruby val1 = "This is variable one" val2 = "This is variable two" puts val1 puts val2
Jalankan contoh di atas output:
This is variable one This is variable two
mendapatPernyataan
mendapatpernyataan dapat digunakan untuk mendapatkan masukan pengguna dari layar standar yang disebut STDIN.
contoh
Kode berikut menunjukkan bagaimana menggunakan mendapat pernyataan. Kode akan meminta pengguna untuk memasukkan nilai yang akan disimpan di val variabel, akhir yang akan dicetak pada stdout.
#!/usr/bin/ruby puts "Enter a value :" val = gets puts val
Jalankan contoh di atas output:
Enter a value : This is entered value This is entered value
pernyataanputc
Danmenempatkansebuah pernyataan yang berbeda, pernyataan itumenempatkanoutput dari seluruh string ke layar, sementara pernyataanputcdapat digunakan untuk keluaran urutan karakter.
contoh
Output dari kode berikut satunya karakter H:
#!/usr/bin/ruby str="Hello Ruby!" putc str
Jalankan contoh di atas output:
H
laporancetak
mencetaklaporan danmenempatkanpernyataan serupa. Satu-satunya perbedaan adalah bahwa setelah pernyataanmenempatkanoutput akan melompat ke baris berikutnya, sedangkan penggunaan pernyataancetak,kursor diposisikan pada baris yang sama.
contoh
#!/usr/bin/ruby print "Hello World" print "Good Morning"
Jalankan contoh di atas output:
Hello WorldGood Morning
Membuka dan Menutup File
Sampai sekarang, Anda harus membaca dan menulis ke standar input dan output. Sekarang, kita akan melihat bagaimana file data aktual.
metodeFile.new
Anda dapat membuat objekFiledigunakan untuk membaca metodeFile.new,menulis atau membaca dan menulis, membaca dan menulis izin tergantung pada parameter modus. Akhirnya, Anda dapat menggunakan metodeFile.closeuntuk menutup file.
tatabahasa
aFile = File.new("filename", "mode") # ... 处理文件 aFile.close
metodeFile.open
Anda dapat membuat objek file baru dengan menggunakan metodeFile.open,dan objek ditugaskan ke file berkas. Namun, ada satu perbedaan antara metodeFile.opendanFile.new.Perbedaannya adalah metodeFile.opendapat dikaitkan dengan blok, tapi tidak metodeFile.new.
File.open("filename", "mode") do |aFile| # ... process the file end
Tabel berikut berisi daftar file terbuka dalam mode yang berbeda:
模式 | 描述 |
---|---|
r | 只读模式。文件指针被放置在文件的开头。这是默认模式。 |
r+ | 读写模式。文件指针被放置在文件的开头。 |
w | 只写模式。如果文件存在,则重写文件。如果文件不存在,则创建一个新文件用于写入。 |
w+ | 读写模式。如果文件存在,则重写已存在的文件。如果文件不存在,则创建一个新文件用于读写。 |
a | 只写模式。如果文件存在,则文件指针被放置在文件的末尾。也就是说,文件是追加模式。如果文件不存在,则创建一个新文件用于写入。 |
a+ | 读写模式。如果文件存在,则文件指针被放置在文件的末尾。也就是说,文件是追加模式。如果文件不存在,则创建一个新文件用于读写。 |
Membaca dan menulis file
Metode untuk sederhana I / O juga dapat digunakan untuk semua file objek. Jadi, mendapat membaca garis dariinput standar,aFile.gets aFile membaca garis dari file objek.
Namun, I / O objek menyediakan paket tambahan metode akses, memberikan kita kenyamanan.
metodesysread
Anda dapat menggunakan metodesysreaduntuk membaca isi file. Bila menggunakan metode sysread, Anda dapat menggunakan salah satu modus untuk membuka file. Sebagai contoh:
Berikut ini adalah file input teks:
This is a simple text file for testing purpose.
Sekarang mari kita coba untuk membaca file:
#!/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 masuk pertama 20 karakter dari file. File pointer akan ditempatkan dalam posisi di file 21 karakter.
metodesyswrite
Anda dapat menggunakan metode untuk menulis ke filesyswrite.Bila menggunakan metode syswrite, Anda perlu membuka file dalam modus menulis. Sebagai contoh:
#!/usr/bin/ruby aFile = File.new("input.txt", "r+") if aFile aFile.syswrite("ABCDEF") else puts "Unable to open file!" end
Laporan ditulis "ABCDEF" ke sebuah file.
metodeeach_byte
Metode ini milikFile kelas.Each_byte metode iteratif mampu string yang masing-masing karakter. Perhatikan contoh kode 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
Satu per satu karakter dilewatkan variabel ch, dan kemudian ditampilkan di layar, seperti yang ditunjukkan di bawah ini:
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...
metodeIO.readlines
filekelas adalah subclass dari kelas IO. kelas IO juga memiliki beberapa metode untuk memanipulasi file.
IO.readlinesadalah IO kelas metode. Metode progresif mengembalikan isi file. Kode berikut menunjukkan metodeIO.readlinesmenggunakan:
#!/usr/bin/ruby arr = IO.readlines("input.txt") puts arr[0] puts arr[1]
Dalam kode ini, variabel adalah arr larik. Setiap baris adalah arr berkas array yanginput.txtelemen. Oleh karena itu, arr [0] akan berisi baris pertama, dan arr [1] akan berisi baris kedua dari file.
metodeIO.foreach
Metode ini juga mengembalikan output progresif.Foreachantara metode yang berbeda dan metodereadlinesdikaitkan blok metodeforeach.Namun, tidak seperti metodereadlines,metodeforeachbukannya kembali array. Sebagai contoh:
#!/usr/bin/ruby IO.foreach("input.txt"){|block| puts block}
Kode ini akanmengujiisi file lulus variabel blok progresif, maka output akan ditampilkan di layar.
Mengubah nama dan menghapus file
Anda dapat mengubah nama dan menghapus filemengubah namadanmenghapusmetode.
Contoh berikut untuk mengubah nama filetest1.txtyangada:
#!/usr/bin/ruby # 重命名文件 test1.txt 为 test2.txt File.rename( "test1.txt", "test2.txt" )
Contoh berikut untuk menghapus filetest2.txtyangada:
#!/usr/bin/ruby # 删除文件 test2.txt File.delete("text2.txt")
mode file dan kepemilikan
Gunakanchmoduntuk mengubah metode dengan pola masker atau file permissions / daftar akses:
Contoh perubahan berikut untuk modeltest.txtfile yang ada untuk nilai mask:
#!/usr/bin/ruby file = File.new( "test.txt", "w" ) file.chmod( 0755 )
Tabel berikut mencantumkan topeng yang berbeda metodechmoddapat digunakan:
掩码 | 描述 |
---|---|
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 | 保存交换文本,甚至在使用后也会保存 |
Akses dokumen
Perintah berikut untuk memeriksa file sebelum membuka file sudah ada:
#!/usr/bin/ruby File.open("file.rb") if File::exists?( "file.rb" )
Perintah berikut untuk query apakah file tersebut adalah benar-benar sebuah file:
#!/usr/bin/ruby # 返回 true 或false File.file?( "text.txt" )
Berikut perintah untuk memeriksa apakah nama file yang diberikan adalah sebuah direktori:
#!/usr/bin/ruby # 一个目录 File::directory?( "/usr/local/bin" ) # => true # 一个文件 File::directory?( "file.rb" ) # => false
Adalah perintah berikut untuk memeriksa file dibaca, ditulis, dieksekusi:
#!/usr/bin/ruby File.readable?( "test.txt" ) # => true File.writable?( "test.txt" ) # => true File.executable?( "test.txt" ) # => false
Perintah berikut memeriksa ukuran file ke nol:
#!/usr/bin/ruby File.zero?( "test.txt" ) # => true
Perintah berikut mengembalikan ukuran file:
#!/usr/bin/ruby File.size?( "text.txt" ) # => 1002
Perintah berikut ini digunakan untuk memeriksa jenis file:
#!/usr/bin/ruby File::ftype( "test.txt" ) # => file
Metode FTYPE mengembalikan nilai berikut untuk mengidentifikasi jenisfile: file, direktori, characterSpecial, blockSpecial, fifo, Link, soketatau tidak diketahui.
Perintah berikut ini digunakan untuk memeriksa file diciptakan, dimodifikasi, atau waktu akses 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 Ruby
Semua file yang terkandung dalam direktori, Ruby menyediakan file proses dan direktori.Berkaskelas untuk bekerja denganfile,kelas Dir untuk direktori kerja.
Isi katalog
Untuk mengubah direktori dalam program Ruby, silakan gunakanDir.chdir.Contoh perubahan berikut ke direktori saat ini adalah/ usr / bin.
Dir.chdir("/usr/bin")
Anda dapat melihat direktoriDir.pwdsaatini:
puts Dir.pwd # 返回当前目录,类似 /usr/bin
Anda dapat menggunakanDir.entriesmendapatkan daftar file dan direktori di dalam direktori yang ditentukan:
puts Dir.entries("/usr/bin").join(' ')
Dir.entriesmengembalikan array yang berisi semua direktori yang ditentukan.Dir.foreachmemberikan fungsi yang sama:
Dir.foreach("/usr/bin") do |entry| puts entry end
Mendapatkan daftar direktori dari cara yang lebih ringkas adalah metode dengan menggunakan array kelas Dir:
Dir["/usr/bin/*"]
Buat direktori
Dir.mkdirdapat digunakan untuk membuat direktori:
Dir.mkdir("mynewdir")
Anda juga dapat mengatur hak akses pada direktori yang baru (tidak ada direktori) diadopsi mkdir:
Catatan: Topeng 755 Set pemilik (owner), milik kelompok (group), setiap orang (dunia [orang]) izin rwxr-xr-x, di mana r = baca baca, w = menulis menulis, x = mengeksekusi eksekusi.
Dir.mkdir( "mynewdir", 755 )
menghapus direktori
Dir.deletedigunakan untuk menghapus direktori.Dir.unlinkdanDir.rmdirmelakukan fungsi yang sama, memberikan kita kenyamanan.
Dir.delete("testdir")
Membuat direktori file temporary &
file-file sementara yang dibuat bahwa hanya dalam proses pelaksanaan program, tetapi tidak disimpan informasi secara permanen.
Dir.tmpdirmenyediakan jalur pada sistem direktori sementara saat ini, yang secara default, tetapi tidak tersedia. Untuk membuatDir.tmpdirtersedia, dengan yang diperlukan 'tmpdir' diperlukan.
Anda dapatDir.tmpdirdanFile.joindigunakan bersama-sama untuk menciptakan sebuah file sementara platform-independen:
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)
Kode ini menciptakan file sementara di mana untuk menulis data, dan kemudian menghapus file. Ruby perpustakaan standar juga berisi sebuah perpustakaan bernamatempfileperpustakaan dapat digunakan untuk membuat file sementara:
require 'tempfile' f = Tempfile.new('tingtong') f.puts "Hello" puts f.path f.close
Built-in Fungsi
berikut ini memberikan daftar lengkap file dan direktori di Ruby built-in fungsi: