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 .