Skip to content

Instantly share code, notes, and snippets.

@gdemir
Created October 21, 2010 13:29
Show Gist options
  • Save gdemir/638484 to your computer and use it in GitHub Desktop.
Save gdemir/638484 to your computer and use it in GitHub Desktop.
#!/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
no ad sd un
10060264 zinnur yeşilyurt
10060265 baki savaş
10060266 kamer kevser bağlı
10060267 gökhan ceylan
10060268 emre çavuş
10060269 ruziye dağcı
10060270 aydın tunç doyak
10060271 ensar hamza çebi
10060272 salih özdemir
10060273 serdar kale
10060274 rahşan tikis
10060275 adem özgen
10060276 tuğba devravut
10060277 selim bayık
10060278 özge sevim
10060279 asım ölmez
10060280 alaattin usta
10060281 ahmet rauf yılmaz
10060282 ibrahim ay
10060283 abdulbasit imre
10060284 şükran tayar
10060285 aşkın gedik
10060286 güven aydın
10060287 çağatay saltan
10060288 sümeyra özgür
10060289 mert akkaya
10060290 murat can
10060291 hurşit topal
10060292 semih karaköse
10060293 mine öztürk
10060294 muhammet enginar
10060295 tuğba dal
10060296 ecmel kaytazoğlu
10060297 naim akın
10060298 betül saral
10060299 ahmet salih
10060300 burak kara
10060301 alper gençer
10060302 şeyma ibiş
10060303 kübra oğuz
10060304 hasan melih keleş
10060305 merve arslan
10060306 mehmet başal
10060307 yunus ertürk
10060308 fatma tercan
10060309 ömer faruk salman
10060310 mert bahtiyar
10060311 şeyma tekin
10060312 eyüp üsame yemez
10060313 güven şahin
10060314 koray tahta
10060315 gözde sevinç
10060316 nazan poşul
10060317 fethullah candan
10060318 mesut çittir
10060319 nihan çaydaş
10060320 mehmet durak öğütcan
10060554 bahar temiz
10060555 esra yorulmaz
10060556 atakan erdal
10060557 cengiz burak küçük
10060571 ilkin zeynallı
@roktas
Copy link

roktas commented Oct 21, 2010

bu gist'in içine örnek csv dosya ve örnek çalışma betiği de koysana... öbür türlü test etmesi vakit alır.

@gdemir
Copy link
Author

gdemir commented Oct 22, 2010

  • örnek csv yorum satırına yazdım ya da depoda hazır yazılmış var hocam.
  • örnek çalışma betiğini kodun en altına yazdım.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment