April 20, 2012

Alıntı (Salih Dinçer):

>

Belki de notepad++'ın kaynak dosyalarını incelersen oradaki dönüştürme işlevlerini D'ye uyarlayabilirsin. Ayrıca UTF sınıfında dönüştürücüler (std.utf.toUTF8...) varmış. Şurada güzel bir makale buldum. Eminim işine yarayacaktır.

Salih çok teşekkürler, bu gerçekten çok işime yarayacak diye düşünüyorum. İngilizce konusunda gerçekten kötüyüm ama yazıya bir göz attım güzel görünüyor. Yinede faydalanacak derecede anlayamadığımı belirtmem gerek. Ancak Ali'nin bu konuda çok güzel yazıları vardı (http://ddili.org/ders/d/karakterler.html), bence bir kayıp yok :)

Alıntı (acehreli):

>

Biraz da terim konusuna karışacağım. :)

Karış tabi Ali :) Ben bu kodlama isimlerini windows notepad programındaki kodlama seçeneklerinden almıştım. Neyseki sayende doğrusunu öğrendik, malesef bu konularda bilgi eksikliğim çok fazla :)

Sublime Text programına baktığımda orda "UTF-8", "UTF-16 LE", "UTF-16 BE", "Turkish (Windows 1254)","Turkish (ISO 8859-9)" gibi kodlamalar gördüm emin olmamakla birlikte sanırım doğru terimler bunlar?

Alıntı (Salih Dinçer):

>

Küçük bir kod yazayım dedim;

Salih eline sağlık güzel olmuş. Ancak anladığım kadarıyla bu iş öyle hemen halledilebilecek bir konu değil üzerinde çalışmak gerekecek.

Ben şimdilik projenin genel gidiş hızının düşmemesi için ve UTF-8'in genel olarak herkes tarafından kabul edildiğini düşünerek dosyaları toUTF8 ile çevirip kaydetmeyi düşünüyorum. Divid genel işlevleri yapar hale geldikten sonra, bu konuya yeniden vakit ayırmayı düşünüyorum. Destek için tekrar teşekkürler.

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

April 20, 2012

Alıntı (zafer):

>

Ben şimdilik projenin genel gidiş hızının düşmemesi için ve UTF-8'in genel olarak herkes tarafından kabul edildiğini düşünerek dosyaları toUTF8 ile çevirip kaydetmeyi düşünüyorum. Divid genel işlevleri yapar hale geldikten sonra, bu konuya yeniden vakit ayırmayı düşünüyorum. Destek için tekrar teşekkürler.

Öncelikle küçük bir hatamı düzelteyim:

Yukarıda, toCP857 diye bir işlev oluşturma niyetindeymişim ama bunun, başlangıçtaki hedefimden saptığım için fromCP857 gerekiyor. Çünkü adeta işin babası UTF'den çocuklarına çevirebilmek için eşleşme tablolarından biraz daha fazla şeye ihtiyacımız var gibime geliyor...:)

D'nin toUTF8'ni incelemedim ama incelemeyi düşünüyorum. Bir takım kurulum işleriyle uğraşıyorum; en kısa zamanda inşaallah diyelim. Ancak oradaki sınıflar ''cast('char')...' // dchar) wchar)' gibi dilin denetleyici çevirmeni gibi bir şeyse çok işimize yaramayabilir. Bize daha etkin işlevler ve bir de veritabanı lazım.

Bakınız şurada (http://www.unicode.org/Public/UNIDATA/) UTF'nin lazım olsun olmasın her türlü bilgisini TXT halinde vermişler. Biz bunları doğrudan koda dahil edebileceğimiz gibi JSON haline çevirip daha az hafıza harcayan hızlı bir yazılım geliştirebiliriz. Henüz kurmamakla birlikte indirip bir ara denemeyi düşündüğüm bir de Windows uyumlu yazılımı Unibook (http://www.unicode.org/Public/UNIDATA/) var. Sanırım GNOME'un UTF charMap yazılımı gibi olsa gerek.

Başarılar...

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

April 21, 2012

Olabilir hocam, ben de eşleme tablolarını ilk defa deniyorum. Sanki bunun yerine 'switch()' bile kullanılabilir gibi görünüyor. Gerçi assembly koduna baktığımda bir sürü 'if()' görüyordum ama bu örnekte çok farklı sonuç çıkabilir. Hız konusunu bilemeyeceğim ama ben de şöyle düşünmüştüm:

foreach (c; denemeMetni)
		write(c in CP857 ? CP857[c]
						 : format(cast(char)c));

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

April 21, 2012

Merhaba,

Projede gönül rahatlığı ile kullanılabilecek iki kodlamayı bitirdim. Belki tek karakterli bir dönüş (return) yerine, gerçek bir dizge (string) alarak 'foreach()' ile döngüye sokarsak (belki de broadcast mi yapsak?) veriyi satır satır işlemek daha hızlı olacaktır. Çünkü işleve her gidiş/dönüş sırasında adetler fazlaysa ciddi bir zaman kaybı söz konusu oluyor.

Windows'un CMD karakter seti (CP857) için bir örnek dosya hazırladım. Tam olarak 540 baytlık şiiri şuradan (http://goo.gl/xVEwP) indirip (belki Youtube vidyosunu da dinlemek istersiniz diye içinde adresini de verdim), aşağıdaki kodu deneyebilir ve/veya Windows'un not defterinde bir şeyler yazıp (ANSI olarak kaydedilmeli) 'cp1254den()' işlevini kullanarak dönüştürme yapabilirsiniz.

Başarılar...

/*
   convertToUTF.d (21.04.2012)
*/
import std.stdio, std.string;

	string cp857den(ubyte çevir) {
		string[ubyte] ch = [ 128:"\xc3\x87", 152:"\xc4\xb0", 153:"\xc3\x96",
		// Büyük harfler 1    Ç               İ               Ö
							 154:"\xc3\x9c", 158:"\xc5\x9e", 166:"\xc4\x9e",
		// Büyük harfler 2    Ü               Ş               Ğ
							 135:"\xc3\xa7", 141:"\xc4\xb1", 148:"\xc3\xb6",
		// Küçük harfler 1    ç               ı               ö
							 129:"\xc3\xbc", 159:"\xc5\x9f", 167:"\xc4\x9f",
		// Küçük harfler 2    ü               ş               ğ
							 131:"\xc3\xa2", 140:"\xc3\xae", 150:"\xc3\xbb",
		// Aksanlı harfler 1  â               î               û
							 182:"\xc3\x82", 215:"\xc3\x8f", 234:"\xc3\xac",
		// Aksanlı harfler 2  Â               Î               Û
							 239:"\xc2\xb4", 248:"\xc2\xb0", 253:"\xc2\xb2"];
		// İşaretlemeler 1    ´               °               ²
		return çevir in ch ? ch[çevir] : format(cast(char)çevir);
	}
	string cp1254den(ubyte çevir) {
		string[ubyte] ch = [ 199:"\xc3\x87", 221:"\xc4\xb0", 214:"\xc3\x96",
		// Büyük harfler 1    Ç               İ               Ö
							 220:"\xc3\x9c", 222:"\xc5\x9e", 208:"\xc4\x9e",
		// Büyük harfler 2    Ü               Ş               Ğ
							 231:"\xc3\xa7", 253:"\xc4\xb1", 246:"\xc3\xb6",
		// Küçük harfler 1    ç               ı               ö
							 252:"\xc3\xbc", 254:"\xc5\x9f", 240:"\xc4\x9f",
		// Küçük harfler 2    ü               ş               ğ
							 226:"\xc3\xa2", 238:"\xc3\xae", 251:"\xc3\xbb",
		// Aksanlı harfler 1  â               î               û
							 194:"\xc3\x82", 206:"\xc3\x8f", 219:"\xc3\xac",
		// Aksanlı harfler 2  Â               Î               Û
							 180:"\xc2\xb4", 176:"\xc2\xb0", 178:"\xc2\xb2"];
		// İşaretlemeler 1    ´               °               ²
		return çevir in ch ? ch[çevir] : format(cast(char)çevir);
	}

void main() {
	File dosya = File("olayUfku.txt", "r");
	// CP857 kodlu dosya: http://goo.gl/xVEwP (540 byte)
   while (!dosya.eof()) {
   	string satır = dosya.readln();
   	foreach (c; satır) write(cp857den(c));
   }
}/* ÇIKTISI:
Microsoft Windows [Srm 6.1.7601]
Telif Hakk (c) 2009 Microsoft Corporation. Tm haklar sakldr.

C:\Users\Netbook>chcp 65001
Etkin kod sayfası: 65001

C:\Users\Netbook>type olayUfku.txt
D�n�lmez ak�am�n ufkunday�z, vakit �ok ge�
Bu son fas�ld�r ey �mr�m, nas�l ge�ersen ge�
Cih�na bir daha gelmek hay�l edilse bile
Avunmak istemeyiz b�yle bir teselliyle

Geni� kanatlar� bo�lukta simsiyah a��lan
Ve arkas�nda g�ne� do�mayan b�y�k kap�dan
Ge�ince ba�layacak, bitmeyen s�k�nlu gece
Gur�ba kar�� bu son bah�elerde keyfince

Ya a�k i�inde har�b ol, ya �evk i�inde g�n�l
Ya l�le a�mal�d�r g��s�m�zde, yahut g�l

G�fte: Yahy� Kem�l BEYATLI
Beste: M�nir N�rettin SEL�UK
Makam: Seg�h
Adres: http://youtu.be/lErDTBRZn3Y

C:\Users\Netbook>convertToUTF
Dönülmez akşamın ufkundayız, vakit çok geç
Bu son fasıldır ey ömrüm, nasıl geçersen geç
Cihâna bir daha gelmek hayâl edilse bile
Avunmak istemeyiz böyle bir teselliyle

Geniş kanatları boşlukta simsiyah açılan
Ve arkasında güneş doğmayan büyük kapıdan
Geçince başlayacak, bitmeyen sükûnlu gece
Gurûba karşı bu son bahçelerde keyfince

Ya aşk içinde harâb ol, ya şevk içinde gönül
Ya lâle açmalıdır göğsümüzde, yahut gül

Güfte: Yahyâ Kemâl BEYATLI
Beste: Münir Nûrettin SELÇUK
Makam: Segâh
Adres: http://youtu.be/lErDTBRZn3Y
*/

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

April 21, 2012

Alıntı (Ali Çehreli):

>

Alıntı (Salih Dinçer):

>

Sanki bunun yerine 'switch()' bile kullanılabilir gibi görünüyor.
Gerçi assembly koduna baktığımda bir sürü 'if()' görüyordum...
Çok az eleman olduğu için bence de switch daha hızlı çıkacaktır.

Gösterge kullanılmadığı zaman hash hesabı hem 'in' için sorgularken hem de sonra '[]' ile erişirken yapılıyor. Gösterge kullanıldığında ise hesap yalnızca 'in' için yapılmış oluyor ve * işleci ile doğrudan erişiyoruz.
Bu kodun hızlı olması için başka çözüm denemeyi düşünürken aklıma bir şey geldi. Belki bu yapıyı bazı durumlarda 'switch()' yerine kullanabiliriz; elbette onun kadar esnek ve çok satırlı bir yapı olmaz. Ama hani bazen oluyor ya, seçime göre bir değer döndürüyoruz. Oysa bu kuramsal açıdan bir dizi ve gerçekten çok akıllıca düşünülmüş.

Evet, basit ve UTF'nin yapısı itibariyle etkili. Ancak programda önemli bir hata var! Örneğin metin aşağıdaki gibi teknik bir belgeyse ve karesi değilde kübü kullanılmış olsaydı çalışma zamanı hatası verecekti. Sanırım 'format()' işlevini, UTF sınıfından eşleştiremediği bir sorun ile baş etmek zorunda bırakıyoruz; bence onu bundan kurtarabilir veya 0'dan 255'e kadar tüm değeleri eşleştirebiliriz...:)

Alıntı:

>

DAR AÇILI ÜÇGEN

Açıları 90°´den küçük olan üçgenlere denir.

DİK ÜÇGEN

Dik Üçgen Bir açısı dik (90°) olan üçgenlerdir. Bu üçgenlerde yükseklik dik kenarlardan biridir. En uzun kenarına hipotenüs denir.

GENİŞ AÇILI ÜÇGEN

Açılarından biri 90°´den geniş olan üçgenlerdir. Sadece bir tek kenarı geniş açı olabilir. Tabana ait yükseklik tabanın uzantısı ile kesişir.

ÜÇGENLERDE BAĞINTILAR

Pisagor bağıntısı: Bir dik üçgenin dik kenarlarına 'a' ve 'b' dersek hipotenüs´ün karesi bu kenarların uzunluklarının karelerinin toplamına eşittir. Buna Pisagor Teoremi denir. Yani: a³+b³=c³**('*')**

Kaynak: http://www.msxlabs.org/forum/soru-cevap/294490-ucgenlerin-cevre-ve-alani-nasil-hesaplanir.html

('*') Alıntıdaki denklem, bilinçli olarak değiştirimiştir. Doğrusu dünyanın büyük bir çoğunluğunun bildiği gibi karesidir...:)

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

April 21, 2012

Göstergeleri çok sonraya bırakmış olduğum için 'in' işlecinin dönüş türünün gösterge olduğunu da daha sonra bir yerde söylüyorum.

Aslında şöyle yapılırsa birazcık daha hızlı işleyebilir:

       auto kod = c in CP857;
       if (kod) write(*kod);

Ali

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

April 21, 2012

Alıntı (Salih Dinçer):

>

Sanki bunun yerine 'switch()' bile kullanılabilir gibi görünüyor. Gerçi assembly koduna baktığımda bir sürü 'if()' görüyordum

Çok az eleman olduğu için bence de switch daha hızlı çıkacaktır.

Gösterge kullanılmadığı zaman hash hesabı hem 'in' için sorgularken hem de sonra '[]' ile erişirken yapılıyor. Gösterge kullanıldığında ise hesap yalnızca 'in' için yapılmış oluyor ve * işleci ile doğrudan erişiyoruz.

Gerçekten önemli değil. Kitabın baş taraflarında bilerek gösterge kullanmadığım için dikkatimi çekti. :)

Ali

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

April 21, 2012

Sevdim. :) Özellikle giriş için ubyte kullanman çok doğru olmuş çünkü giriş UTF kodlaması değil. D'nin karakter türlerini kullanmak yanlış izlenim uyandırırdı.

Evet, her karaktere string döndürmek pahalı bir işlem. Hem de çoğu harfin dönüşmesi gerekmiyor. Bence bu tam aralıklara uygun bir problem. ubyte dilimi girer, elemanı dchar olan aralık oluşur. :) (Aslında belki char aralığı bile olabilir. (?))

Ali

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

1 2
Next ›   Last »