简易内存数据库(五)CREATE_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > 简易内存数据库(五)CREATE

简易内存数据库(五)CREATE

 2011/1/8 8:15:51  桔红糕  http://orangegao-gmail-com.javaeye.com  我要评论(0)
  • 摘要:接下来就是一行行读column了。因为column有多个,所以我们需要写循环语句while(...)循环语句的结束条件是什么呢,读到什么时候column就算读完了呢?当然是要么文件结束,要么读到‘)’啦。所以我们可以开头这样写fscanf(fp,"%s",buffer);while(!feof(fp)&&strcmp(buffer,")")){while循环中每读到一次column就创建一个column对象。填充好。而且column结构设计的时候我用链表结构
  • 标签:数据库 数据 内存数据库

接下来就是一行行读column了。

?

因为column有多个,所以我们需要写循环语句 while(...)

循环语句的结束条件是什么呢,读到什么时候column就算读完了呢?

当然是要么文件结束,要么读到‘)’啦。

所以我们可以开头这样写

	fscanf(fp,"%s",buffer);
	while (!feof(fp) && strcmp(buffer,")")) {

?while循环中每读到一次column就创建一个column对象。填充好。

而且column结构设计的时候我用链表结构。所以还要把每次创建的column对象连起来。

?

	//接下去开始读column内容
	Column * current = NULL;
	fscanf(fp,"%s",buffer);
	while (!feof(fp) && strcmp(buffer,")"))
	{
		//每次循环先创建一个column对象
		Column * column = (Column *)malloc(sizeof(Column));
		//清空column
		memset(column, 0, sizeof(Column));

		//因为column是链表结构,所以必有一下几句 1)保留住链表头 2)把链表连起来 3)当前的指针往后移一个
		if (t.columns == NULL) t.columns = column;
		if (current!=NULL) current->next = column;
		current = current->next;

?链表结构的创建一定要记住!1)保留住链表头 2)把链表连起来 3)当前的指针往后移一个

?

好了。到现在为止CREATE最复杂的部分实现了以后。接下来我们就轻松了。只要一个个内容读,读完了1保存在新创建的column中就可以了。

?

		t.columnCount++;

		//第一次读应该读到 column name
		strcpy(column->name, buffer);

		//第二次读应该读到 column type(column length)
		fscanf(fp,"%s",buffer);
		getColumnTypeLength(buffer, &column->type, &column->length)==0; 


		//第三次可能读到NULL; 可能读到; 这两种都代表着可以为空

		fscanf(fp,"%s",buffer);
		if (strcmp(buffer,";")==0 || strcmp(strupr(buffer),"null;")==0)
			column->allowNull = 1;
		//第三次读也可能读到NOT,代表着不能为空
		else if (stricmp(buffer,"not")==0)
		{
			//第四次读应该读到null;
			fscanf(fp,"%s",buffer);
			if (stricmp(buffer,"null;")) return 0; 
			column->allowNull = 0;
		}
 

?这样一个column就都算完成了。继续往下读,完成循环

		//继续读应该读到下一行内容了
		fscanf(fp,"%s",buffer);
	}
	return 1;

?

发表评论
用户名: 匿名