Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Türkçe Karakterler ile işlem yapmak?

Konu, 'D Dili' kısmında mzgg tarafından paylaşıldı.

  1. mzgg

    mzgg Üye

    Kayıt:
    28 Haziran 2011
    Mesajlar:
    119
    Beğenilen Mesajlar:
    0
    kullanıcıdan alınan bir türkçe karakteri if yapısında karşılaştırma yapmak için kullanamıyorum sizce nasıl çözebiliriz bu sorunu?
     
  2. acehreli

    acehreli Ali Çehreli

    Kayıt:
    19 Ekim 2002
    Mesajlar:
    4,973
    Beğenilen Mesajlar:
    2
    (Kodunu görmedeğimiz için ancak tahmin edebiliyorum.)

    D'nin stdout ve stdin akımları UTF-8 kodlaması varsayarlar. O yüzden kullanıcının çalıştığı ortamın öncelikle öyle ayarlanması gerekir:

    * Linux ortamlarında gereken ayar: yok. :)

    * Windows ortamlarında gereken ayar: Konsolu örneğin 'chcp 65001' ile UTF-8'e çevirmek ve hiç olmazsa yaygın olan Unicode karakterlerini destekleyen 'Lucida Console' gibi bir font seçmek.

    Ortamın UTF-8'i öylece desteklediğini varsayarsak belki de şunun gibi bir program yazmışsındır:

    Kod:
    import std.stdio;
    
    void main()
    {
        write("Bir harf giriniz: ");
    
        dchar harf;
        readf(" %s", &harf);
    
        writeln("Okuduğum harf: ", harf);
    }
    Kod:
    $ ./deneme
    Bir harf giriniz: ğ
    Okuduğum harf: Ä    <-- YANLIŞ
    
    Bunun nedeni, D çalışma ortamının (D runtime) şunlardan hangisini istediğimize karar veremiyor olmasıdır:

    * Tek char okuyayım ve onu dchar olarak mı sunayım,

    * yoksa iki (veya gerektiği kadar) char okuyayım da onları birleştirerek bir dchar mı yapayım?

    Ben olsam ikinci seçeneği uygulardım ama anlaşılan D çalışma ortamı birincisini uyguluyor.

    O zaman bir çözüm, bütün girişi tek satır olarak okumak ve ilk harfine bakmak olabilir:

    Kod:
    import std.stdio;
    import std.string;
    import std.array;
    
    void main()
    {
        write("Bir harf giriniz: ");
    
        string satır = chomp(readln());
    
        writeln("Okuduğum harf: ", satır.front);
    }
    Şimdi doğru:

    Kod:
    $ ./deneme
    Bir harf giriniz: ğ
    Okuduğum harf: ğ
    
    Hâlâ stdout ve stdin'i akımlar olarak sunacak olan bir modülün geliştirilmesini bekliyoruz. O tamamlandığında girişten dchar çekmek benim yukarıdaki beklentime uygun olacak. (Şimdilik std.cstream ve std.stream var ama onlar emekliye ayrılacaklar.)

    Ali
     
  3. mzgg

    mzgg Üye

    Kayıt:
    28 Haziran 2011
    Mesajlar:
    119
    Beğenilen Mesajlar:
    0
    Sayın kardeşim çok teşekkur ederim zahmet edip baya yazmışsın ama ben çok özür dilerim konuyu ben C de açığımı zannediyorum yanlış yerde açmışım tekrar kusuruma bakmayın...