Forum: Ders Arası RSS
Dosya adı ile ilgili bir sıkıntı
String türündeki değikenin dosya adı olamaması
noobie #1
Üye Haz 2011 tarihinden beri · 5 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Dosya adı ile ilgili bir sıkıntı
import std.string;
import std.conv;
import std.stdio;
 
void main()
{
 
char[] ogrenci_adi;
writeln("Ogrencinin ismini giriniz");
readln(ogrenci_adi);
chomp(ogrenci_adi);
string dosya_adı = cast(string)ogrenci_adi ~ ".txt";
File dosya = File(dosya_adı, "a+");
int numara;
writeln("Ogrenci numarasi giriniz");
stdin.readln(numara);
writeln("Tesekkurler");
dosya.writeln("Ad:", ogrenci_adi);
dosya.writeln("Numara:", numara);
writeln("Bitti");
}
Sıkıntı dosya adı değişkeninin-string türünde- kullanılamaması.Çalıştırmaya çalıştığımda ad yazdığımda a+ metoduyla -ali yazdığımızı varsayalım- ali.txt soyası oluşturulamıyor.Yanlış argüman şeklinde bir hata alıyorum (Elbette İngilizcesini :) )
Nereyi yanlış yazıyorum?
Bu mesaj acehreli tarafından değiştirildi; zaman: 2011-06-20, 13:01.
acehreli (Moderatör) #2
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ı
Hoşgeldin noobie! :)

(Not: Buraya yazdığın kod örneklerini renkli görünmeleri için code belirteçleri arasına alabilirsin. Ben seninkini değiştirdim; ona bakabilirsin.)

1) chomp, kendisine verilen parametreyi değiştirmez. (Ben de tekrar öğrenmek zorunda kaldım. :)) O yüzden dosya isminin sonunda bir de '\n' karakteri kalıyor. Bunu ogrenci_adi'nı okuduktan sonra çıkışa yazdırarak gördüm:

    writeln("-", ogrenci_adi, "-");

chomp'un döndürdüğünü tekrar değişkene atamak gerekiyor:

    ogrenci_adi = chomp(ogrenci_adi);

Ama ben şu yöntemi çok daha kolay ve risksiz buluyorum:

    string ogrenci_adi = chomp(readln());

Şurada biraz bilgi var: http://ddili.org/ders/d/dizgiler.html

Üstelik o zaman okunan veriyi string olarak da tanımlayabiliyoruz.

2) Kullanıcıya veri girilmesiyle ilgili mesaj gösterildiğinde write daha güzel oluyor. O zaman kullanıcı aynı satırda girebiliyor:

    write("Ogrencinin ismini giriniz: ");

3) Bende öğrencinin yaşı istendiği yerde program takılıyor. Sanıyorum o durumda readln()'ın farklı bir yüklemesi devreye giriyor:

    int numara;
    writeln("Ogrenci numarasi giriniz");
    stdin.readln(numara);

readln'e int verildiğinde sanıyorum dchar alan yüklemesi kullanılıyor. int okumak için readf uygun:

    int numara;
    writeln("Ogrenci numarasi giriniz");
    stdin.readf(" %s", &numara);

%s'den önceki boşluğun neden gerektiğini de şurada yazmışım: http://ddili.org/ders/d/standart_giris.html

Şimdi doğru çalışıyor! :)

Ben Türkçe harfler de kullanarak şu hale dönüştürdüm:

import std.string;
import std.stdio;
 
void main()
{
    write("Öğrencinin ismini giriniz: ");
    string öğrenci_adı = chomp(readln());
 
    string dosya_adı = öğrenci_adı ~ ".txt";
    File dosya = File(dosya_adı, "a+");
 
    int numara;
    write("Öğrencinin numarasını giriniz: ");
    readf(" %s", &numara);
 
    writeln("Teşekkürler");
 
    dosya.writeln("Ad:", öğrenci_adı);
    dosya.writeln("Numara:", numara);
 
    writeln("Bitti");
}

Ali
erdem (Moderatör) #3
Üye Tem 2009 tarihinden beri · 981 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Ben de yazmaya çalıştım ama hemen hemen Ali beyin yazdığı ile aynı oldu  :-O
import std.string;
import std.stdio;
 
void main()
{
    writeln("Öğrencinin isminizi giriniz");
    auto öğrenciAdı = chomp(readln());
    string dosyaAdı = öğrenciAdı ~ ".txt";
    File dosya = File(dosyaAdı, "w");
}
noobie #4
Üye Haz 2011 tarihinden beri · 5 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Teşekkürler!

Türkçe karakter kullanmamamın sebebi code blocks da çalıştırınca düzgün gözükmüyor.Sizin forumdaki yazınızı okumustum değişken adlarını vs. Türkçe kullanabiliyorum.Tam da bu kodu yazmaya çalışırken okumustum.Onun için değişkenler ogrenci_adi ve dosya_adı şeklinde :)

Başlayalı bir kaç gün oldu.Ve dil şu an için çok güzel geliyor(İleride ne olur bilemiyorum).Tek sıkıntı Türkçe kaynağın yetersiz olması.Ali Bey çok güzel anlatmış D.ershane'de.Ama Wiki de sadece bir kaç modülün açıklaması var.
erdem (Moderatör) #5
Üye Tem 2009 tarihinden beri · 981 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Türkçe kaynağın yetersiz olduğundan eminmisin. Ben hala Ali beyin yazdıklarına yetişemiyorum :-D

Biraz yavaş kalıyorum galiba!  :-p  

Türkçe wikideki bilgiler güncelliğini kaybetmiş olabilir. O yüzden pek tavsiye etmiyorum.

Windows altındaki konsolun karakterleri doğru olarak görüntüleyebilmesi için de yazdığın kodun bir yerine şunun gibi bir kod eklemen yeterli:
 
version(Windows)
{
    import std.c.windows.windows : SetConsoleCP, SetConsoleOutputCP;
    static this()
    {
        SetConsoleCP(65001);
        SetConsoleOutputCP(65001);
    }
}

Bunun dışında varsayılan konsol yazı tipi de UTF8 karakter kodlamasını desteklemiyor sanırım. Bunun için komut istemini açıp başlık kısmında (üst taraftaki mavi kısım) sağ tıklayıp Özellikler->Yazı Tipi bölümünden Lucida Console gibi UTF8 destekleyen bir yazı tipi kullanabilirsin.
noobie #6
Üye Haz 2011 tarihinden beri · 5 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Bunları yapmıştım ama hala Türkçe karakterleri düzgün görüntüleyemiyorum(Hiç konsolodan program derlemedim code blocks da F9 yapınca derlenip çalıştırılıyor)

Bunun dışında tuş kombinasyonları ile ilgili bir belge ararken Ali Bey'in bir yazısına denk gelmiştim.(Aynı yazıyı arıyorum aam bulamadım).Nasıl CTRL+S gibi kombinasyonları anlamasını sağlayabilirim programın?(Dosya adından tuş kombinasyonlarına geldik.Çok soru soruyorum galiba)
erdem (Moderatör) #7
Üye Tem 2009 tarihinden beri · 981 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Ben bu değişiklikleri yapınca Türkçe karakterler sorunsuz olarak görüntüleniyor. Kullandığınız editörün IDE'nin karakter kodlamasını da UTF8 olarak belirtmek gerekiyor. Ben editör olarak notepad+ kullanıyorum.

http://download.tuxfamily.org/notepadplus/5.9.2/npp.5.9.2.…

Kodlamayı değiştirmek için Kodlama->UTF-8 olarak Kodla demek yeterli oluyor.

Programı derlemek için de basitçe dmd kaynakkod.d diyebilirsiniz.

Ben windows'u genelde yazdığım kodun çalışıp çalışmadığını test için kullandığım için benim bildiklerim bu kadar  :huh: Code Blocks'u da hiç kullanmadığım için bilmiyorum.

Hemen hemen yazdığım tüm kaynak kodu Ubuntu Natty altında Emacs kullanarak kodluyorum. Ve kodlama ortamı çok rahat  :-)

Windows altında kod yazmış olsam herhalde VisualD'yi kullanırdım.

http://www.dsource.org/projects/visuald

Bu arada aslında lisanslı olarak bir Visual Studio sahibiyim ama sanırım o cd'ler annemlerde kaldığı için hiç denemedim. Zaten uzun süredir Windows altında kod yazmadım :rolleyes:
acehreli (Moderatör) #8
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ı
İki yıl öncesinden bir bilgi:

  http://ddili.org/forum/post/8

Umarım hâlâ doğrudur. :)

Ali
erdem (Moderatör) #9
Üye Tem 2009 tarihinden beri · 981 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Codeblocks'u denemek için kurdum. Ancak pek beğenmedim  :-/

Kod renklendirme hizalama desteği bile yok. Tüm kaynak kodlarında UTF8 olarak kodlama için

Settings->Editor menüsünden
Encoding: Use encoding when opening files: UTF8

olarak seçmek gerekiyor. Bu arada Settings->Compiler and Debugger bölümünde DigitalMars D Compiler seçmek ve başka ek ayarlar yapmak gerekiyor.

Bu ayarları ayrıntılı olarak yazmıyorum. Çünkü bu geliştirme ortamını kullanışlı bulmadım. Bu ayarları yaptıktan sonra ve yukarda Türkçe karakterleri eklemek için bahsettiğim kodu ekleyip komut istemi yazı tipini Lucida Console olarak seçtiğimizde Türkçe karakterler doğru olarak görüntüleniyor.

http://ddili.org/kurulum/

Benim önerim bu bölümde en kısa zamanda bir düzenlemeye gidelim. Örneğin programlama dili kurulum sihirbazının linki çalışmıyor. Çalışıyor olsa bile çok eski bir DMD sürümünü yükleyecek.

Geriye sadece windows kullananlar için Code Blocks öneriyormuşuz gibi bir durum ortaya çıkıyor. Ama Code Blocks ayarlarını yapmak hem zahmetli, hem de kod renklendirmesi hizalama vs.. gibi özellikleri direkt olarak sunamıyor. Tüm ayarları yaptıktan sonra örnek olarak gelen D application projesi derlenmiyor bile.
noobie #10
Üye Haz 2011 tarihinden beri · 5 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Code block da bahsttiğin şeyler var kodlar renklendiriliyor hizalama var.Eğer kodları renklendirmiyorsa dosyayı .d uzantıı ile kaydetmemişsindir direk açıp kod yazınca notepad a yazmış gibi oluyorsun CTRL+S deyip D dotası biçiminde kaydedersen bütün sorun çözülecektir.

Tuş kombinasyonları soruma cevap alamadım.Lütfen yardımcı olur musunuz?Ali Bey'in o yazısı google a ne yazınca geldi hatırlayamadım :(
acehreli (Moderatör) #11
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ı
Yanıtlanan mesaj #9
erdem:
http://ddili.org/kurulum/

Benim önerim bu bölümde en kısa zamanda bir düzenlemeye gidelim.

Şu sıralarda o sayfa konusunda tembelim! :) Başka arkadaşlar ilgilenmek isterse kaynak kodu şurada:

  http://code.google.com/p/ddili/source/browse/trunk/src/kur…

Ali
acehreli (Moderatör) #12
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ı
Yanıtlanan mesaj #10
noobie:
Tuş kombinasyonları soruma cevap alamadım.

Konsol tuşları konusunda şöyle bir çözüm var:

  http://ddili.org/forum/thread/497

Windows'da kbhit() vardı.

Ali
erdem (Moderatör) #13
Üye Tem 2009 tarihinden beri · 981 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #11
acehreli:
Başka arkadaşlar ilgilenmek isterse kaynak kodu şurada:

O zaman ben ilk fırsat bulduğumda güncelliğini yitiren kısımları kaldırıyorum.

Bu arada aslında çok kullanışlı bir IDE buldum. Ama o da UTF8 kodlamasını desteklemiyor şimdilik.  :huh:

http://d-ide.sourceforge.net/

Otomatik kod tamamlama, kod renklendirme tüm özellikleri var. Ama ilerki sürümler için UTF8 desteği eklenmesini önerdim.  Umarım ileriki sürümlerde desteklerler :-)
noobie #14
Üye Haz 2011 tarihinden beri · 5 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #12
acehreli:
noobie:
Tuş kombinasyonları soruma cevap alamadım.

Konsol tuşları konusunda şöyle bir çözüm var:

  http://ddili.org/forum/thread/497

Windows'da kbhit() vardı.

Ali

Ben de linkteki yazınızı arıyordum.Teşeekkürler.
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: Ders Arası 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-21, 10:58:53 (UTC -08:00)