Latest web development tutorials

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:

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