Forum: Projeler trileri RSS
tr.dizgi modülünü ekledim
acehreli (Moderatör) #1
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: tr.dizgi modülünü ekledim
Dizgi sınıf şablonunu tanımlıyor. Dizgi, bir İm dizisini temsil eder. Aslında bütün işi, bir İm[] dizisini sarmalamak ve bir dizi gibi davranmak...

Özellikleri:

= alfabenin kurallarına göre küçük/büyük/aksansız dönüşümleri

= alfabenin kurallarına göre sıra karşılaştırmaları; bunu dört aşamada yapar

-- öncelikle, harflerin temel farklılıklarına bakılır: 'é' ve 'e' aynıdır; 'c' ve 'ç' farklıdır

-- ondan sonra dizginin uzunluklarına bakılır: kısa olan öncedir ('hal' 'hala'dan öncedir)

-- ondan sonra ilk aksan farkına bakılır: 'hal' 'hâl'den öncedir

-- ondan sonra küçük/büyük farklarına bakılır: küçük harf öncedir ('hal' 'Hal'den öncedir); Bu kuralın ASCII tablosundaki harflerin tersi olduğunu biliyorum ama sanki küçük harfleri önce görmek daha doğal geldi. Bunu düşünmeye devam edelim...

= temel harf ve dizgilerle de olabildiğince pürüzsüz çalışır

Linux'ta denemek için:

(Not: Windows ortamında oluşturma programlarına dokunmadım. Orada da yapılması gereken, trilerinin bütün .d dosyalarını derleme komut satırına eklemektir.)

1) Son trileriyi indirin:

  http://code.google.com/p/trileri/source/checkout

2) (Kolaylık olsun diye) trileri klasörüne şu programı kaydedin:

import tr.dizgi;
import std.stream;
import std.cstream;
 
/*
 * Kullanım kolaylığı için kısa bir isim:
 */
alias Dizgi!(AlfabeKodu.tur) dizgi_tr;
 
/*
 * Yukarıdakini veya bir benzerini daha sonra kütüphaneye de eklemeliyiz
 * ama henüz bu AlfabeKodu enum'undan ve alfabe kodlarından emin değilim.
 *
 * Belkide şöyle olmalı:
 *
 *    auto d = new Dizgi!türkAlfabesi("merhaba");
 *    auto d = new Dizgi!("merhaba");
 *    auto d = new türkAlfabesi.Dizgi("merhaba");
 *
 * Şimdilik düşünmeye devam...
 */
 
/*
 * Girişten belirtilen alfabe türünden dizgi okur
 */
Dizgi!kod Dizgi_oku(AlfabeKodu kod)(Stream akım)
{
    char[] dizgi;
    akım.readf(&dizgi);
    return new Dizgi!kod(dizgi);
}
 
/*
 * Bir üstteki işlevin kestirme hali
 */
Dizgi!(AlfabeKodu.tur) Dizgi_oku_tr(Stream akım)
{
    return Dizgi_oku!(AlfabeKodu.tur)(akım);
}
 
void main()
{
    string düzen = "% 20s: %s";
 
    dout.writef(düzen, "Bir sözcük girin", "");
    dizgi_tr sözcük = Dizgi_oku_tr(din);
 
    dout.writefln(düzen, "küçüğü", sözcük.küçüğü);
    dout.writefln(düzen, "büyüğü", sözcük.büyüğü);
    dout.writefln(düzen, "aksansızı", sözcük.aksansızı);
}

3) Programı şu şekilde oluşturun (isminin dizgi_deneme.d olduğunu varsayıyorum):

dmd dizgi_deneme.d linux/build/libtrileri.a

4) Çalıştırın:

./dizgi_deneme
    Bir sözcük girin: aâBCçdeéfGĞhıîijklmnoöpqrSştuÛüvWxYz
              küçüğü: aâbcçdeéfgğhıîijklmnoöpqrsştuûüvwxyz
              büyüğü: AÂBCÇDEÉFGĞHIÎİJKLMNOÖPQRSŞTUÛÜVWXYZ
           aksansızı: aaBCçdeefGĞhııijklmnoöpqrSştuUüvWxYz

dizgi_tr'den başka, onun yapı taşı olan İm şablonuna da bakmak isteyebilirsiniz:

import tr.im;
import std.cstream;
 
alias İm!(AlfabeKodu.tur) im_tr;
 
void main()
{
    im_tr ı = 'ı';
    im_tr i = 'i';
    im_tr I = 'I';
    im_tr İ = 'İ';
 
    assert(ı < i);
    assert(I < İ);
 
    dout.writefln(ı, i, I, İ);
}

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Projeler trileri RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-17, 16:45:56 (UTC -08:00)