Forum: Duyurular RSS
Phobostan std.path modülünü çevirelim ?
canalpay (Moderatör) #1
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Phobostan std.path modülünü çevirelim ?
Ben dkv'nin platformdan bağımsız olması için kodları windows içinde özel olarak düzenliyordum.
İşletim sistemleri için ayrı yol ayıraçları olduğu için bende kodları şöyle düzenlemek zorunda kalmıştım:
        version(Posix){
                        string dosyaAdı = vTAdı~"/"~tAdı~"/"~veriAdı~".dkv";
                }else version(Windows){
                        string dosyaAdı = vTAdı~"\\"~tAdı~"\\"~veriAdı~".dkv";
                }

Açıkcası bu kadar uğraşmak bana zor geldi hatta böyle bir kod yazdığım için kendimden utandım(Lafın gelişi :-) ) ve içimden dedimki pythondaki os modülü gibi yol ayıracını otomatik çalıştığı işletim sistemine göre koyan bir modül yazayım. Sonrada bu modülü büyüteyim dedim. Ve daha sonrada dedimki kesin buna benzer bir şey phobosta da vardır. Ve sanırım buna benzer şey olan şey std.path oluyor.

Bunun içinde bende dedimki içimden phobosun path modülünü Türkçeye çevirelim.

Sonrada size duyurayım dedim. Sizce Phobosun std.path modülünün belgesini çevirelim mi ?
http://www.digitalmars.com/d/2.0/phobos/std_path.html
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ı
Ben ara ara eklerim. Başka arkadaşlar da yardım edebilirlerse çok iyi olur.

Ali
canalpay (Moderatör) #3
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Ben ara ara eklerim. Başka arkadaşlar da yardım edebilirlerse çok iyi olur.


Teşekkürler bende kendimce bir şeyler ekliyorum ama doğru mu çeviriyorum emin değilim.  Örneğin semi colon ayrı olduğu için yarım kolon diyecektim.(colonun iki nokta anlamında olduğunu bilmiyordum.) Ama noktalı virgül demekmiş. Ama D2nin dökümanında ayrı yazılmış. Bende ne olacağından emin olamadım.

Bu yüzden doğru çevirdiğimden emin değilim ? Sizce çevirmeye devam etmeli miyim  Yoksa çevirerek size köstek mi olurum ?
acehreli (Moderatör) #4
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ı
Çevirerek destek ol lütfen. :)

Ali
canalpay (Moderatör) #5
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Şuan çevirmeye çalışıyorum. Eminim bu çeviri hem normal ingilizceme hem de teknik ingilizceme oldukça yardımcı olacaktır.( Çevrilmiş iki satır ne kadar yardımcı olursa :-) )

Ama hatalarımı en azından söylerseniz hem yanlış çevirmem hem de D ile ilgili yanlış şeyler öğrenmem.


Bu arada std.path modülünde fcmp dikkatimi çekti. Sanırım o da düzeltilmesi gerekecek.
 
Ayrıca immutable char[1u],immutable char[2u]'daki 2u ve 1u ne demek merak ediyorum.

Ve ayrıca alias fcmp aslında cmp(getName(string bilmemne),getName(string bilememne)) işlev çağrımının takma adı mı  ?
acehreli (Moderatör) #6
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ı
canalpay:
Ayrıca immutable char[1u],immutable char[2u]'daki 2u ve 1u ne demek merak ediyorum.

Sonlarındaki u, o hazır değerlerin 'unsigned' olduklarını gösteriyor. u yazılmadan da çalışır herhalde ama türün aslında 'unsigned' olduğunu belirtmek için yazıyorlar.

Şurada "U son eki" başlığında geçiyor:

  http://ddili.org/ders/d/hazir_degerler.html

Ve ayrıca alias fcmp aslında cmp(getName(string bilmemne),getName(string bilememne)) işlev çağrımının takma adı mı  ?

Ortama göre ya cmp, ya icmp... dmd/src/phobos/std/path.d dosyasına bakınca şunları görüyorum:

version (Windows) alias std.string.icmp fcmp;
 
version (Posix) alias std.string.cmp fcmp;

Dosya ismi karşılaştırmasını Windows'da küçük/büyük harf ayrımına bakmadan gerçekleştiriyor.

Ali
canalpay (Moderatör) #7
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Dosya ismi karşılaştırmasını Windows'da küçük/büyük harf ayrımına bakmadan gerçekleştiriyor.

Normal. Yoksa işlev doğru yanıtı veremez. Çünkü windowsta bir dizini çağırırken CaN diye de çağırsan cAn diye de aynı dizine gider. Doğrusu bunu siz biliyorsunuzdur ama söyleyeyim dedim. Belki okuyan ve bilmeyen olabilir.


Ayrıca hazır değerler dersi ile ilgili bir şey söyleyeceğim:
d.ershane:
Karakter belirteçleri şunlardır:
\n      satır sonu

Bu linux'ta böyledir. Eğer windows ortamında bu benim hatırladığım kadarıyla \r\n biçimindeydi. Örneğin dkv'de şöyle bir şey yazdırsam : dede\nfdff windows şuna benzer bir şey okuyor : dede[] fdff (benzer dedim aynısı değil.) Ama gerçekte nasıl olması gerektiğini biliyorsunuz. Bence bu yüzden windowsta ayrı olan şeyleri belirtseniz iyi olur.(?)
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ı
canalpay:
d.ershane:
Karakter belirteçleri şunlardır:
\n      satır sonu

Bu linux'ta böyledir. Eğer windows ortamında bu benim hatırladığım kadarıyla \r\n biçimindeydi.

Karakterin kendisinin anlamında bir değişiklik yoktur ama: o, her zaman "satır sonu" karakteridir. '\r' de "satırın başına git" karakteridir.

C ve C++'da, kod içindeki '\n', her zaman için "satır sonu" anlamına gelir. "text" modda açılan dosyalar, '\n' karakterini ortama göre dönüştürürler, "binary" modda açılanlar dönüştürmezler. (Zaten "text" ile "binary"nin farkı, "text" modda dönüşüm yapılmasıdır.)

Ben bunun D için de aynı olduğunu varsayıyorum. Hele std.stdio.File yapısı kullanıldığında, dosya modu aynı C'deki gibi belirlendiği için, herhalde doğrudur. Yani Windows için özel bir şey yapmaya gerek yok.

Emin olmadığım tek şey, std.stream.File; çünkü onda dosya modları arasında "text" veya "binary" seçeneği yok. Hangisini varsaydıklarını Linux ortamında deneyemiyorum. :) std.stream.File.parseMode işlevine bakınca da "text" veya "binary" ile ilgili bir şey göremiyorum.

Windows'da CreateFileA veya CreateFileW'yu kullanıyorlar.

Can, dede\nfdff yazdırmayı std.stream.File ile Windows'da bir kere daha dener misin. Bakalım ne oluyor.

Teşekkürler,
Ali
canalpay (Moderatör) #9
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Eğer windowsun not defteri ile açarsam sorun oluşturuyor. Çünkü \n başka bir şey tanımlı. Ama o satırı kopyalayıp buraya yapıştırırsam satır başı yapıyor. Ama \r\n diye denersem not defterinde sorun oluşturmuyor. Buradan anlayacağım şey D \n olarak kaydediyor. Geany filan bunu satır başı olarak algılarken windowsun standart programı bunu bir şeye benzetemiyor. Çünkü microsoftun standartına göre \n diye bir şey yok \r\n diye bir şey var.

Yani ne D /'yü \'ye çeviriyor ne de başka bir şey ? Belki C'de böyle bir şey yapmıyordur ? Onuda denemek lazım :-)
acehreli (Moderatör) #10
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ı
Denediğin için teşekkürler.

canalpay:
Eğer windowsun not defteri ile açarsam sorun oluşturuyor. Çünkü \n başka bir şey tanımlı.

Bu, std.stream.File'ın "binary" modda çalıştığını gösteriyor. Yani '\n' karakterini ortamın istediği şekilde dönüştürmemiş.

Ama \r\n diye denersem not defterinde sorun oluşturmuyor.

Yine "binary" olduğunu gösteriyor. Öyle yazınca gerçekten de Windows'un sevdiği \r\n karakterleri olarak duruyorlar. Yani yine dönüşüm yok...

Buradan anlayacağım şey D \n olarak kaydediyor.

D değil, std.stream.File.

Çünkü microsoftun standartına göre \n diye bir şey yok \r\n diye bir şey var.

'\n' yine de satır sonu karakteri ama Windows ayrıca bir de "satır başına git" karakteri istiyor.

Yani ne D /'yü \'ye çeviriyor ne de başka bir şey ? Belki C'de böyle bir şey yapmıyordur ? Onuda denemek lazım :-)

Bu konunun dille bir ilgisi yok ama. Ben daha önceden '/' karakterinin de dosya ayracı olduğunu söylemiştim ve sen yanıldığımı göstermiştin. Sonradan hatırladım: '/' ayracı, #include edilen başlıklarda kullanılabilir. Hem Linux'ta hem Windows'da...

Deneyecek iki şey kaldı:

1) std.stdio.File'ı "text" modda denemek. Özel bir şey yapmaya gerek yok, mod dizgisinin sonuna 'b' eklenmezse zaten "text"tir:

import std.stdio;
 
// ...
 
auto dosya = File("deneme.txt", "w");

2) std.stream.File'ı writefln ile denemek... diyecektim ki... baktım, işte o dönüştürüyormuş :) dmd/src/phobos/std/stream.d:

  void writeLineW(const(wchar)[] s) {
    writeStringW(s);
    version (Win32)
      writeStringW("\r\n");
    else version (Mac)
      writeStringW("\r");
    else
      writeStringW("\n");
  }

Teşekkürler! Derse bir uyarı yazacağım... :)

Ali
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: Duyurular 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-19, 00:29:12 (UTC -08:00)