Jump to page: 1 2 3
Thread overview
December 25, 2012

Merhaba yine ben :)

string str = "Adım: %s\nSoyadım: %s";
string[] strl;
strl ~= "Zekeriya";
strl ~= "Durmuş"

string val = std.string.format(str, strl);

şeklinde string.format fonksiyonunu denedim ama olmadı. elimdeki string dizisini std.string.format fonksiyonuna nasıl parametre olarak gönderebilirim.

Şu anki haliyle strl sadece tek bir %s yi karşılıyor. Bu nasıl çözülebilir veya alternatif çözüm yolları neler var?

Teşekkürler.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 25, 2012

Programlama diline d dilindeki format fonksiyonunu dahil etmek istiyorum ve Bir variant dizisi içerisinde parametreler geliyor. Parametre verilerini stringe çevriyorum ve bir diziye atıyorum ama diziye attığım için std.string.format fonksiyonuna dizi olarak gönderiyorum mecburen ve bu yüzden dizi sadece tek 1 %s ye tekabül ediyor.

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 25, 2012

Çok teşekür ederim Ali hocam çalıştı.

Kolay gelsin :)

Zekeriya.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 25, 2012

Tam olarak nerede gerekiyor? Acaba başka biçimde mi düşünmek gerek? Düzen dizgisini üreten tarafla parametreleri üreten tarafın birbirlerinden haberi yok mu? (Olmasa format() hata verir aslında.)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 25, 2012

std.format'ın belgesinden ve birim testlerinden öğrendim. :)

import std.array;
import std.stdio;
import std.format;

void main()
{
   auto düzen = FormatSpec!char("Adım: %s\nSoyadım: %s");

   string[] strl;
   strl ~= "Zekeriya";
   strl ~= "Durmuş";

   auto yazıcı = appender!string;

   foreach (değer; strl) {
       düzen.writeUpToNextSpec(yazıcı);
       formatValue(yazıcı, değer, düzen);
   }

   writeln(yazıcı.data);
}

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 25, 2012

Bir eksiklik farkettim: Düzen dizgisinin en sonunda karakterler varsa yazdırılmıyorlar. (Örneğin, aşağıdaki "Merhaba".) Onun için en sonda bir tane daha writeUpToNextSpec() olması gerekiyor:

   auto düzen = FormatSpec!char("Adım: %s\nSoyadım: %s\nMerhaba");
   // ...
   // Döngüden sonra bir kere daha:
   düzen.writeUpToNextSpec(yazıcı);

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 26, 2012

Evet fark ettim onu ama o kadar da önemli değil açıkcası :)

Tekrardan teşekkür ederim Ali bey.

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 26, 2012

Yanlız yanlış anlamışım sizi :) fark ettiğim şey şuydu.

"merhaba %s. saat %s %s" olsun sadece 1 tane değer gönderirseniz ilk %s den sonrası gözükmüyor.

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 26, 2012

Sisteme uyguladım sorunsuz çalıştı.

Çok teşekkür ederim.

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 26, 2012

writeUpToNextSpec bir sonraki düzen belirtecine kadar ilerliyor. Öyle bir belirteç bulursa true, bulamazsa false döndürüyor. O değere iki yerde bakarak düzen dizgisinin doğru olup olmadığı anlaşılabilir:

import std.exception;
import std.string;
// ...
   foreach (i, değer; strl) {
       bool belirteçVar_mı = düzen.writeUpToNextSpec(yazıcı);
       enforce(belirteçVar_mı,
               format("Şu değer(ler) için belirteç bulunamadı:", strl[i..$]));
       formatValue(yazıcı, değer, düzen);
   }
// ...
   bool başkaBelirteçVar_mı = düzen.writeUpToNextSpec(yazıcı);
   enforce(!başkaBelirteçVar_mı, "Fazladan düzen belirteci bulundu");

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

« First   ‹ Prev
1 2 3