Ruby ile Dosya Ä°ÅŸlemleri

Merhabalar,

Bugün ruby’de dosya iÅŸlemleri ve ‘standart input/output’ olarak bildiÄŸimiz konuyu iÅŸleyeceÄŸiz. Öncelikle çok basit bir örnek verelim, ekrandan isim ve yaÅŸ bilgilerini alarak tekrar ekrana yazalım. Ve bunu yaparken tüm bu ‘input/output’ iÅŸlemlerine örnek vermiÅŸ olalım.
[ruby]
$stdout.sync = true # İşlemleri yaparken buffer kullanmaz, verilen işlemi anında yapar.

p “Lütfen adınızı giriniz: ”
name = gets.chomp # gets ile kullanicidan herhangi bir string (get’s’) bilgisi alınır.
print “Lütfen yaşınızı giriniz: ”
age = gets.chomp.to_i # chomp işlemi ile girilen son karakter çıkarılır, böylece enter karakteri işleme alınmaz.
puts “Lütfen kendiniz hakkında birÅŸeyler yazın: ”
descr = readline.chomp # Birkaç satır bilgi almak için kullanılır(mış).

# C dilinde kullanılan bir yazım tekneği
printf “Merhaba %s, %i biraz yaÅŸlanmışsınız.\n%s\n”, name, age, descr
[/ruby]

Bir sonraki aÅŸamada Ruby’nin dosyalar üzerindeki iÅŸlemlerine deÄŸinelim. Öncelikle ruby’nin dünyasında herÅŸeyin nesne olduÄŸunu unutmayalım. EÄŸer bir dosya açacaksak, bu kesinlikle bir sınıf ile eÅŸleÅŸmeli ve iÅŸlemleri bu sınıf üzerinden yapmalıyız.

[ruby]
$stdout.sync = true

File.open(“stdIO01.rb”, “r”) do |file| # stdIO01.rb isimli dosya sadece okuma amacı ile açılır.
puts “– Dosyanin içerigi baslangici –”
puts file.readlines # Dosya içerisinde yer alan tüm bilgiler alınır ve ekrana yazılır.
puts “– Dosyanin içerigi sonu –”
end # Bloğun sonuna gelindiğinde, file değişkeni içerisinde yer alan dosya otomatik olarak kapatılır.
[/ruby]
Yukarıda verdiÄŸimiz örnekte herhangi bir hata durumunda dosyayı kapatmasına dair herhangi bir kod yazmadığım halde bu iÅŸlem gerçekleÅŸir. Bunun nedenini bir sonraki yazımızda daha detaylı bir biçimde inceleriz, ama ÅŸimdiki konumuz ‘input/output’.

Yada bundan daha güvenli bir yol seçebiliriz. Bize tüm dosyayı okuyup, tüm satırları dizi olarak verebilen methodlar da mevcut bunlardan biri;
[ruby]
puts “– Dosyanin içerigi baslangici –”
IO.foreach(“stdIO01.rb”) { |line| puts line }
puts “– Dosyanin içerigi sonu –”
#veya
arr = IO.readlines(“stdIO01.rb”)
puts arr.length
puts arr[0]
[/ruby]

Soru: Hep okuma işlemi yaptık, peki yazma işlemini nasıl gerçekleşir ?
Cevap: Herhangi bir string’e veya ekrana yazar gibi herhangi bir dosyaya da yazılabilir.
Örnek vermek gerekir ise;
[ruby]
$stdout.sync = true

File.open(“stdIO03.rb”, “w”) do |file|
file.puts “$stdout.sync = true”
file.puts “”
file.puts “File.open(\”stdIO03.rb\”, \”w\”) do |file|”
file.printf “\tfile.puts \”Merhaba\”\n”
file.puts “end”
end

puts “– Dosyanin içerigi baslangici –”
IO.foreach(“stdIO03.rb”) { |line| puts line }
puts “– Dosyanin içerigi sonu –”
[/ruby]

Kolay gelsin :)

Ruby ile Dosya Ä°ÅŸlemleri” üzerine 3 yorum

  1. Merak ediyorum,

    program içinde kullanılan bir class dosyası program içinde değiştirilip yeniden yüklenebilir değil mi?

  2. Elbette, disk üzerinde kalıcı bir değişiklik yapmak mümkün olduğu gibi, sadece o anlık değişikliklerde yapılabilir (Extending Objects). Bir sonraki yazımda buna değinirim ama sert bir konu, uzun bir yazı yazmak lazım :)

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir