[Fwd: Re: çift kayıtları bulma]

2006-07-05 Başlik Zeki Çatav
Sanırım bu e-posta gitmedi, yada bana geri gelmedi. Ekte tekrar
gönderiyorum.
---BeginMessage---
Sal, 2006-07-04 tarihinde 18:53 +0300 saatinde, Recai Oktaş yazdı:
 * Zeki Çatav [2006-07-04 10:32:05+0300]
  Sal, 2006-07-04 tarihinde 02:38 +0300 saatinde, Recai Oktaş yazdı:
   Zeki hocam, ekte hızlıca yazdığım bir perl betiği gönderiyorum.  CPAN'ı
 [...]
  Bu betik çalıştı. Seçilen değişkene göre ayıklama işlemini başarıyla
  yapabildi. Ancak birşey daha sormak istiyorum. Seçilen değişken bir
 
 Ektekini deneyelim.  XBase modülünde bu işi daha zarif yapmanın bir yolu
 vardır belki, ama bildiğimiz taraftan gitmek daha kestirme geldi.  Yeni
 haliyle şöyle kullanacaksınız:
 
 # alan adları ve sütun noları görüntüler
 ./dbf_uniq.pl foo.dbf
 # 3-5 ve 9 sütunları ve FOO ile BAR arası kayıtları işler
 ./dbf_uniq.pl foo.dbf 3-5 FOO-BAR 9
Merhaba,
Bu yöntem ile belli bir aralığı kontrol edip seçim yapamadım. Tek değişkene göre
seçim yaptı ama bu yöntemle dosya fazla kırpıldı. 1007 kayıt içeren bir dosyayı 
bu yöntemle dosya numarası değişkenine göre tarayınca 402 kayda
indirgedi. Oysa ilk önerdiğiniz (dünkü e-postanız) yöntemde aynı alana
göre tarama 758 kayda indiriyordu.
Aynı dosyayı .csv formatına çevirip Serdar Aytekin'in önerdiği yöntemle
cat aaanv.csv | sort -t' ' | uniq -w10  dene1.txt işleyince 751 kayıt
ile sonuçlanıyor. -w10 sadece dosya numarası kadar karaktere karşılık
geliyor.
Ayrıca bugünkü perl betiği değişken adlarını karışık sıralıyor, dünkü
numarasız ama doğru sırayla dökmekteydi.

Son perl betiği çıktısı 
..
Malformed UTF-8 character (byte 0xfe) at dbf_uniq2.pl line 54.
Malformed UTF-8 character (unexpected non-continuation byte 0x73,
immediately after start byte 0xfd) at dbf_uniq2.pl line 54.
Malformed UTF-8 character (unexpected non-continuation byte 0x7a,
immediately after start byte 0xfd) at dbf_uniq2.pl line 54.
== [INDEKS] ALAN_ADI ==
[59] DESTEK[74] LBHT[63] OPRITM[95] CIKISTRH[50]
ACIK3AAA[85] VENTILAT[76] YBRITM[3] SOYAD[94] YBCIKTRH
[87] YBKOMP2[22] HT[30] SISTEM2[12] ISLM1TRH[17] AO
[8] ILCE[93] YBCIKTUR[20] PAKET[42] TANI2AAA[33]
GRFOZELL[68] KOMPTED2[11] ILKISLM1[86] YBKOMP1[6] ADRES
[100] CIKACIK1[67] KOMPTED1[29] DURUM1[23] OBEZ[15]
ILKISLM3[37] KAPAKNO[18] SIGARA[13] ILKISLM2[16]
ISLM3TRH[35] GRFBOY[14] ISLM2TRH[46] ISLEM2AA[52] TRPERF
[4] YAS[90] YBKOMPTE[47] ISLEM3AA[26] SEKEL[102]
CIKACIK3[24] LIPID[73] YBLCO[57] OPERTRH[48] ACIK1AAA
[92] YBTDP[34] GRFCAP[79] MKDSURE1[83] DREN1[10] PKODU
[62] ASISTE[101] CIKACIK2[7] ADRES2[25] EMBSSS[55]
TRPSURE[69] KOMPTED3[54] RSPSURE[60] INOTROP[105]
PLKFORM[40] ASPSURE[106] YATISTRH[56] TSASURE[84] DREN2
[21] DM[27] EMBPERFR[32] GRFTCINS[2] AD[104] PLKTRH
[89] YBKOMP4[58] AAANVRZM[78] YBMKDST1[38] REIMPLNT  [75]
YBCHF[5] CINS[49] ACIK2AAA[103] CIKISTAR[19] YIL[39]
ASPERF[81] MKDSURE2[88] YBKOMP3[99] CIKKOMP3[41]
TANI1AAA[28] SISTEM1[70] OPEX[31] DURUM2[45] ISLEM1AA
[97] CIKKOMP1[80] YBMKDST2[77] YBISKEMI[1] DN[98]
CIKKOMP2[91] YBKAN[53] TSA[96] CIKTURU[61] IABP[65]
OPKOMP2[82] YBIDRAR[36] KAPAKKOD[51] RSPERF[43] TANI3AAA
[72] YBGIRTRH[71] OPEXNDEN[66] OPKOMP3[9] IL[64] OPKOMP1
[44] TANI4AAA


