-
-
Save gdemir/642630 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
#!/usr/bin/ruby | |
require 'csv' | |
def die(*msg) | |
$stderr.puts(*msg) | |
exit 1 | |
end | |
class Unit | |
def ac(type, csv, islem) | |
begin | |
fp = type.open(csv, islem) | |
rescue Exception => e | |
die "CSV dosya okuma veya yazmada hata: #{e}" | |
end | |
return fp | |
end | |
end | |
class Yukle < Unit | |
attr_accessor :kisiler, :kafa | |
def initialize(csv, gore = "no") | |
self.kisiler = {} | |
@gore = gore | |
oku = ac(CSV, csv, "r") | |
self.kafa = oku.shift | |
# bir şablon oluşturalım, tüm kayıtlar bunun gibi olmalı | |
bunungibi = Hash[*self.kafa.map { |alan| [alan.to_sym, nil] }.flatten] | |
oku.each do |kisi| | |
# şablondan çoğalt | |
kayit = bunungibi.clone | |
# csv satırda her alanı kafadaki sırayla al | |
self.kafa.each { |alan| kayit[alan.to_sym] = kisi.shift } | |
# artık bir nesne oluşturup ekleyebiliriz | |
self.kisiler[kayit[@gore.to_sym]] = kayit | |
end | |
end | |
end | |
class Bosalt < Unit | |
def initialize(c, csv) | |
yaz = ac(File, csv, "w") | |
CSV::Writer.generate(yaz) do |row| | |
# csvnin ilk satırına kafa bilgisini ekle | |
row << c.kafa | |
# kisilerden her kisinin bilgilerini temp'e doldur sonra satıra ekle | |
c.kisiler.each do |no, kisi| | |
temp = [] | |
c.kafa.each { |alan| temp << kisi[alan.to_sym]} | |
row << temp | |
end | |
end | |
end | |
end | |
csv = ARGV.shift or die "Kullanım: #{$0} <csvdosya>" | |
FileTest.exists? csv or die "Dosya #{csv} bulunamadı" | |
#demo | |
c2010 = Yukle.new(csv) | |
c2010.kisiler.each do |no, kisi| | |
puts kisi[:no] + " | " + kisi[:ad] + " | " + kisi[:sd] | |
end | |
Bosalt.new(c2010, csv) |
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 | |
---|---|---|---|---|
10060268 | emre | çavuş | ||
10060264 | zinnur | yeşilyurt | ||
10060265 | baki | savaş | ||
10060266 | kamer kevser | bağlı | ||
10060267 | gökhan | ceylan |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment