Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/ruby
- # XXX Ruby'nin özelliklerini tanımak için yazılan deneysel bir koddur
- # XXX Sorgulamadan örnek almayın!
- require 'csv'
- def die(*message)
- $stderr.puts(*message)
- exit 1
- end
- class Kisi
- attr_accessor :no, :ad, :sd, :un
- def initialize(kayit)
- # verilen kayıt sözlüğünden ayrı ayrı atama yapmak yerine class içinde
- # tanımlı sembollere bakarak sözlüğü olduğu gibi aktarmaya çalışıyoruz
- kayit.each do |k, v|
- eval <<-EOS
- @#{k} = v unless defined? @#{k}
- EOS
- end
- end
- def bas
- puts "No: #{self.no}"
- puts "Ad: #{self.ad}"
- puts "Soyad: #{self.sd}"
- puts
- end
- end
- class Topluluk
- def initialize(csv, gore="no")
- @topluluk = {}
- @gore = gore
- begin
- oku = CSV.open(csv, "r")
- rescue Exception => e
- die "CSV dosya okunurken hata: #{e}"
- end
- @kafa = oku.shift
- # bir şablon oluşturalım, tüm kayıtlar bunun gibi olmalı
- bunungibi = Hash[*@kafa.map { |elt| [elt.to_sym, nil] }.flatten]
- oku.each do |kisi|
- # şablondan çoğalt
- kayit = bunungibi.clone
- # csv satırda her alanı kafadki sırayla al
- @kafa.each { |alan| kayit[alan.to_sym] = kisi.shift }
- # artık bir nesne oluşturup ekleyebiliriz
- @topluluk[kayit[gore.to_sym]] = Kisi.new kayit
- end
- end
- # basma görevini ilgili nesneye paslıyoruz, başka bir görevimiz yok
- def bas(hangi)
- if hangi
- # anahtar verilmişse sadece ilgili kişi
- kisi = @topluluk[hangi]
- kisi.bas if kisi
- else
- # aksi taktirde hepsi
- @topluluk.each do |gore, kisi|
- kisi.bas
- end
- end
- end
- end
- csv = ARGV.shift or die "Kullanım: #{$0} <csvdosya>"
- FileTest.exists? csv or die "Dosya #{csv} bulunamadı"
- topluluk = Topluluk.new(csv).bas ARGV.shift
Add Comment
Please, Sign In to add comment