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 :)
abü, lokum vercen mi, el öpmeğe geldim :P
Merak ediyorum,
program içinde kullanılan bir class dosyası program içinde değiştirilip yeniden yüklenebilir değil mi?
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 :)