簡易メモリデータベース(六)CREATE

1832 ワード

前のCREATEが完了しました.中にはもう気づいたと思います.
float(4)またはchar(100)を読むと、この文字列に2つの内容を保存する必要があることがわかります.1つはcolumnタイプで、1つはcolumn長です.
getColumnTypeLength(buffer,&column->type,&column->length)を使いました.この関数は,bufferで読み取った2つの内容をcolumn->typeとcolumn->lengthにそれぞれ保存したい.
 
明らかに,この文字列を解析することをgetColumnTypeLengthという関数に任せた.
この関数の最初のbufferは入力パラメータです.
column->typeおよびcolumn->lengthは、関数内部の設定値を必要とする戻りパラメータです.
戻りパラメータは、関数内部の設定を保存するためにアドレスを渡すようにしなければなりません.
 
では、この関数はどのように実現されるのでしょうか.これは基本的な仕事だと思います.どの学生も自分で書くべきで、しかもたくさんの書き方があります.実現さえすればいい.
次は私の実現方法です.関数strncmpが使用されます.彼の役目は2つの文字列の特定の長さを比較することだ.
strncmp(string,「float(」,6)はfloat(4)とfloat(の上位6位が同じかどうかを比較したい
 
/*
 *  :float(4) char(100) 
 *  :string --  
 *  :type --  type(float/char)( )
 *  :length --  ( )
 *  : 0 。 1 
 */
int getColumnTypeLength(char * string, DataType * type, int * length)
{
	char * floatHead = "float(";
	char * charHead = "char(";
	// float 
	if (strncmp(string,floatHead,strlen(floatHead))==0)
	{
		*type = floatType;
		string = string+strlen(floatHead);
		*length = getLength(string);
		return 1;
	}
	else if (strncmp(string,charHead,strlen(charHead))==0)
	{
		*type = stringType;
		string = string+strlen(charHead);
		*length = getLength(string);
		return 1;
	}
	else
	{
		printf(" 
"); return 0; } }

 
タイプを解析した後、getLengthを使って長さを解析しました.
 
例えば、我々が伝達した文字列がfloat(4)である場合、stringは最初に文字列のヘッダアドレス、すなわちfを指す.
string=string+strlen(floatHead))はstringポインタを6桁後ろにずらすことでstringが4を指します.stringが指す文字列は'4)'
getLength(string)はgetLengthという関数に‘4’’という文字列を解析させて4という数値を得ることである.