Guest User

Untitled

a guest
Jun 19th, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. #!/usr/bin/ruby
  2.  
  3. # XXX Ruby'nin özelliklerini tanımak için yazılan deneysel bir koddur
  4. # XXX Sorgulamadan örnek almayın!
  5.  
  6. require 'csv'
  7.  
  8. def die(*message)
  9. $stderr.puts(*message)
  10. exit 1
  11. end
  12.  
  13. class Kisi
  14. attr_accessor :no, :ad, :sd, :un
  15.  
  16. def initialize(kayit)
  17. # verilen kayıt sözlüğünden ayrı ayrı atama yapmak yerine class içinde
  18. # tanımlı sembollere bakarak sözlüğü olduğu gibi aktarmaya çalışıyoruz
  19. kayit.each do |k, v|
  20. eval <<-EOS
  21. @#{k} = v unless defined? @#{k}
  22. EOS
  23. end
  24. end
  25.  
  26. def bas
  27. puts "No: #{self.no}"
  28. puts "Ad: #{self.ad}"
  29. puts "Soyad: #{self.sd}"
  30. puts
  31. end
  32. end
  33.  
  34. class Topluluk
  35. def initialize(csv, gore="no")
  36. @topluluk = {}
  37. @gore = gore
  38.  
  39. begin
  40. oku = CSV.open(csv, "r")
  41. rescue Exception => e
  42. die "CSV dosya okunurken hata: #{e}"
  43. end
  44.  
  45. @kafa = oku.shift
  46.  
  47. # bir şablon oluşturalım, tüm kayıtlar bunun gibi olmalı
  48. bunungibi = Hash[*@kafa.map { |elt| [elt.to_sym, nil] }.flatten]
  49.  
  50. oku.each do |kisi|
  51. # şablondan çoğalt
  52. kayit = bunungibi.clone
  53.  
  54. # csv satırda her alanı kafadki sırayla al
  55. @kafa.each { |alan| kayit[alan.to_sym] = kisi.shift }
  56.  
  57. # artık bir nesne oluşturup ekleyebiliriz
  58. @topluluk[kayit[gore.to_sym]] = Kisi.new kayit
  59. end
  60. end
  61.  
  62. # basma görevini ilgili nesneye paslıyoruz, başka bir görevimiz yok
  63. def bas(hangi)
  64. if hangi
  65. # anahtar verilmişse sadece ilgili kişi
  66. kisi = @topluluk[hangi]
  67. kisi.bas if kisi
  68. else
  69. # aksi taktirde hepsi
  70. @topluluk.each do |gore, kisi|
  71. kisi.bas
  72. end
  73. end
  74. end
  75. end
  76.  
  77. csv = ARGV.shift or die "Kullanım: #{$0} <csvdosya>"
  78. FileTest.exists? csv or die "Dosya #{csv} bulunamadı"
  79.  
  80. topluluk = Topluluk.new(csv).bas ARGV.shift
Add Comment
Please, Sign In to add comment