July 12, 2012

Benim aklımdaki tasarım tam olarak olmasada Ali Hocanın kine çok yakın kod a bir bakar mısın benim işleç yüklemem iyi değil de hata alıyorum kesin yanlış yaptım

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 Database
{
	Subtable opIndex(string table)
	{
		return db[table];
	}

	Subtable opIndexAssign(Subtable table,string name)
	{
		return db[name]=table;
	}

	Subtable [string] db;
	string dbname;





	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

class Subtable
{
	Data [string] subtables;
}//end of class

class Data
{
	string[] datas;
}//end of class





}//end of class



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

July 12, 2012

ama döndürmesi gerkiyormuş derleyici hata veriyor :(

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

July 12, 2012

vt.d(15): function declaration without return type. (Note that constructors are always named 'this')
vt.d(16): no identifier for declarator opIndex(string table)

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

July 12, 2012

Hmm deneyeyim bu arada tipi void alsak olmaz mı

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

July 12, 2012

Ona ihtiyaç kalmadı galiba

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;
}//end of class

class Subtable
{
	Data [string] subtables;
}//end of class

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

	Subtable opIndexAssign(Subtable table,string name)
	{
		return db[name]=table;
	}

	Subtable [string] db;
	string dbname; //bunlar class başına alıncak





	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







}//end of class



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

July 12, 2012

İsim Database nesnesinin ayrılmaz bir parçasıdır (mı?). O yüzden kurulum aşamasında verilmeli:

Database db = new Database("aaa");

Yukarıdaki adım Database'i açabilir de açmayabilir de. Ama ya "aaa" yoksa? Yukarıdaki satır otomatik olarak oluştursun mu yoksa oluşturmak için farklı bir işlev mi olsun?

Database db = yeniDatabase("bbb");

Ondan sonra open() tek başına olabilir:

db.open();

Alıntı (huseyin325325):

>
> db.add("tabl1","key1","mydata");
> db.del("tabl1","key1","mydata");
> ```


O çok kırılgan görünüyor. Kod içinde her yerde dizgiler kullanmak gerekmemeli. Şu nasıl olur?


db["tabl1"] = new Tablo(); // opIndexAssign yüklemesi



Daha sonra:


Tablo t = db["tabl1"]; // opIndex yüklemesi
// bu noktadan sonra "tabl1" yazmaya gerek yok:
t["key1"] = "mydata";
t.del("key1");



Kullanımın eşleme tablolarına çok benzediğinin farkındayım ama yalın eşleme tabloları olmak zorunda değiller tabii. Yüklediğin işleçler içinde istediğin denetimleri ve yan işlemleri yapabilirsin.

Bunlar fikir istediğin için. :) Yoksa db.add("tabl1","key1","mydata") gibi de olur ama bana kullanımı daha zor olacak gibi geliyor.

Ali

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

projenin tamamı github a yuklendi yanlız vtd2_gelismekte klasöründe
https://github.com/huseyin325325/vtd.git

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

July 12, 2012

D'de sınıf içindeki sınıfların özel bir anlamı var: Ancak belirli bir dış nesne üzerinden oluşturulabiliyorlar:

void main()
{
   auto a = new Database;
   a["abc"] = a.new Subtable;    // <-- a.new'e dikkat
}

Ya öyle kullan ya da Subtable ve Data'yı Database'in dışına al:

class Subtable
{
   Data [string] subtables;
}//end of class

class Data
{
   string[] datas;
}//end of class

void main()
{
   auto a = new Database;
   a["abc"] = new Subtable;
}

Ali

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

July 13, 2012

Ben de Huffman gerçeklememizi gönderiyorum o zaman. :)
Açma işlemini de gerçekleyince diğer algoritmaları araştıracağım, belki de daha iyi bir algoritmayı gerçeklemeyi deneyebilirim.

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

July 13, 2012

Peki tamam bir sorum olacak şimdi algoritmayı eklersek readLine işleviyle okumamamız gerek değilmi sonucta binary

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