⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 读写DBF文件的库
💻 CPP
字号:
// Testdbf1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include "test_dbf.h"
#include "xntoy.h"

#define BASE_TEST			1
#define CHECK_HASHNODE		1
#define WRITEDBF_TEST		1
#define READDBF_TEST		1

void init_data(MAINTESTDATA *pdata)
{
	memset(pdata, 0, sizeof(MAINTESTDATA));
}

int test();
int test2();
int test3();

int main(int argc, char* argv[])
{
	printf("start test...\n");
	return test();
//	return test2();
	//return test3();
}

int test()
{
	MAINTESTDATA data;
	double rate;
	DBFFILE dbf;
	clock_t t[2];
	int i;

/*	char *p[]=
	{
		NULL,
		"",
		"\0",
		"1\0",
		"12\0",
		"123\0",
		" NP\0",
		" NP ",
		" NXP ",
		"  NNXPP  "
	};

	for(i=0;i<10;i++)
	{
		char *q = Trim((char *)p[i]);
		if(q)
		{
			int len = strlen(q);
			printf("i is %d, len = %d, str is:<%s>\n", i, len, q);
		}
	}
*/
	char pp[]="  ";
	char *qq = Trim(pp);
	printf("qq is <%s>\n", qq);

#if(BASE_TEST)
#define RUN_COUNT 50000
	char    buf[40];

	printf("start check xtoy and xntoy... \n");
	t[0] = clock();
	for(i=0;i<RUN_COUNT;i++)
	{
	   lntoa(634234, buf, sizeof(buf), 10);
	}
	t[1] = clock();
	printf("lntoa->Run %ld, time is : %ld\n", RUN_COUNT, t[1] - t[0]);

#ifdef WIN32
	t[0] = clock();
	for(i=0;i<RUN_COUNT;i++)
	{
	   //ltoa(634234, buf, 10);
	}
	t[1] = clock();
	printf("ltoa->Run %ld, time is : %ld\n", RUN_COUNT, t[1] - t[0]);
	printf("\tresult->buf is %s\n", buf);
#endif

#endif

#if(WRITEDBF_TEST)
	init_data(&data);
	if(CreateDBFFile(dbf, "test.dbf"))
	{
	#if(CHECK_HASHNODE)
		int field_count =0 ;
		printf("\nstart check hash node ...\n");
		for(i=0;i<MAX_FIELDS;i++)
		{
			int num = 0;
			FIELD_HASHNODE *pnode;
			pnode = dbf.dbf_handle->field_hashnode [i];

			if(pnode)
			{
				printf("hash node index %d\n", i);
				while(pnode)
				{
					printf("\t%s, index=%d\n", dbf.dbf_handle->field_list[pnode->index], pnode->index);
					pnode=pnode->next;
					num++;
				}
				if(num) printf("\t%-8d\n", num);
				field_count ++;
			}
		}
		printf("\nfield count is %d,%d\n", field_count,dbf.dbf_handle->field_num);
		printf("rec size is %d\n\n", dbf.dbf_handle->dbf_head.rec_size );
	#endif

		data.Lon = 123.345678;
		data.Lat = 30.234567;

#ifdef RUN_COUNT
#undef RUN_COUNT
#endif
#define RUN_COUNT 10000
//////////////////////////////////
//以下调用WriteDBFFile(dbf, &data);
		t[0] = clock();
		for( i=0;i<RUN_COUNT;i++)
		{
			WriteDBFFile(dbf, &data);
		}
		t[1] = clock();
		rate = (double)(t[1] - t[0]);
		printf("CLOCKS_PER_SEC is %ld\n", CLOCKS_PER_SEC );
		printf("write record %ld.\n\ttime is %lf clocks\n\t%.4lf seconds\n", 
			RUN_COUNT, 
			rate,
			rate/CLOCKS_PER_SEC);
	}

//	dbf.Zap ();
#endif

	return 0;
}


int test2()
{
	FIELD_REC field[100];
	int num = 0;
	char id[12];
	int ii, rec, i;
	long ll;
	double ff, gg;
	DBFFILE dbf;

	printf("add field ...\n");
	dbf.AddField (field[num++], "id", 'C', 12, 0);
	dbf.AddField (field[num++], "rec", 'N', 4, 0);
	dbf.AddField (field[num++], "Rec", 'a', 2, 3);
	dbf.AddField (field[num++], "ii", 'N', 4, 0);
	dbf.AddField (field[num++], "ll", 'N', 8, 0);
	dbf.AddField (field[num++], "ff", 'N', 12, 6);
	dbf.AddField (field[num++], " ", 'N', 12, 6);
	dbf.AddField (field[num++], NULL, 'C', 0, 0);

	printf("start create file\n");
	if(dbf.Create ("test2.dbf", field))
	{
		for(i=0;i<MAX_FIELDS;i++)
		{
			if(dbf.dbf_handle->field_list[i] == NULL) 
				break;
			printf("field %d is %11s\n", i, dbf.dbf_handle->field_list[i]->field_rec.field_name);
		}
		for(i=0;i<3;i++)
		{
			dbf.Append("rec");
			dbf.SetFieldValue("id", "134145");
			dbf.SetFieldValue("II", 245245);
			dbf.SetFieldValue("LL", 1234567890);
			dbf.SetFieldValue("FF", 12345678.345678);
			dbf.SetFieldValue(" ", 778899.345678);
			dbf.Update();
		}
		for(i=0;i<3;i++)
		{
			dbf.Move(i+1);
			dbf.GetFieldValue("rec", rec);
			dbf.GetFieldValue("ID", id, sizeof(id));
			dbf.GetFieldValue("II", ii);
			dbf.GetFieldValue("LL", ll);
			dbf.GetFieldValue("FF", ff);
			dbf.GetFieldValue(" ", gg);


			printf("rec is %d\n", rec);
			printf("id is %s\n", id);
			printf("ii is %ld\n", ii);
			printf("ll is %ld\n", ll);
			printf("ff is %lf\n", ff);
			printf("gg is %lf\n", gg);
		}
		dbf.Close();
	}
	else
	{
		printf("create file error \n");
	}
	
	return 1;
}


int test3()
{
	char buf[20];
//	int i;
	long l ;
//	int ch[sizeof(i)];

	l = 12345678;
	lntoa(l , buf, sizeof(buf), 10);
	printf("buf is %s\n", buf);
//	printf("ch is %d\n", sizeof(ch));
//	printf("i is %d\n", sizeof(i));
	printf("test3\n");

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -