-
-
Save roktas/642092 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/ruby | |
require 'csv' | |
##[global]############################################################# | |
$kisiler = {} #db.csv'den okunan bilgilerin tutuldugu sozluk | |
$csvname = "db.csv" #okunacak db'nin adı. | |
$kafa = [] #csv dosyasının ilk satırı.(örn : ["ad", "soyad", "no"]) | |
$key = "no" #herhangi bir csv de key olarak seçeceginiz ifade. | |
$value = [] #$kafa'nın keysiz hali.(örn : ["ad", "soyad"]) | |
####################################################################### | |
# | |
# | |
# csv'de alanlar "ad", "sd" ,"no", "un" olsun. | |
# global olarak $key = "no" seçerseniz, yükleme sırasında | |
# kisiler = { | |
# no => { "ad" => "gokhan", "sd" => "demir", "un" => "gdemir"}, | |
# no => { "ad" => "emin", "sd" => "eker", "un" => "eeker" }, | |
# } | |
# | |
# ve $kafa = ["no", "ad", "sd", "un"], $value = ["ad", "sd", "un" ]olacak, | |
# | |
# şekilde yükleyecektir.Örneğin csv'de gokhanın no'su "12345" olsun. | |
# | |
# ÖRNEK[1] : ogrenci = $kisiler["12345"] denirse, | |
# print ogrenci --> {"ad" => "gokhan", "sd" => "demir", "un" => "gdemir"} döner. | |
# | |
# ÖRNEK[2] : ogrenci = $kisiler["12345"] | |
# print ogrenci["ad"] --> "gokhan" döner. | |
# | |
# ÖRNEK[3] : for no in $kisiler.keys | |
# print $kisiler[no]["ad"] --> "gokhan", "emin" döner. | |
# | |
# ÖRNEK CSV : | |
# no, ad , sd, un | |
# 1,emin,eker,, | |
# 2,emre,yılmaz,, | |
# | |
def _values(kisi, key_indis, sozluk) | |
$kafa.each_index{ |indis| | |
alan = $kafa[indis] | |
sozluk[alan] = kisi[indis] if indis != key_indis | |
} | |
sozluk | |
end | |
def yukle | |
oku = CSV.open($csvname, "r") | |
$kafa = oku.shift # ["no","ad","sd","un"] | |
*$value = *$kafa | |
key_indis = $kafa.index($key) | |
$value.delete($key) # ["ad", "sd", "un"] | |
oku.each { |kisi| | |
$kisiler[kisi[key_indis]] = _values(kisi, key_indis, {}) | |
} | |
end | |
def bosalt | |
CSV::Writer.generate(File.open($csvname, "w")) do |csv| | |
csv << $kafa | |
$kisiler.each do |no, value| | |
yaz = [] | |
yaz << no | |
$value.each { |v| yaz << value[v]} | |
csv << yaz | |
end | |
end | |
end | |
### DEMO | |
yukle | |
$kisiler.each { |no| puts no + " : " + $kisiler[no] } | |
bosalt |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
no | ad | sd | un | |
---|---|---|---|---|
10060264 | zinnur | yeşilyurt | ||
10060265 | baki | savaş | ||
10060266 | kamer kevser | bağlı | ||
10060267 | gökhan | ceylan | ||
10060268 | emre | çavuş |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment