Jump to page: 1 2
Thread overview
vtD dbwrite işlevi
Jul 15, 2012
huseyin
Jul 15, 2012
Salih Dinçer
Jul 15, 2012
huseyin
Jul 15, 2012
Salih Dinçer
Jul 15, 2012
huseyin
Jul 15, 2012
Salih Dinçer
Jul 15, 2012
huseyin
Jul 15, 2012
Salih Dinçer
Jul 15, 2012
huseyin
Jul 15, 2012
huseyin
Jul 15, 2012
Salih Dinçer
Jul 15, 2012
huseyin
July 15, 2012

Veritabanı projem için dbwrite işlevini yazıyorum sizce foreach mı kullanmalıyım yoksa farklı bir yöntem mi işin içinden çok çıkamadım da :)

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

July 15, 2012

Kod örnekli sorarsan sanırım çok faydalı olacak. Örneğin 'foreach()' ile başlayıp bunun olası dezavantajlarını inceleriz. Gerçi pek zannetmiyorum, kendisi pek kuvvetlidir...:)

Özellikle şu şekilde; sayaçlı ilerleme nedeniyle:

   foreach(i, eleman; [ 10, 20, 30 ]) {
       i.writeln(": ", eleman);
   }

Çıktısı:
'0: 10
1: 20
2: 30'

Dikkat: 'foreach()''in, tam hatırlayamadığım (sanırım Aralıklar'dı) şekilde kullanımında bir sakınca vardı. Ali hocam naklettiği için daha iyi bilecektir. Sanırım sayaç devre dışı kalıp hata veriyordu.

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

July 15, 2012

Peki şimdi verdiğim benim vt modulum Database sınıfının içine write diye void bir işlev açacağım daha sonra db adlı eşleme tablomdaki verilerimin sırası ile bir dosyaya yazılmasını istiyorum yani tablo anahtar deger şekilnde

module vt;
import std.path;
import std.datetime;
import std.process;
import std.stream;
import std.conv;
import std.string;
import std.file;
import std.cstream;
import std.array;
import crypt;


class Data
{
	string[] datas;

	void del(string name)
	{
		string[] dizi2;
		int sayac = datas.length;
		for (int i=0;i<sayac;++i)
		{
			if(datas[i] != name)
			{
				dizi2~=datas[i];
			}
		}
		datas=dizi2;
	}
	void add(string dat)
	{
		datas~=dat;
	}
}//end of class

class Subtable
{
	Data [string] subtables;
	Data opIndexAssign(Data dat,string name)
	{
		return subtables[name]=dat;
	}
	void del(string key)
	{
		subtables.remove(key);
	}

	void add(string key,Data firstdata)
	{
		subtables[key]=firstdata;
	}
}//end of class

class Database
{

	Subtable [string] db;
	string dbname;

	this(string db)
	{
		this.dbname=db;
	}

	Subtable opIndex(string table)
	{
		return db[table];
	}

	Subtable opIndexAssign(Subtable table,string name)
	{
		return db[name]=table;
	}
	void del()
	{
		db.remove(table);
	}
	void add(Subtable firstkey)
	{
		db[table]=firstkey;
	}
	void open()
	{
		Data data = new Data;
		Subtable subtable = new Subtable;
		scope File myfile = new File(dbname,FileMode.In);

		string currenttable;
		string currentkey;
		string[] currentdatas;
		while(myfile.available)
		{
			char[] line_c = myfile.readLine();
			string line_s = to!(string)(line_c);
			if(line_c[0..2]=="|;")
			{
				currenttable=replace(line_s,"|;","");
			}
			else if(line_c[0..2]=="*;")
			{
				currentkey=replace(line_s,"*;","");
			}
			else
			{
				data.datas~=line_s;
				subtable.subtables[currentkey]=data;
				this.db[currenttable]=subtable;
			}
		}


	}


}//end of class



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

July 15, 2012

Sınıfı buraya koyman gayet iyi olmuş çünkü diğer başlıklara bakmamız gerekebilirdi...
'(Ali hocam, bu arada artık ayrı bir proje kategorisi açsak ve bu başlıkları oraya taşısak mı?)'

Şimdi şöyle devam edelim:

Bu sınıfı kullanan bir ana işlevimiz var ve yaptığı ise 'foreach()' ile ekrana yazmak olsun. Yani doğrudan dosyaya yazmak ile uğraşmayalım ve önce ekranda görelim. Zaten devamı daha kolay olacak...:)

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

July 15, 2012

hmm evet öyle başlasak daha mantıklı olacak galiba haklısın ben bir deneme işine girişeyim

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

July 15, 2012

Bir dakika...

Önce bir takım hatalar var onları giderelim. Örneğin:

class Database
{

   Subtable [string] db;
   tring dbname; //<--- bunun türü string olmalı sanırım?
   :    :    :

Ayrıca aynı sınıfın 'add()' ve 'del()' üyelerine table ismindeki indeksi nereden vermeyi düşünüyorsun?

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

July 15, 2012

kopyalama hatası string olacak evet amacım opIndex ten vermek ama nasıl yapacağımı çözemedim

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

July 15, 2012

Peki hocam UFCS'deki akıllı veri paylaşımını yapabilir miyiz?

Yani bir sınıfın üyesine parametre vermek yerine tıpkı @property gibi bir kullanım (ama bu sefer dışarıdan içeri) söz konusu olabilir mi? Şöyle:

with(new Database) {
   tables1.add (sub1);
}

Demek istiyorum ki tıpkı writeln()'nin hem soldan UFCS ile parametre alabildiği gibi hem de parantez içinde kullanımını biz kendi sınıflarımızda nasıl başarabiliriz?

foreach(foo; bar) {
   foo.write ("\t"); // foreach(foo; bar) write (foo, "\t") aynısı...
}

Alıntı (huseyin325325):

>

kopyalama hatası string olacak evet amacım opIndex ten vermek ama nasıl yapacağımı çözemedim

Evet, basit bir kopyalama hatası var ve bunu hep yapıyoru(m)z...:)

Aslında programcılara sağlam önerilerden biri de mümkün olduğunca kopyala&yapıştır'dan uzak kalmak. Çünkü kodu ilk yazdığımız anda yapılan bir hata, bulaşıcı bir virüs gibi tüm programa yayılabiliyor...

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

July 15, 2012

Evet ama foruma da elle yazmaya kalkarsak işimiz çok :)

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

July 15, 2012

Hocam dbwrite ı yazdım da yazmasına bunun bir sorunu var galiba elemanları tekrar yazıyor

void dbwrite()
	{
		scope File myfile = new File(dbname,FileMode.OutNew);
		foreach(table,subtab;db)
		{
			myfile.writeLine("|;"~table~"|;");
			foreach(key,val;subtab.subtables)
			{
				myfile.writeLine("*;"~key~"*;");
				foreach(dat;val.datas)
				{
					myfile.writeLine(dat);
				}
			}
		}

	}

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

« First   ‹ Prev
1 2