İlk perl betiği çıktısı

Malformed UTF-8 character (byte 0xfe) at dbf_uniq.pl line 33.
Malformed UTF-8 character (unexpected non-continuation byte 0xfd,
immediately after start byte 0xf0) at dbf_uniq.pl line 33.Malformed
UTF-8 character (unexpected non-continuation byte 0x64, immediately
after start byte 0xfd) at dbf_uniq.pl line 33.Malformed UTF-8 character
(unexpected non-continuation byte 0x69, immediately after start byte
0xe7) at dbf_uniq.pl line 33.Aadaki alanlardan biri seilmeli:
DN AD SOYAD YAS CINS ADRES ADRES2 ILCE IL PKODU ILKISLM1 ISLM1TRH
ILKISLM2 ISLM2TRH ILKISLM3 ISLM3TRH AO SIGARA YIL PAKET DM HT OBEZ LIPID
EMBSSS SEKEL EMBPERFR SISTEM1 DURUM1 SISTEM2 DURUM2 GRFTCINS GRFOZELL
GRFCAP GRFBOY KAPAKKOD KAPAKNO REIMPLNT ASPERF ASPSURE TANI1AAA TANI2AAA
TANI3AAA TANI4AAA ISLEM1AA ISLEM2AA ISLEM3AA ACIK1AAA ACIK2AAA ACIK3AAA
RSPERF TRPERF TSA RSPSURE TRPSURE TSASURE OPERTRH AAANVRZM DESTEK
INOTROP IABP ASISTE OPRITM OPKOMP1 OPKOMP2 OPKOMP3 KOMPTED1 KOMPTED2
KOMPTED3 OPEX OPEXNDEN YBGIRTRH YBLCO LBHT YBCHF YBRITM YBISKEMI
YBMKDST1 MKDSURE1 YBMKDST2 MKDSURE2 YBIDRAR DREN1 DREN2 VENTILAT YBKOMP1
YBKOMP2 YBKOMP3 YBKOMP4 YBKOMPTE YBKAN YBTDP YBCIKTUR YBCIKTRH CIKISTRH
CIKTURU CIKKOMP1 CIKKOMP2 CIKKOMP3 CIKACIK1 CIKACIK2 CIKACIK3 CIKISTAR
PLKTRH PLKFORM YATISTRH

dbf formatında perl ile işlem yapmak ile csv 

Re: [Fwd: Re: çift kayıtları bulma]

2006-07-05 Başlik Zeki Çatav
Çrş, 2006-07-05 tarihinde 18:52 +0300 saatinde, Recai Oktaş yazdı:
Merhaba,
 Aralık dediğinizden ben mesela 3.ncü ve 15.nci sütunlar arasını
 anlıyorum.  Eğer belirli bir sütundaki (alandaki) değer aralığını
 kastediyorsanız o farklı.  Bu (basit) betik içeriğin ayrıntılarıyla
 ilgilenmez, sadece kayıtların (karakter bazlı bir karşılaştırmayla)
 mükerrer olup olmadığına bakar.
Evet benim kasdettiğimde aynen 3. ve 15. sütunlar arası tanımına uyuyor.
  seçim yaptı ama bu yöntemle dosya fazla kırpıldı. 1007 kayıt içeren bir 
  dosyayı 
  bu yöntemle dosya numarası değişkenine göre tarayınca 402 kayda
  indirgedi. Oysa ilk önerdiğiniz (dünkü e-postanız) yöntemde aynı alana
  göre tarama 758 kayda indiriyordu.
 
 Evet, hata yapmışım.  Ekteki sürümde bu hatanın olmaması lazım.
Maalesef aynı şekilde 402 kayda indirgiyor.
  Aynı dosyayı .csv formatına çevirip Serdar Aytekin'in önerdiği yöntemle
  cat aaanv.csv | sort -t' ' | uniq -w10  dene1.txt işleyince 751 kayıt
  ile sonuçlanıyor. -w10 sadece dosya numarası kadar karaktere karşılık
  geliyor.
  Ayrıca bugünkü perl betiği değişken adlarını karışık sıralıyor, dünkü
  numarasız ama doğru sırayla dökmekteydi.
 
 Düzelttim.
Evet bu kısım düzelmiş. Doğru sırada listeliyor.
  Son perl betiği çıktısı 
  ..
  Malformed UTF-8 character (byte 0xfe) at dbf_uniq2.pl line 54.
   ^^
 
 Bu uyarılar zararsız.  Bazı iletiler için UTF-8 kodlu Türkçe karakterler
 kullanmıştım.  Bu karakterler posta iletimi sırasında ISO'ya dönüştürülmüş
 görünüyor.  Yenisini gzip korumalı olarak gönderiyorum.  Yine sorun çıkarsa
 göz ardı edin.
İşlemde çıkan tek hata bu oldu. UTF-8 karakter hatası kalktı.
Use of uninitialized value in hash element at dbf_uniq.pl line 67.
  dbf formatında perl ile işlem yapmak ile csv formatında bash ile işlem
  yapmak öneriniz nedir?
 
 Bir kereye has bir işlem ise bu, en basit (ve sizin tarafınızdan müdahale
 edilebilir) olanını, yani Serdar'ın önerdiği yöntemi tercih edebilirsiniz.
 Ama böyle başka bir çok dosya varsa ve gelecekte bu durumla tekrar
 karşılaşma ihtimaliniz varsa dbf üzerinden gitmek daha uygun olabilir.
Bu dosyalar bizim hasta veri tabanı programımızın sorgu sonucu oluşturduğu bir 
veri alt grubu.
Butür dosyalar hep olacak, bende o nedenle sizin önerdiğiniz yöntem ile
gitmeyi düşünerek size zahmet vermeye devam etmekteyim.
Ancak eğer isterseniz sizi daha fazla yormaktan vazgeçip diğer yöntemi
kullanmaya devam edebilirim.
Teşekkürler.
İyi çalışmalar.

-- 
Zeki Çatav [EMAIL PROTECTED]
Türkiye Yüksek İhtisas Hastanesi


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: çift kayıtları bulma

2006-07-04 Başlik Zeki Çatav
Sal, 2006-07-04 tarihinde 00:26 +0300 saatinde, Serdar Aytekin yazdı:
 # cat dosya_ismi | sort | uniq -t' ' -W1
 
 veya;
 
 # cat dosya_ismi | sort -t' ' | uniq -W1
 
 seklinde deneyebilir misiniz?
 
 -- 
 Saygilarimla,
 Serdar Aytekin
Merhaba,
Bu komutlar işe yaradı. Ayrıca -w (küçük harf) parametresi ile istediğim
kadar karakteri (baştan başlayıp sıralı olarak) karşılaştırmaya dahil
edebildim.
Teşekkür ederim.
İyi çalışmalar.

-- 
Zeki Çatav [EMAIL PROTECTED]
Türkiye Yüksek İhtisas Hastanesi


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: çift kayıtları bulma

2006-07-04 Başlik Zeki Çatav
Sal, 2006-07-04 tarihinde 02:38 +0300 saatinde, Recai Oktaş yazdı:
 Zeki hocam, ekte hızlıca yazdığım bir perl betiği gönderiyorum.  CPAN'ı
 biraz araştırdım (ne ararsanız var), DBase dosyalarını okuyan bir modül
 mevcut: XBase ve Debian paketi de var bunun.  Önce bu paketi kurmalısınız:
 
 apt-get install libdbd-xbase-perl
 
 Paketle birlikte dbf_dump adında bir araç geliyor, veritabanının metin
 dökümünü alabiliyorsunuz (seçenekler için bk. dbf_dump(1)):
 
 dbf_dump foo.dbf foo.txt
 
 Ekteki betik, veritabanının yedeğini aldıktan sonra, seçtiğiniz bir alana
 göre (sizin ifadenizle değişken) mükerrer kayıtları siliyor.  foo.dbf
 dosyasındaki alanları görmek için:
 
 dbf_uniq.pl foo.dbf
 
 Bu şekilde seçtiğiniz bir FOO alanına göre mükerrer kayıtları elemek için:
 
 dbf_uniq.pl foo.dbf FOO
 
 Bir deneyin gerekirse kurcalamaya devam ederim.
Merhaba,
Bu betik çalıştı. Seçilen değişkene göre ayıklama işlemini başarıyla
yapabildi. Ancak birşey daha sormak istiyorum. Seçilen değişken bir
aralık veya birden fazla alan olabilir mi?
Teşekkür ederim.
İyi çalışmalar.

-- 
Zeki Çatav [EMAIL PROTECTED]
Türkiye Yüksek İhtisas Hastanesi


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: çift kayıtları bulma

2006-07-03 Başlik Timu EREN
Pazartesi 03 Temmuz 2006 20:11 tarihinde, Zeki Çatav şunları yazmıştı: 
 Merhaba,
 Bir veri dosyası (halen .dbf formatında ama gerekirse uygun başka
 formatlara da çevirilebilecek) içinde yer alan kayıtlardan (~ 1000 kayıt
 ve her kayda ait ~ 250 değişken) çift olanları seçip her kaydı tek hale
 getirebilecek bir yöntem için önerilerinizi bekliyorum. Çift kayıt
 kararını bir kayda ait tüm değişkenlere bakarak vermeli. Veya olanak
 dahilindeyse ben değişkenlerden seçim yapabilirim.
 Openoffice hesap çizelgesi ile yapabilir miyim diye baktım ama işe
 yarayacak bir seçenek göremedim. Eskiden excel içinde find duplicate
 benzeri komut ile bu tür bir seçenek vardı diye hatırlıyorum ama
 openoffice içinde de olmadığına göre yanlış hatırlıyor olmalıyım.

 Teşekkürler.
 İyi çalışmalar.

 --
 Zeki Çatav [EMAIL PROTECTED]
 Türkiye Yüksek İhtisas Hastanesi

dbf dosya biçimi nasıldır ve hangi uygulamalar tarafından işlenir bilemiyorum 
ancak eğer dosyanızı csv dosya biçimine çevirebilirseniz ve ilgili 
değişkenlerin her biri tek bir satırda ise; (a,b,c gibi) 
cat sizindosyanız.csv | uniq komutunu kullanabilirsiniz.


-- 
Saygılar  İyi çalışmalar
Timu EREN (a.k.a selam)


pgpKvNhUhlifO.pgp
Description: PGP signature


Re: çift kayıtları bulma

2006-07-03 Başlik Zeki Çatav
Pzt, 2006-07-03 tarihinde 22:04 +0300 saatinde, Timu EREN yazdı:

 dbf dosya biçimi nasıldır ve hangi uygulamalar tarafından işlenir bilemiyorum 
 ancak eğer dosyanızı csv dosya biçimine çevirebilirseniz ve ilgili 
 değişkenlerin her biri tek bir satırda ise; (a,b,c gibi) 
 cat sizindosyanız.csv | uniq komutunu kullanabilirsiniz.

Merhaba,
Dosya eklentisi olarak .dbf eski dbase adlı veri tabanı programının
eklentisidir. Hemen her türlü veri tabanı programı tarafından ve hesap
tablosu yazılımlarınca açılabilir ve istenen forma çevirmekte bu nedenle
kolaydır.
Yöntemi denedim işe yarıyor ancak takıldığım bir nokta olduğunu fark
ettim. Değişkenlerden sadece ilki veya ilk 3-4 adedine bakarak aynı
ayıklama işlemini yapmak mümkün müdür?
Teşekkürler.
İyi çalışmalar.

-- 
Zeki Çatav [EMAIL PROTECTED]
Türkiye Yüksek İhtisas Hastanesi


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: çift kayıtları bulma

2006-07-03 Başlik Timu EREN
Merhaba...

Pazartesi 03 Temmuz 2006 22:47 tarihinde, Zeki Çatav şunları yazmıştı: 
[kesildi]
 Yöntemi denedim işe yarıyor ancak takıldığım bir nokta olduğunu fark
 ettim. Değişkenlerden sadece ilki veya ilk 3-4 adedine bakarak aynı
 ayıklama işlemini yapmak mümkün müdür?
 Teşekkürler.
 İyi çalışmalar.

 --
 Zeki Çatav [EMAIL PROTECTED]
 Türkiye Yüksek İhtisas Hastanesi
[/kesildi]

Elbette, burada size yardımcı olacak komut cut komutu olacaktır,

echo 'a';'b';'c;' | cut -d';' -f2  komutu sadece 'b' verecektir -f 
parametresinden hangi harfi almak istediğinizi söyleyebilirsiniz (yukarıdaki 
örnek için), Eğer birden fazla harfi almak isterseniz (yine sadece yukarıdaki 
örnek için geçerlidir) -f1,2 demeniz yeterlidir. Bu size  'a';'b'; sonucunu 
verecektir. Daha fazla bilgi için man cut yada cut --help komutunu kullanın.

 

-- 
Saygılar  İyi çalışmalar
Timu EREN (a.k.a selam)


pgppDSldKnw4r.pgp
Description: PGP signature


Re: çift kayıtları bulma

2006-07-03 Başlik Zeki Çatav
Pzt, 2006-07-03 tarihinde 23:14 +0300 saatinde, Timu EREN yazdı:

   Elbette, burada size yardımcı olacak komut cut komutu olacaktır,
 
 echo 'a';'b';'c;' | cut -d';' -f2  komutu sadece 'b' verecektir -f 
 parametresinden hangi harfi almak istediğinizi söyleyebilirsiniz (yukarıdaki 
 örnek için), Eğer birden fazla harfi almak isterseniz (yine sadece yukarıdaki 
 örnek için geçerlidir) -f1,2 demeniz yeterlidir. Bu size  'a';'b'; sonucunu 
 verecektir. Daha fazla bilgi için man cut yada cut --help komutunu kullanın.
Merhaba,
Sanırım istediğimi tam anlatamadım. Cut sadece belli bir bölümü seçip
listeliyor.
Ben bu csv dosyasında yer alan kayıtlardan ilk sütundaki değişkene bakıp
eğer birden fazla aynı değişken içeren kayıt varsa bunu bire indirgemek
istiyorum. Yani ilk değişken kontrol edilip o değişken sadece bir kez
dosyada kullanılacak şekilde kayıtları sadeleştirmek, verilerin
gerikalan değişkenlerini ve dosyayı korumak istiyorum.

123 aaa bbb ccc ddd ... nnn
234 abc def ghi hjk ... nnn
123 aaa bbb ccc def ... nnn

şeklindeki dosya sonuçta;

123 aaa bbb ccc ddd ... nnn
234 abc def ghi hjk ... nnn

şeklinde sadeleşecek. dosya ilk değişkene göre uniq indekslenmiş gibi
olacak. İlk değişkene göre tekrarlayan satırlar silinecek.

İyi çalışmalar.


-- 
Zeki Çatav [EMAIL PROTECTED]
Türkiye Yüksek İhtisas Hastanesi


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: çift kayıtları bulma

2006-07-03 Başlik Serdar Aytekin


Merhaba,

[...]

Ben bu csv dosyasında yer alan kayıtlardan ilk sütundaki değişkene bakıp
eğer birden fazla aynı değişken içeren kayıt varsa bunu bire indirgemek
istiyorum. Yani ilk değişken kontrol edilip o değişken sadece bir kez
dosyada kullanılacak şekilde kayıtları sadeleştirmek, verilerin
gerikalan değişkenlerini ve dosyayı korumak istiyorum.

123 aaa bbb ccc ddd ... nnn
234 abc def ghi hjk ... nnn
123 aaa bbb ccc def ... nnn

şeklindeki dosya sonuçta;

123 aaa bbb ccc ddd ... nnn
234 abc def ghi hjk ... nnn

şeklinde sadeleşecek. dosya ilk değişkene göre uniq indekslenmiş gibi
olacak. İlk değişkene göre tekrarlayan satırlar silinecek.


# cat dosya_ismi | sort | uniq -t' ' -W1

veya;

# cat dosya_ismi | sort -t' ' | uniq -W1

seklinde deneyebilir misiniz?

--
Saygilarimla,
Serdar Aytekin


--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]