Jump to page: 1 2
Thread overview
File File'a karşı
Sep 11, 2009
erdem
Sep 23, 2009
erdem
Sep 23, 2009
erdem
September 11, 2009

Evet ilginç bir durum acaba çalışma mantıklarında mı bir farklılık var.

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

September 11, 2009

Bir sorun daha... :) Phobos'ta iki tane File var:

  1. std.stdio içindeki 'struct File'
  2. std.stream içindeki 'class File'

İşin garibi, C++'nın tersine D'de 'struct' ile 'class' oldukça farklı. Nasıl oluşturuldukları bile! Şu programlar ayrı ayrı çalışıyorlar:

import std.stdio;

void main()
{
   auto dosya = File("dosya0", "w");
}

ve

import std.stream;

void main()
{
   auto dosya = new File("dosya1", FileMode.OutNew);
}

Ama iki modülü birden ekleyince doğal olarak karışıklık oluşuyor; o yüzden uzun isimlerini vermek gerekiyor:

import std.stdio;
import std.stream;

void main()
{
   auto dosya0 =     std.stdio.File("dosya0", "w");
   auto dosya1 = new std.stream.File("dosya1", FileMode.OutNew);
}

Tabii 'typedef' oluşturmak da mümkün:

import std.stdio;
import std.stream;

typedef std.stdio.File structFile;
typedef std.stream.File classFile;

void main()
{
   auto dosya0 =     structFile("dosya0", "w");
   auto dosya1 = new classFile("dosya1", FileMode.OutNew);
}

İngilizce forumda da sordum:

http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.learn&article_id=17661

Ali

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

September 11, 2009

Bu soru Dosyalar bölümünü yazarken karşıma çıktı.

std.stdio'nun içindeki, C'den bildiğimiz FILE'ı sarmalıyormuş. Diğeri ise daha bir akım mantığı ile yazılmış olmalı. (?)

Şimdi baktım; birisi yanıt yazmış "çılgınlık bu" diyor :) ve std.stdio'yu basit giriş/çıkış için önermiş. Ben de D.ershane'de onu artık bırakayım bari...

Ali

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

September 20, 2009

Öylesine göz gezdirdim ve bana şimdiye kadar dosyalar ile ilgili gördüğüm en kolay ders en kolay kullanım olduğuna karar verdim.
Belki öncedende php'de olsun pythonda olsun bu komutları az çok gördüğüm için kolay gelmiştir ama gerçekten çok kolay geldi.

Açıkca ben anladıysam herkes anlar :-D

Alıntı (acehreli):

>

Birisi sınıf olduğu için new ile oluşturmak şart!

İkisinin de kurucu fonksiyonla kurulmaları gerekiyor ama daha öyle bir şey göstermedim ki! :/

Derslerde illaki böyle şeyler olacak. O zaman diyeceksiniz ki bunu şimdi anlamayabilirsiniz ama bunu şimdilik böyle kabul edin.
Mesela birinci ben anladım ama ikinciyi anlamadım. Neden new yok :-) Sınıf değil mi ? Değilse ne o zaman ? Şimdilik olduğu gibi kabul ediyorum :-)

Galiba normal fonksiyon ve fonksiyonu bir değişkene atamak istiyorsunuz. Atarken başına fonksiyonun simi olan File adını getiriyorsunuz ?

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

September 20, 2009

Bu konu beni çok zorladı... :)

std.stdio.File ve std.stream.File arasında bir kaç kez gidip geldim ve sonunda ikisini de anlatmaya karar verdim. Bana ikincisi daha güzel geliyor ama birincisini anlatmasam, bu sefer mutlaka karışıklık yaşanacak...

Birisi sınıf olduğu için 'new' ile oluşturmak şart!

İkisinin de kurucu fonksiyonla kurulmaları gerekiyor ama daha öyle bir şey göstermedim ki! :/

Öte yandan, programcı olacak insan aynı işi yapmak için birden fazla çözümden birisini seçmek zorunda kalabilir zaten. Bu da öyle bir şey...

Neyse, şu anda öteki derslere bağlanmamış halde şöyle:

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

Oluyor mu? Fikir! Yardım! İmdat! :)

Ali

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

September 20, 2009

Teşekkür Can... :) Bazı şeyleri sonra anlatmak zorunda kalacağım. :)

Evet, onlardan birisi sınıf (class) ve new ile oluşturuluyor; diğeri ise yapı (struct) ve new olmadan oluşturuluyor. D'de C++'nın aksine, sınıflarla yapılar oldukça farklı olanaklar.

Fonksiyon çağrısı gibi görünse de, aslında ikisinde de bir nesne oluşturuluyor:

File dosya = File("ogrenci_bilgisi", "w");  // <- yapı nesnesi
File dosya = new File("ogrenci_bilgisi", FileMode.OutNew); // <- sınıf nesnesi

C++'da olsa, ikisi de aynı söz dizimini kullanırdı... :/

Ali

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

September 23, 2009
File dosya = File ("öğrenciler.txt", "w");

Anladığım kadarıyla kurucusu bir string aldığı için herhangi bir şekilde türkçe isimli dosya kaydedemiyoruz :huh:

this(string dosya_ismi, in char[] erişim_hakkı = "rb")

Bu şekilde bir program oluşturup çalıştırdığımda dosya içeriğini doğru ama ismini yanlış kaydediyor..

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

September 23, 2009

İkinci programda benim gibi birden fazla ismi olan kişiler için çalışmıyor. Tabi dershanede o konular daha işlenmediği için eklenmesi beklenemez. Ama siz olsanız nasıl yapardınız. Benim aklıma hemen split geliyor.

       char [] satır = dosya.readLine ();
       foreach (s; split (satır.idup, " "))
       {
           dout.writefln (s);
       }

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

September 23, 2009

Alıntı (erdem):

>
>  File dosya = File ("öğrenciler.txt", "w");
> ```

>
> Anladığım kadarıyla kurucusu bir string aldığı için herhangi bir şekilde türkçe isimli dosya kaydedemiyoruz  :huh:

Dosya ismindeki Türkçe karakterler dosya sistemi ile ilgili bir konu. Ben D'nin dışında kaldığı için hiç bulaşmak istemedim.

Şimdi kendi ortamımda denediğimde dosyanın ismi doğru olarak "öğrenciler.txt" oldu: Linux (CentOS 5), bash, sanırım sistem utf-8 kodlamasını kullanıyor.

Ve yanlış anlaşılmasın: string ve char[] türleri de Türkçe harfler tutabilir. Sorun, bilgiyi harf harf değil, kod kod tutmasındadır. Bu yüzden "ğ"nin uzunluğu 2 çıkar.

string oluşturup kullanmakta sorun yok, sonra o string'i işlerken sorun çıkar:


char[] s = "ğ".dup;
s[0] = 'a'; // <-- Şimdi elimizde 2 uzunlukta ve BOZUK bir dizgi var



Benim Türkçe için dchar ve wchar önermemin nedeni oydu.

Ali

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

Alıntı (erdem):

>

İkinci programda benim gibi birden fazla ismi olan kişiler için çalışmıyor. ... Ama siz olsanız nasıl yapardınız.

Orada sorun, seçtiğim dosya düzeninin katı olmasında. Okuyan taraf şu düzeni beklediği için, başka türlü bir satır işi bozar:

isim soyad not1 not2

Daha güzel bir düzen, isim+değer çiftleri olabilirdi:

'öğrenci:
isim: İbik
ortaisim: Tüy
soyad: Horozcu
notlar:
not: 20
not: 7
not: 40

öğrenci:
isim: Hortum
soyad: Filci
notlar:
not: 65'

Böylece boş bırakılan değerlerin varsayılanları kullanılırdı. Ama bunun da bir kaç tane standardı var. Yalnızca bir örnek: XML.

Alıntı:

>

Benim aklıma hemen split geliyor.

Çok işe yarar ama yine de orta ismin olup olmadığını bir çabayla bulmamız gerekirdi.

Ali

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

« First   ‹ Prev
1 2