Ruby - Dosya G / Ç
Ruby, Kernel modülünde uygulanan G / Ç ile ilgili bir dizi yöntem sağlar. Tüm G / Ç yöntemleri, sınıf IO'dan türetilmiştir.
Sınıf IO , okuma, yazma, alır, koyar, readline, getc ve printf gibi tüm temel yöntemleri sağlar .
Bu bölüm, Ruby'de bulunan tüm temel I / O işlevlerini kapsayacaktır. Daha fazla işlev için lütfen Ruby Class IO'ya bakın .
Puts İfadesi
Önceki bölümlerde, değişkenlere değerler atadınız ve ardından puts deyimini kullanarak çıktıyı yazdırdınız .
Koyar deyim değişken saklanan değeri görüntülemek için programı talimatını verir. Bu, yazdığı her satırın sonuna yeni bir satır ekleyecektir.
Misal
#!/usr/bin/ruby
val1 = "This is variable one"
val2 = "This is variable two"
puts val1
puts val2
Bu, aşağıdaki sonucu verecektir -
This is variable one
This is variable two
Get İfadesi
Alır açıklamada STDIN adlandırılan standart ekrandan kullanıcıdan herhangi bir giriş almak için kullanılabilir.
Misal
Aşağıdaki kod, gets ifadesinin nasıl kullanılacağını gösterir. Bu kod, kullanıcıdan bir val değişkeninde saklanacak ve son olarak STDOUT üzerine yazdırılacak bir değer girmesini isteyecektir.
#!/usr/bin/ruby
puts "Enter a value :"
val = gets
puts val
Bu, aşağıdaki sonucu verecektir -
Enter a value :
This is entered value
This is entered value
Putc Bildirimi
Tüm dizeyi ekrana çıkaran puts ifadesinin aksine, putc ifadesi her seferinde bir karakter çıktı vermek için kullanılabilir.
Misal
Aşağıdaki kodun çıktısı sadece H karakteridir -
#!/usr/bin/ruby
str = "Hello Ruby!"
putc str
Bu, aşağıdaki sonucu verecektir -
H
Baskı Beyanı
Baskı deyimi benzer koyar açıklamada. Tek fark, puts ifadesinin içeriği yazdırdıktan sonra bir sonraki satıra gitmesidir, oysa print ifadesi ile imleç aynı satıra konumlandırılır.
Misal
#!/usr/bin/ruby
print "Hello World"
print "Good Morning"
Bu, aşağıdaki sonucu verecektir -
Hello WorldGood Morning
Dosyaları Açma ve Kapatma
Şimdiye kadar, standart girdi ve çıktıyı okuyup yazıyordunuz. Şimdi, gerçek veri dosyalarıyla nasıl oynanacağını göreceğiz.
File.new Yöntemi
Mod dizesine göre, okumak, yazmak veya her ikisi için File.new yöntemini kullanarak bir File nesnesi oluşturabilirsiniz . Son olarak, bu dosyayı kapatmak için File.close yöntemini kullanabilirsiniz .
Sözdizimi
aFile = File.new("filename", "mode")
# ... process the file
aFile.close
File.open Yöntemi
Yeni bir dosya nesnesi oluşturmak ve bu dosya nesnesini bir dosyaya atamak için File.open yöntemini kullanabilirsiniz . Ancak, File.open ve File.new yöntemleri arasında bir fark vardır . Aradaki fark, File.open yönteminin bir blokla ilişkilendirilebilirken, File.new yöntemini kullanarak aynısını yapamazsınız .
File.open("filename", "mode") do |aFile|
# ... process the file
end
Sr.No. | Modlar ve Açıklama |
---|---|
1 | r Salt okunur mod. Dosya tanıtıcısı dosyanın başlangıcına yerleştirilir. Bu varsayılan moddur. |
2 | r+ Okuma-yazma modu. Dosya tanıtıcısı dosyanın başlangıcında olacaktır. |
3 | w Yalnızca yazma modu. Dosya varsa dosyanın üzerine yazar. Dosya yoksa, yazmak için yeni bir dosya oluşturur. |
4 | w+ Okuma-yazma modu. Dosya varsa mevcut dosyanın üzerine yazar. Dosya yoksa, okumak ve yazmak için yeni bir dosya oluşturur. |
5 | a Yalnızca yazma modu. Dosya varsa, dosya işaretçisi dosyanın sonundadır. Yani dosya ekleme modundadır. Dosya yoksa, yazmak için yeni bir dosya oluşturur. |
6 | a+ Okuma ve yazma modu. Dosya varsa, dosya işaretçisi dosyanın sonundadır. Dosya, ekleme modunda açılır. Dosya yoksa, okuma ve yazma için yeni bir dosya oluşturur. |
Dosyaları Okuma ve Yazma
'Basit' G / Ç için kullandığımız yöntemlerin aynısı tüm dosya nesneleri için mevcuttur. Yani, standart girdiden bir satırı okur ve aFile.gets , aFile dosya nesnesinden bir satır okur.
Bununla birlikte, G / Ç nesneleri hayatımızı kolaylaştırmak için ek erişim yöntemleri kümesi sağlar.
Sysread Yöntemi
Bir dosyanın içeriğini okumak için sysread yöntemini kullanabilirsiniz . Sysread yöntemini kullanırken dosyayı herhangi bir modda açabilirsiniz. Örneğin -
Giriş metin dosyası aşağıdadır -
This is a simple text file for testing purpose.
Şimdi bu dosyayı okumaya çalışalım -
#!/usr/bin/ruby
aFile = File.new("input.txt", "r")
if aFile
content = aFile.sysread(20)
puts content
else
puts "Unable to open file!"
end
Bu ifade, dosyanın ilk 20 karakterini çıkaracaktır. Dosya işaretçisi şimdi dosyadaki 21. karaktere yerleştirilecektir.
Syswrite Yöntemi
İçeriği bir dosyaya yazmak için syswrite yöntemini kullanabilirsiniz. Syswrite yöntemini kullanırken dosyayı yazma modunda açmanız gerekir. Örneğin -
#!/usr/bin/ruby
aFile = File.new("input.txt", "r+")
if aFile
aFile.syswrite("ABCDEF")
else
puts "Unable to open file!"
end
Bu ifade, dosyaya "ABCDEF" yazacaktır.
Each_byte Yöntemi
Bu yöntem File sınıfına aittir . Each_byte yöntemi her zaman bir blok ile ilişkilidir. Aşağıdaki kod örneğini düşünün -
#!/usr/bin/ruby
aFile = File.new("input.txt", "r+")
if aFile
aFile.syswrite("ABCDEF")
aFile.each_byte {|ch| putc ch; putc ?. }
else
puts "Unable to open file!"
end
Karakterler ch değişkenine birer birer aktarılır ve ardından ekranda aşağıdaki gibi görüntülenir -
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 Yöntemi
Sınıf Dosya sınıfı IO bir alt sınıfıdır. Sınıf IO ayrıca dosyaları işlemek için kullanılabilecek bazı yöntemlere sahiptir.
IO sınıfı yöntemlerinden biri IO.readlines'dır . Bu yöntem, dosyanın içeriğini satır satır döndürür. Aşağıdaki kod, IO.readlines yönteminin kullanımını görüntüler -
#!/usr/bin/ruby
arr = IO.readlines("input.txt")
puts arr[0]
puts arr[1]
Bu kodda, dizi değişkeni bir dizidir. İnput.txt dosyasının her satırı , dizi dizisindeki bir öğe olacaktır. Bu nedenle, arr [0] ilk satırı, arr [1] ise dosyanın ikinci satırını içerecektir.
IO.foreach Yöntemi
Bu yöntem aynı zamanda satır satır çıktı verir. Yöntem arasındaki fark foreach ve yöntem readlines yöntem olup foreach bir blok ile ilişkilidir. Ancak, yöntem okuma satırlarının aksine, foreach yöntemi bir dizi döndürmez. Örneğin -
#!/usr/bin/ruby
IO.foreach("input.txt"){|block| puts block}
Bu kod, dosya testinin içeriğini satır satır değişken bloğa geçirecek ve ardından çıktı ekranda görüntülenecektir.
Dosyaları Yeniden Adlandırma ve Silme
Yeniden adlandırma ve silme yöntemleriyle dosyaları Ruby ile programlı olarak yeniden adlandırabilir ve silebilirsiniz .
Aşağıda, var olan bir dosyayı yeniden adlandırmak için örnek verilmiştir test1.txt -
#!/usr/bin/ruby
# Rename a file from test1.txt to test2.txt
File.rename( "test1.txt", "test2.txt" )
Mevcut bir test2.txt dosyasını silme örneği aşağıdadır -
#!/usr/bin/ruby
# Delete file test2.txt
File.delete("test2.txt")
Dosya Modları ve Sahiplik
Bir dosyanın modunu veya izinlerini / erişim listesini değiştirmek için chmod yöntemini bir maske ile kullanın -
Aşağıda, var olan bir test.txt dosyasının modunu bir maske değerine değiştirmek için örnek verilmiştir -
#!/usr/bin/ruby
file = File.new( "test.txt", "w" )
file.chmod( 0755 )
Sr.No. | Maske ve Açıklama |
---|---|
1 | 0700 sahibi için rwx maskesi |
2 | 0400 sahibi için r |
3 | 0200 w sahibi için |
4 | 0100 sahibi için x |
5 | 0070 grup için rwx maskesi |
6 | 0040 grup için r |
7 | 0020 w grubu için |
8 | 0010 grup için x |
9 | 0007 diğerleri için rwx maskesi |
10 | 0004 diğerleri için r |
11 | 0002 w diğeri için |
12 | 0001 diğeri için x |
13 | 4000 Yürütme sırasında kullanıcı kimliğini ayarlayın |
14 | 2000 Yürütme sırasında grup kimliğini ayarlayın |
15 | 1000 Değiştirilen metni kullandıktan sonra bile kaydedin |
Dosya Sorguları
Aşağıdaki komut, açmadan önce bir dosyanın var olup olmadığını test eder -
#!/usr/bin/ruby
File.open("file.rb") if File::exists?( "file.rb" )
Aşağıdaki komut dosyanın gerçekten bir dosya olup olmadığını sorgular -
#!/usr/bin/ruby
# This returns either true or false
File.file?( "text.txt" )
Aşağıdaki komut, verilen dosya adının bir dizin olup olmadığını bulur -
#!/usr/bin/ruby
# a directory
File::directory?( "/usr/local/bin" ) # => true
# a file
File::directory?( "file.rb" ) # => false
Aşağıdaki komut dosyanın okunabilir mi, yazılabilir mi yoksa yürütülebilir mi olduğunu bulur -
#!/usr/bin/ruby
File.readable?( "test.txt" ) # => true
File.writable?( "test.txt" ) # => true
File.executable?( "test.txt" ) # => false
Aşağıdaki komut dosyanın boyutunun sıfır olup olmadığını bulur -
#!/usr/bin/ruby
File.zero?( "test.txt" ) # => true
Aşağıdaki komut dosyanın boyutunu döndürür -
#!/usr/bin/ruby
File.size?( "text.txt" ) # => 1002
Aşağıdaki komut, bir dosya türünü bulmak için kullanılabilir -
#!/usr/bin/ruby
File::ftype( "test.txt" ) # => file
Ftype yöntemi , dosya, dizin, characterSpecial, blockSpecial, fifo, bağlantı, soket veya bilinmeyenlerden birini döndürerek dosyanın türünü tanımlar .
Aşağıdaki komut, bir dosyanın ne zaman oluşturulduğunu, değiştirildiğini veya en son ne zaman erişildiğini bulmak için kullanılabilir -
#!/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
Ruby'de Dizinler
Tüm dosyalar çeşitli dizinlerde bulunur ve Ruby bunları işlemekte de sorun yaşamaz. Oysa Dosya sınıfı kolları dosyaları, dizinleri ile işlenir Dir sınıfında.
Dizinler Arasında Gezinme
Bir Ruby programı içindeki dizini değiştirmek için, Dir.chdir'i aşağıdaki gibi kullanın . Bu örnek, mevcut dizini / usr / bin olarak değiştirir .
Dir.chdir("/usr/bin")
Dir.pwd ile mevcut dizinin ne olduğunu öğrenebilirsiniz -
puts Dir.pwd # This will return something like /usr/bin
Dizin girişlerini kullanarak belirli bir dizindeki dosyaların ve dizinlerin bir listesini alabilirsiniz -
puts Dir.entries("/usr/bin").join(' ')
Dir.entries , belirtilen dizindeki tüm girdileri içeren bir dizi döndürür. Dir.foreach aynı özelliği sağlar -
Dir.foreach("/usr/bin") do |entry|
puts entry
end
Dizin listelerini almanın daha da kısa bir yolu, Dir'in sınıf dizisi yöntemini kullanmaktır -
Dir["/usr/bin/*"]
Bir Dizin Oluşturma
Dir.mkdir dizinleri oluşturmak için kullanılabilir -
Dir.mkdir("mynewdir")
Ayrıca mkdir ile yeni bir dizinde (zaten var olan bir dizinde değil) izinleri ayarlayabilirsiniz -
NOTE - Maske 755 sahip, grup, dünya [herkes] izinlerini rwxr-xr-x'e ayarlar; burada r = okuma, w = yazma ve x = yürütme.
Dir.mkdir( "mynewdir", 755 )
Bir Dizini Silme
Dir.delete bir dizin silmek için kullanılabilir. Dir.unlink ve Dir.rmdir gerçekleştirir tam olarak aynı işlevi ve kullanım kolaylığı için temin edilmiştir.
Dir.delete("testdir")
Dosyalar ve Geçici Dizinler Oluşturma
Geçici dosyalar, bir programın yürütülmesi sırasında kısa bir süre oluşturulabilen, ancak kalıcı bir bilgi deposu olmayan dosyalardır.
Dir.tmpdir , yöntem varsayılan olarak kullanılamasa da, geçerli sistemdeki geçici dizinin yolunu sağlar. Dir.tmpdir'i kullanılabilir kılmak için gerekli 'tmpdir' kullanmak gerekir.
Sen kullanabilirsiniz Dir.tmpdir ile File.join bir platformdan bağımsız geçici dosya oluşturmak için -
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)
Bu kod, geçici bir dosya oluşturur, ona veri yazar ve onu siler. Ruby'nin standart kitaplığı ayrıca sizin için geçici dosyalar oluşturabilen Tempfile adlı bir kitaplık içerir -
require 'tempfile'
f = Tempfile.new('tingtong')
f.puts "Hello"
puts f.path
f.close
Yerleşik İşlevler
Dosyaları ve dizinleri işlemek için Ruby'nin yerleşik işlevleri şunlardır -
Dosya Sınıfı ve Yöntemleri .
Dir Sınıfı ve Yöntemleri .