Alıntı (zafer):
> Sonrasında projeye entegre etmeye çalıştığımda split metotunda aşağıdaki hatayı aldım.
Alıntı:
> main.d(11): Error: cannot implicitly convert expression (split(satir,":")) of type char[][] to string[]
Nasıl yaptığını hata mesajına bakarak tahmin ediyorum; şu çalışıyor:
import std.string;
import std.stdio;
void main()
{
auto dosya = File("deneme.txt");
foreach (satır; dosya.byLine()) {
char[][] parçalar = split(satır, ":");
writeln(parçalar);
}
}
Şu çalışmıyor:
string[] parçalar = split(satır, ":");
Çünkü split değişebilen karakterli dizgiler döndürüyor. Ama zaten şu belgede std.string.split yerine daha genel olan std.array.split'in kullanılması öneriliyor:
http://www.d-programming-language.org/phobos/std_string.html
Belki sen de onu deniyorsundur. (Neden göstermiyorsun? ;)). std.string yerine std.array ile de aynı durum...
std.array'in belgesinde split'in tanımı şöyle:
Unqual!(S1)[] split(S1, S2)(S1 s, S2 delim);
Unqual, "unqualified"dan geliyor. Anlamı, ona verdiğimiz S1'in const, immutable, vs. bütün belirteçlerinin kaldırılmış olanı. Yani split, ürettiği sonucun değişebilen veri olduğunu belgeliyor. Kullanışlı bir şey; çünkü biz de bunu bilerek parçaları değiştirebiliriz.
Ama değiştirmek istemediğimiz bu örnekte tür dönüşümü yapılabilir:
string[] parçalar = cast(string[])split(satır, ":");
Tamam, artık çalışıyor.
Alıntı:
> şablonlara yabancı olduğun için olsa gerek okudum anladım ama kullanımı hala kafamda tam olarak netleşmedi
Baştan öyle geliyor ama bir kere alışınca çok mantıklı. Hemen hemen her şeyi şablon yapmak istiyorsun. :) Şablonların çok karmaşık olanakları da var ama en sık kullanılan olanaklar çok basit. Bence o dersteki şu iki örnek basit:
void parantezliYazdır(T)(T değer)
{
writefln("(%s)", değer);
}
Her tür değeri parantezli yazdırabiliyor. Neden int, double, vs. için ayrı ayrı yazalım diye düşününce o kadar kolay.
struct Nokta(T)
{
T x;
T y;
}
Koordinat olarak her tür kullanabiliyor. double, int, BigNum, vs. için farklı nokta türleri tanımlamaya gerek yok. Kolay. :)
Alıntı:
> ByChunk nedir?
"chunk" parça, öbek, demek. Dosyayı belirli büyüklükte parçalar halinde okumaya yarıyor. Parçalar ubyte dizisi olarak beliriyorlarmış. Örnekte görüldüğü gibi son okumada dizinin uzunluğu istenenden (4096'dan) daha kısa olabiliyormuş.
Alıntı:
> trileri projesinden faydalanmam gerekecek
Çok sevinirim. Böylece deneme olanağı bulmuş oluruz ama hem eksikleri var hem de 2.055 ile derlenemiyor. Düzelteceğim. :)
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]