Jump to page: 1 2 3
Thread overview
Belirli bir dosya formatıyla biçimlendirilmiş dosyayı okumak
May 03, 2011
erdem
May 03, 2011
erdem
May 03, 2011
erdem
May 03, 2011
Kadir Can
May 03, 2011
erdem
May 03, 2011
erdem
May 03, 2011
erdem
May 03, 2011
erdem
May 04, 2011
Mengu
May 04, 2011
erdem
May 05, 2011
erdem
May 05, 2011
erdem
May 05, 2011
erdem
May 05, 2011
erdem
May 06, 2011
erdem
May 04, 2011
erdem
May 07, 2011
erdem
May 07, 2011
erdem
May 03, 2011

Bu soruya aslında başka bir programlama dili ile ilgili başka bir forumda rastladım. Sonuçta biz de neredeyse bu işlemin tersi olan 'XmlElemanı' oluşturduğumuz için ilgimi çekti. Ama buradaki bilgi tam bir 'XmlElemanı' değil.

Ben de aynı işlemi D'de nasıl yapabilirdik diye düşündüm. Amacımız bize verilen bu tür bir metin dosyasını okumak. Aynı XML elemanlarında olduğu gibi etiketler birbirinin içine girebiliyor.

Alıntı:

>

matematige benzer sekilde bilgisayar bilimi bilginin, ozellikle elektronik
makineler araciligiyla duzenli ve ussal bicimde islenmesi bilimidir. bunun yani sira
bilgisayar bilimi bilgi islemlerinde uygulanabilen matematiksel yapilari da inceler. amaci ve
gorevi bir yandan temel aksiyomatik
matematiksel kuramlar uretmek, ikinci olarak tum diger uzmanlik dallarinin
nesnelerini ve sureclerini cozumleyip soyut matematiksel yapilara ve algoritmalara
donusturmek ve ucuncu olarak soyut matematiksel yapilarin
aktarilabilecegi, saklanabilecegi ve algoritmalarla otomatik olarak islenebilecegi matematiksel
makinalari tasarlamaktir.

Okuduktan sonra amacımız bu dosyayı tekrar ekrana:

'' arası büyük harfle
'' arası koyu harfle ~ [koyu kısmını örneğin metin merhaba ise mmeerrhhaabbaa şeklinde tekrarlı yazıyoruz. konsolda koyu yazmanın bir yolu olmadığı için]
'' arası gizli - bu kısmı yazdırmıyoruz
'' arası köşeli parantezlerle

yazdırmak. Ayrıca eğer giriş dosyasında kapanmamış bir etiket varsa kullanıcıyı bilgi verdikten sonra bir hata atmak.

Benim aklıma şu tür bir çözüm geldi. Bir Yazıcı nesnemiz olur '' etiketine rastladığı zaman özellikler koyu yazmayı aç ya da '' etiketine geldiği zaman özellikler gizli yazmayı kapat diyebilir.

Daha başka da çözüm yolları olabilir ama hızlı bir çözüm bulamadım :rolleyes:

Aklınıza gelen hızlı bir çözüm yöntemi var mı acaba ?..

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

May 03, 2011

Parçalama işlemini çabukça böyle yazdım :)

import std.stdio, std.string, std.algorithm;

void main() {
   File giriş = File("deneme.txt", "r");
   string[] kelimeler;

   while (!giriş.eof) {
       string satır = chomp(giriş.readln());
       auto parçalar = splitter(satır, ' ');

       foreach(parça; parçalar)
           kelimeler ~= parça;
   }

   foreach(kelime; kelimeler)
       writeln(kelime);
}

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

May 03, 2011

Mantık bence böyle olmalı:
-Karakter kontrol edilmeli;Eğer "<" karakterine rastlanırsa ">" gelene kadar arada kalan ifade alınmalı.
-İfade alındıktan sonra kapama kontrolü yine aynı şekilde yapılmalı.
-Kapatma olmadıysa hata atılmalı.
-Kapatma yapıldıysa uygun işlem bulunmalı ("b" için kalınlaştırma gibi).Burada switch case kullanılabilir.
-Koyu harf dışında hepsinin çaresi var.Koyu harfle ilgili bir fikrim yok.

Acaba nasıl olabilir?

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

May 03, 2011

Asıl soru bundan sonra nasıl bir mantık izleyeceğiz :)

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

May 03, 2011

Alıntı (Kadir Can):

>

-Koyu harf dışında hepsinin çaresi var.Koyu harfle ilgili bir fikrim yok.
Acaba nasıl olabilir?

Bence herkes bir çözüm yazsın sonra çözümleri karşılaştıralım ;-)

Koyu harfleri zaten koyu yapmaya gerek yok. Örneğin 'koyu' ise çıktı olarak kkooyyuu vermesi yeterli oluyor.

Alıntı (acehreli):

>
  • girişi ayrıştırmak ve bir DüzenliMetin oluşturmak

Düzenli metin derken regexp'den bahsediyorsunuz sanırım. Benim en zorlandığım konulardan bir tanesi :( Burada bazı bilgiler var ama örnekler yetersiz kalıyor.

http://www.digitalmars.com/d/2.0/regular-expression.html

if (std.regexp.find(s, "/<"))
       writeln("buldum");
   else writeln("bulamadım");

Bir şeyler denedim ama ilk planda yapmaya çalışacağımız şey şunun gibi olacak değil mi.
Alıntı:

>

matematige benzer
sekilde
bilgisayar
bilimi bilginin,

Daha sonra düzenli ifadeler kullanarak bunları parça parça alacağız. Ama etiketler birbirinin içine girince biraz işler karışıyor.

Alıntı:

>

amaci vegorevi
bir
yandan
temel
aksiyomatik
matematiksel

Alıntı (acehreli):

>
>     /* Ayrıştırma */
>     auto konsol = new KonsolDüzenleyicisi();
>     konsol.göster(metin);
> ```

>

Umarım burada gerçek konsolun çıktısını değiştirmekten bahsetmiyorsunuzdur :D

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

Alıntı (acehreli):

>

Vakit bulduğunda şuradaki yazıya bakar mısın; D2 ile uyumlu mu?

Tabi. Büyük bir zevkle :)

İlk planda aklıma böyle basit bir enum kullanmak geldi. Gizli metinlerin yazdırılmadığını düşünürsek.

enum Biçim { Yok, Koyu = 10, Gizli, Köşeli, Büyük,
       KoyuKöşeli = 22, KoyuBüyük,
       Hepsi = 45 }

class DüzenliMetin {
   string metin;
   Biçim biçim;

   this(string metin, Biçim biçim) {
       this.metin = metin;
       this.biçim = biçim;
   }
}

void main() {

// ...

   foreach (kelime; kelimeler) {
       if (kelime.length >= 3)
           auto baştakiEtiket = kelime[0 .. 3];
       writeln(kelime);
   }

   auto metin = new DüzenliMetin("matematige", Biçim.KoyuKöşeli);
}

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

May 03, 2011

Birazcık daha kısa yazabildim:

import std.stdio, std.string, std.algorithm;

void main() {
   File giriş = File("deneme.txt", "r");
   string[] kelimeler;

   foreach (string satır; lines(giriş)) {
       kelimeler ~= split(chomp(satır));
   }

   writeln(kelimeler);
}

Ali

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

May 03, 2011

Düzen bilgisinin ne oluşturacağı metnin gösterileceği ortama bağlı. O yüzden burada iki genel iş var:

  • girişi ayrıştırmak ve bir DüzenliMetin oluşturmak

  • DüzenliMetin'i belirli bir çıkış düzenleyicisi ile kullanmak

   /* Ayrıştırma */
   auto metin = new DüzenliMetin(/* ... */);

   auto konsol = new KonsolDüzenleyicisi();
   konsol.göster(metin);

   auto xml = new XmlDüzenleyicisi("cikis_dosyasi.xml");
   xml.göster(metin);

   auto özel = new BenimÖzelDüzenleyicim(/* ... */);
   özel.göster(metin);

Her bir düzenleyici ne yapacağını kendisi bilir. (Emin konuşuyorum ama emin değilim! :) Burada "double-dispatch" var, çünkü davranış iki açıdan esnek: Hem düzenleyici hem de metin parçaları çalışma zamanında bilinebiliyorlar.)

Ali

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

May 03, 2011

Alıntı (acehreli):

>

Alıntı (erdem):

>

regexp'den bahsediyorsunuz sanırım.

Vakit bulduğunda şuradaki yazıya bakar mısın; D2 ile uyumlu mu?

http://ddili.org/makale/duzenli_ifadeler.html

Maalesef çoktan deprecated olmuş. Hatta o makaye de bir uyarı eklemenin zamanı gelmiş sanırım :)

Şu anda 'std.regex' kullanılıyor.

http://www.digitalmars.com/d/2.0/phobos/std_regex.html

Ben biraz oynamaya başladım. Ve şöyle şeyler çıktı. Bana aslında daha kullanışlı gibi geldi.

import std.string, std.stdio, std.regex;

void main() {
   auto s = "kedi-köpek";

   auto r = match(s, regex("köpek"));

   // bulunan ifadeden bir önceki parçayı gösteren bir dilim döndürür
   auto önceki = r.pre;

   auto s1 = s[0 .. 5];   // kedi-
   assert(önceki == s1);

   // bulunan ifadeden bir sonraki parçayı gösteren bir dilim döndürür
   auto sonraki = r.post;
   auto s2 = s[$ ..$];
   assert(sonraki == s2); // <boş>

   // bulunan ifadeyi gösteren bir dilim döndürür
   auto bulunan = r.hit;
   auto s3 = s[5 .. $];
   assert(bulunan == s3); // köpek
}

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

May 03, 2011

Alıntı (erdem):

>

Alıntı (acehreli):

>
  • girişi ayrıştırmak ve bir DüzenliMetin oluşturmak

Düzenli metin derken regexp'den bahsediyorsunuz sanırım.

Hayır. Metin okunmuş ve şurası koyudur, burası eğiktir diye anlaşılmış. Yani metin, ama düzeni de var.

Alıntı:

>

Alıntı (acehreli):

>
> >     /* Ayrıştırma */
> >     auto konsol = new KonsolDüzenleyicisi();
> >     konsol.göster(metin);
> > ```

> >
>
> Umarım burada gerçek konsolun çıktısını değiştirmekten bahsetmiyorsunuzdur :D
>

Okunup anlaşılmış olan ve düzenini de içeren metni konsolda göstermeye çalışıyorum. Konsolda da koyu, eğik, vs. metin gösterilebilir. Koyu font kullanılabileceği gibi, belirli renkler de kullanılabiliyor.

Benim söylemek istediğim, burada iki konu var:

- gelen metni okumak ve düzenini ifade eden bir yapıda saklamak ("yapı" ile struct demek istemiyorum; herhangi başka biçimde de olabilir)

- o yapıdaki metni, ortamına göre farklı biçimlerde göstermek

Ali

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
« First   ‹ Prev
1 2 3