亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? c語言寫的.dbf文件的操作函數庫.txt

?? 為什么編寫本函數庫?   目前好多電力方面的抄表器由于其RAM內存及FLASH閃存的空間都比較小
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
為什么編寫本函數庫?
  目前好多電力方面的抄表器由于其RAM內存及FLASH閃存的空間都比較小,沒有辦法象java那樣調用各種基于各種大型數據庫的外界jar包進行數據采集工作。為此,dbf這種簡單的結構型數據庫成為手選。另外,因為抄表器要求的數據格式也比較簡單,選用這種結構型的最貼合實際。
  基于以上兩點,本人上網搜了些這方面的資料,想down一個.dbf驅動,但水平有限沒找著,只好自己編寫了。

直接貼代碼吧:
1:HT_DBF.H,定義了.dbf的幾個數據結構。

 /**************************************************************
  **                     c語言操作dbf文件                       
  **
  ** 目前只支持int--N,char--C                                   
  **************************************************************/

#define MAX_INT_LENTH 20
#define MAX_FLOAT_LENTH 20
#define MAX_CHAR_LENTH 254
/***************************************************************
 * 數據庫表中的列聲明,包含一些列屬性
 ***************************************************************/
typedef struct field
{
 char FIELD_NAME[11];
 char FIELD_TYPE;
 int FIELD_X;
 int FIELD_Y;
 unsigned char FIELD_LENTH;
 unsigned char FIELD_FLOAT_LENTH;
 int index;
 struct field * next;
}DBF_FIELD;

/***************************************************************
 * 數據庫表的配置信息,包含 文件開始標志,最后更新日期,記錄總數,文件頭大小,記錄大小,列屬性鏈表
 *                       數據庫文件句柄,當前記錄
 ***************************************************************/
typedef struct {
 unsigned char BEGIN_FLAG;
 unsigned char LAST_UPPDATE_TIME[3];
 long RECORD_COUNT;
 int HEAD_SIZE;
 int RECORD_SIZE;
 DBF_FIELD *head;
 int DBF_HANDLE;
 long current;
}DBF_CONFIG;

/***************************************************************
 * 數據表中的一條記錄
 * 為了通用性,僅用一個 void *指示
 * 其中的具體內容,可以參照DBF_CONFIG中的DBF_FIELD *head進行解析
 ***************************************************************/
typedef struct record
{
 void * value;
}DBF_RECORD;


2:HT_DBF.C,操作函數庫

#define __ASM  asm

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <io.h>
#include <dos.h>
#include <share.h>
#include <fcntl.h>
#include <string.h>
#include <mem.h>
#include "..\project\ht_dbf.h"

DBF_CONFIG * dbfopen(char *fname,DBF_CONFIG * db_con);
int dbfclose(DBF_CONFIG * con);
int dbfread(DBF_CONFIG * con,DBF_RECORD * record);

int dbfgetFieldByIndex(DBF_CONFIG * con,DBF_RECORD * record,int index,void * return_value);
int dbfgetFieldByName(DBF_CONFIG * con,DBF_RECORD * record,char* name,void * return_value);
int dbfgetFloatByIndex(DBF_CONFIG * con,DBF_RECORD * record,int index,void * return_value);
int dbfgetFloatByName(DBF_CONFIG * con,DBF_RECORD * record,char* name,void * return_value);
int dbfgetCharByIndex(DBF_CONFIG * con,DBF_RECORD * record,int index,void * return_value);
int dbfgetCharByName(DBF_CONFIG * con,DBF_RECORD * record,char* name,void * return_value);

int dbfsetFieldByIndex(DBF_CONFIG * con,DBF_RECORD * record,int index,void * value);
int dbfsetFieldByName(DBF_CONFIG * con,DBF_RECORD * record,char* name,void * value);
int dbfsetFloatByIndex(DBF_CONFIG * con,DBF_RECORD * record,int index,void * value);
int dbfsetFloatByName(DBF_CONFIG * con,DBF_RECORD * record,char* name,void * value);
int dbfsetCharByIndex(DBF_CONFIG * con,DBF_RECORD * record,int index,void * value);
int dbfsetCharByName(DBF_CONFIG * con,DBF_RECORD * record,char* name,void * value);

char *ccstr( char *str);

void dbf_info();

void dbf_info()
{
 char column_name[12];
 DBF_FIELD *cur=NULL;
 DBF_RECORD record;
 float b=0.0;
 float c;
 char *record_value;
 char ret_val[MAX_CHAR_LENTH+1];
 /*打開數據庫*/
 DBF_CONFIG *con=dbfopen("..\\project\\CBDATA.DBF",NULL);
 /*數據庫配置信息*/
 printf("BEGIN_FLAG:%d\n",con->BEGIN_FLAG);
 printf("LAST_UPPDATE_TIME:%d",con->LAST_UPPDATE_TIME[0]);
 printf(" - %d",con->LAST_UPPDATE_TIME[1]);
 printf(" - %d\n",con->LAST_UPPDATE_TIME[2]);
 printf("RECORD_COUNT:%d\n",con->RECORD_COUNT);
 printf("HEAD_SIZE:%d\n",con->HEAD_SIZE);
 printf("RECORD_SIZE:%d\n",con->RECORD_SIZE);
 printf("DBF_HANDLE:%d\n",con->DBF_HANDLE);
 printf("current:%d\n",con->current);
 /*列信息*/
 cur=con->head;
 while(cur!=NULL){
  strncpy(column_name,cur->FIELD_NAME,11);
  column_name[11]='\0';
  printf("FIELD-INFO-->NAME:%s,TYPE:%c,X:%d,Y:%d,LENTH:%d,FLOAT_LENTH:%d,index:%d\n",column_name,
   cur->FIELD_TYPE,cur->FIELD_X,cur->FIELD_Y,cur->FIELD_LENTH,cur->FIELD_FLOAT_LENTH,cur->index);
  cur=cur->next;
 }

 /*讀取第2條記錄*/
 con->current=1;
 dbfread(con,&record);
 record_value=(char *)malloc(con->RECORD_SIZE+1);
 memcpy(record_value,record.value,con->RECORD_SIZE);
 *(record_value+con->RECORD_SIZE)='\0';
 printf(record_value);
 printf("\n");
 dbfgetFloatByName(con,&record,"cs1",&b);
 printf("A:%f\n",b);
 dbfgetFloatByIndex(con,&record,2,&c);
 printf("c:%f\n",c);
 printf("\n");
 dbfgetCharByName(con,&record,"HM",ret_val);
 memset(ret_val,'\0',sizeof(ret_val));
 dbfgetCharByIndex(con,&record,1,ret_val);
 printf("ret_val:%s\n",ret_val);
 printf("\ncurrent:%d\n",con->current);
 /*改寫數據庫記錄*/
 con->current=1;
 b=41.01;
 //dbfsetFieldByIndex(con,&record,7,&b);
 dbfsetFloatByIndex(con,&record,7,&b);
 sprintf(ret_val,"%-254s","01-001-01");
 dbfsetCharByName(con,&record,"bh",ret_val);
 sprintf(ret_val,"%-254s","太平路1號");
 dbfsetCharByName(con,&record,"dz",ret_val);

 /*關閉數據庫*/
 dbfclose(con);
 getch();
}
/**********************************************************************************************************/

/******************************************
 * 打開指定文件名的文件,并初始化DBF_CONFIG。
 ******************************************/
DBF_CONFIG * dbfopen(char *fname,DBF_CONFIG * db_con)
{
 unsigned tmp,field_x;
 int fhandle;
 char fhead[12];
 char field_desc[32];
 long pos=0;

 DBF_FIELD *field=NULL;
 DBF_FIELD *cur=NULL;

 if(_dos_open(fname, O_RDWR, &fhandle)!=0)
 {
  printf("不能打開文件:%s\n",fname);
  return NULL;
 }
 db_con = (DBF_CONFIG *)malloc(sizeof(DBF_CONFIG));
 _dos_read(fhandle, fhead, 12, &tmp);
 /*基本信息*/
 db_con->BEGIN_FLAG=(unsigned char)fhead[0];
 memcpy(db_con->LAST_UPPDATE_TIME,fhead+1,3);
 db_con->RECORD_COUNT=*(long*)&fhead[4];
 db_con->HEAD_SIZE=*(unsigned *)&fhead[8];
 db_con->RECORD_SIZE=*(unsigned *)&fhead[10];
 /*狀態信息*/
 db_con->DBF_HANDLE=fhandle;
 db_con->current=1;
 /*數據庫表屬性列表,Delphi3.0創建的數據庫表,沒有FIELD_X,FIELD_Y字段,Visial FoxPro中有。*/
 /*Delphi3.0的BEGIN_FLAG=03H,Visial FoxPro的BEGIN_FLAG=30H,可據此進行以下的初始化*/
 lseek(fhandle, 0L, SEEK_SET);
 lseek(fhandle, 32L, SEEK_SET);
 pos=1;
 field_x=1;
 while((++pos*32)<db_con->HEAD_SIZE)
 {
  _dos_read(fhandle, field_desc, 32, &tmp);
  field=(DBF_FIELD *)malloc(sizeof(DBF_FIELD));

  memcpy(field->FIELD_NAME,field_desc,11);
  field->FIELD_TYPE=field_desc[11];
  field->FIELD_LENTH=(unsigned char)field_desc[16];
  field->FIELD_FLOAT_LENTH=(unsigned char)field_desc[17];
  if(db_con->BEGIN_FLAG==0x30)
  {
   field->FIELD_X=*(unsigned *)&field_desc[12];
   field->FIELD_Y=*(unsigned *)&field_desc[14];
  }
  else
  {
   field->FIELD_X=field_x;
   field->FIELD_Y=0;
   field_x+=(unsigned)field->FIELD_LENTH;
  }
  field->index=pos-1;
  field->next=NULL;

  if(pos*32==64)
  {
   cur=field;
   db_con->head=field;
  }
  else
  {
   cur->next=field;
   cur=field;
  }

 }
 return db_con;

}

/******************************************
 * 關閉數據庫,并且釋放DBF_CONFIG內存。
 ******************************************/
int dbfclose(DBF_CONFIG * con)
{
 DBF_FIELD *cur=NULL;
 DBF_FIELD *deleted=NULL;

 if(con==NULL) return 0;
 /*釋放DBF_FIELD所占內存*/
 cur=con->head;
 while(cur!=NULL)
 {
  deleted=cur;
  cur=deleted->next;
  free(deleted);
 }
 /*關閉文件句柄*/
 _dos_close(con->DBF_HANDLE);
 /*釋放DBF_CONFIG所占內存*/
 free(con);
 return 0;
}

/******************************************
 * 得到DBF_CONFIG中current所指示的記錄
 ******************************************/
int dbfread(DBF_CONFIG * con,DBF_RECORD * record)
{
 unsigned tmp;
 if(con==NULL)
 {
  printf("您沒有初始化DBF_CONFIG!\n");
  return -1;
 }
 if(record==NULL)
 {
  record=(DBF_RECORD *)malloc(sizeof(DBF_RECORD));
 }
 if(record->value==NULL)
 {
  record->value=(void *)malloc(con->RECORD_SIZE+1);
 }
 lseek(con->DBF_HANDLE, (long)(con->HEAD_SIZE+(con->RECORD_SIZE+1)*(con->current-1)), SEEK_SET);
 _dos_read(con->DBF_HANDLE, record->value, con->RECORD_SIZE+1, &tmp);
 if(con->current<con->RECORD_COUNT)
  con->current++;
 return 0;
}

/******************************************
 * 寫入DBF_CONFIG中current所指示的記錄
 ******************************************/
int dbfwrite(DBF_CONFIG * con,DBF_RECORD * record)
{
 unsigned tmp;
 lseek(con->DBF_HANDLE, (long)(con->HEAD_SIZE+(con->RECORD_SIZE+1)*(con->current-1)), SEEK_SET);
 _dos_write(con->DBF_HANDLE, record->value, con->RECORD_SIZE+1, &tmp);
 return 0;
}

/******************************************
 * 讀取DBF_RECORD相應的FIELD
 * 目前僅支持C-char,N-float,F-float
 * return 0:正確
 *   -1:沒有此索引
 *   -2:沒有此列名稱
 ******************************************/
int dbfgetFieldByIndex(DBF_CONFIG * con,DBF_RECORD * record,int index,void * return_value)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看亚洲精品| 欧美日韩你懂的| 亚洲一区二区在线免费看| 日韩视频永久免费| 一本久久综合亚洲鲁鲁五月天| 久久国产精品无码网站| 亚洲精品欧美激情| 久久精品视频网| 日韩一区二区高清| 欧美色老头old∨ideo| 99久久99久久综合| 国产一区二区免费视频| 视频一区欧美日韩| 亚洲一区二区五区| 亚洲乱码日产精品bd| 国产日韩精品一区二区浪潮av| 在线不卡中文字幕| 欧美午夜精品理论片a级按摩| 国产电影一区二区三区| 久久国产精品区| 日本中文字幕不卡| 肉色丝袜一区二区| 亚洲国产日日夜夜| 一区二区三区四区蜜桃| 亚洲视频一二区| 日本一区二区免费在线观看视频 | 国产精品正在播放| 日韩—二三区免费观看av| 亚洲一区二区视频在线| 一区二区久久久久| 一区二区三区.www| 亚洲一级二级在线| 亚洲国产精品久久人人爱| 亚洲主播在线观看| 亚洲一区二区中文在线| 亚洲一区二区三区在线看| 亚洲一线二线三线视频| 亚洲国产裸拍裸体视频在线观看乱了| |精品福利一区二区三区| 136国产福利精品导航| 国产三级精品三级在线专区| 久久美女高清视频| 久久久精品免费免费| 久久网站最新地址| 久久久久久久免费视频了| 久久视频一区二区| 国产日韩影视精品| 国产精品美女一区二区在线观看| 亚洲国产精品v| 亚洲日本在线天堂| 亚洲精品久久嫩草网站秘色| 一区二区日韩av| 日韩中文字幕1| 免费高清成人在线| 蜜桃视频第一区免费观看| 日本午夜精品视频在线观看 | 欧美日韩黄视频| 欧美精品在欧美一区二区少妇| 欧美一区二区三区免费大片 | 久久精品国产亚洲a| 精油按摩中文字幕久久| 国产成人精品影院| 一本到不卡免费一区二区| 欧美三级电影一区| 欧美一级二级在线观看| 国产日韩视频一区二区三区| 日韩毛片精品高清免费| 亚洲 欧美综合在线网络| 久久国内精品视频| 成人av资源在线| 欧美视频中文一区二区三区在线观看| 欧美丰满少妇xxxbbb| 久久久九九九九| 亚洲少妇30p| 免费观看91视频大全| 成人丝袜18视频在线观看| 欧美日韩在线三级| 精品免费日韩av| 亚洲视频一区在线| 六月丁香综合在线视频| 成人免费视频一区| 在线播放国产精品二区一二区四区 | 亚洲最新在线观看| 久久se精品一区精品二区| 97久久精品人人做人人爽50路| 91视视频在线观看入口直接观看www | 高清av一区二区| 91麻豆国产精品久久| 日韩精品一区二区三区中文不卡 | 91.com视频| 亚洲天堂a在线| 久久国产精品免费| 欧美专区在线观看一区| 久久久久久毛片| 亚洲成av人片| 99久久99久久精品国产片果冻 | 欧美色中文字幕| 久久精品人人做人人综合| 亚洲大片精品永久免费| 在线精品观看国产| 欧美精品一区二区不卡| 亚洲综合视频网| 国产精品一线二线三线| 欧美人成免费网站| 中文字幕永久在线不卡| 韩国理伦片一区二区三区在线播放 | 亚洲国产精品成人综合 | 亚洲欧美日韩电影| 国产一区在线观看视频| 欧美精品一二三四| 亚洲香肠在线观看| 91丨九色丨国产丨porny| 国产色一区二区| 久久99久久久久| 日韩限制级电影在线观看| 亚洲尤物视频在线| av综合在线播放| 久久久久久久久久看片| 麻豆成人91精品二区三区| 欧美午夜宅男影院| 亚洲欧美另类久久久精品2019| 风间由美性色一区二区三区| 精品国产一区二区三区久久影院| 丝袜诱惑制服诱惑色一区在线观看| 色综合久久久久综合体桃花网| 国产欧美精品日韩区二区麻豆天美| 久久超碰97中文字幕| 91精品一区二区三区久久久久久| 亚洲高清不卡在线| 欧美怡红院视频| 一区二区三区.www| 欧美午夜精品久久久久久孕妇 | 亚洲男人的天堂一区二区| 99久精品国产| 亚洲另类一区二区| 欧美中文字幕亚洲一区二区va在线| 最好看的中文字幕久久| 97se亚洲国产综合自在线| 国产精品电影一区二区| 成人动漫av在线| 欧美国产成人精品| 99九九99九九九视频精品| 中文字幕av一区二区三区| 99热99精品| 亚洲女同ⅹxx女同tv| 欧洲激情一区二区| 亚洲制服丝袜在线| 欧美精品一二三| 久久aⅴ国产欧美74aaa| 久久久精品tv| jlzzjlzz亚洲女人18| 亚洲综合区在线| 91精品国产综合久久精品性色| 久久成人久久鬼色| 中文av一区二区| 99久久精品情趣| 五月天激情综合| 日韩精品中文字幕在线一区| 国产精品夜夜嗨| 亚洲欧美日韩国产另类专区| 在线成人免费视频| 国产麻豆91精品| 亚洲精品视频免费看| 日韩欧美国产一区二区三区 | 亚洲欧美另类图片小说| 欧美日韩成人在线一区| 国产精品一区在线观看乱码| 亚洲人成网站精品片在线观看| 欧美人伦禁忌dvd放荡欲情| 国模套图日韩精品一区二区| 国产精品国产馆在线真实露脸| 欧美婷婷六月丁香综合色| 国产在线视视频有精品| 亚洲激情校园春色| 国内精品第一页| 中文字幕日本乱码精品影院| 在线一区二区三区做爰视频网站| 免费欧美在线视频| 国产精品国产三级国产aⅴ中文 | 一区二区三区在线免费| 日韩免费在线观看| 91丨九色丨尤物| 九九九精品视频| 樱桃国产成人精品视频| 久久在线免费观看| 欧美亚洲国产bt| 国产成人在线视频网站| 午夜成人免费视频| 国产精品午夜久久| 日韩一区二区三免费高清| 色狠狠色狠狠综合| 成人午夜视频福利| 理论片日本一区| 亚洲一区二区三区美女| 国产精品天天摸av网| 日韩精品中文字幕一区二区三区 | 精品国产三级a在线观看| 色哟哟在线观看一区二区三区| 国产精品资源在线观看| 日韩激情视频在线观看|