DBF文件結(jié)構(gòu)中文說明_第1頁
DBF文件結(jié)構(gòu)中文說明_第2頁
DBF文件結(jié)構(gòu)中文說明_第3頁
DBF文件結(jié)構(gòu)中文說明_第4頁
DBF文件結(jié)構(gòu)中文說明_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、標(biāo)準(zhǔn)的DBF文件,是由頭文件和實(shí)體信息兩部分構(gòu)成(如圖所示)。1)文件的文件頭其中文件頭部分的長度是不定長的,它主要對DBF文件作了一些總體說明(表), 其中最主要的是對這個(gè) DBF文件的記錄項(xiàng)的信息進(jìn)行了詳細(xì)地描述,比如對每個(gè)記錄項(xiàng)的名稱、 數(shù)據(jù)類型、長度等信息都有具體的說明。在文件中 的位置內(nèi)容說明01個(gè)字節(jié)表示當(dāng)前的版本信息1 33個(gè)字節(jié)表示最近的更新日期,按照 YYMMDD格式。4 71個(gè)32位數(shù)文件中的記錄條數(shù)。8 91個(gè)16位數(shù)文件頭中的字節(jié)數(shù)。10 111個(gè)16位數(shù)一條記錄中的字節(jié)長度。12 132個(gè)字節(jié)保留字節(jié),用于以后添加新的說明性信息時(shí)使用,這里用0來填寫。141個(gè)字節(jié)表示

2、未完成的操作。151個(gè)字節(jié)dBASE IV編密碼標(biāo)記。16 2712個(gè)字節(jié)保留字節(jié),用于多用戶處理時(shí)使用。281個(gè)字節(jié)DBF文件的MDX標(biāo)識(shí)。在創(chuàng)建一個(gè) DBF表時(shí),如果使用了 MDX格式的索引文件,那么 DBF表的表頭中的這個(gè)字節(jié)就自 動(dòng)被設(shè)置了一個(gè)標(biāo)志,當(dāng)你下次試圖重新打開這個(gè)DBF表的時(shí)候,數(shù)據(jù)引擎會(huì)自動(dòng)識(shí)別這個(gè)標(biāo)志,如果此標(biāo)志為真,貝U 數(shù)據(jù)引擎將試圖打開相應(yīng)的MDX文件。291個(gè)字節(jié)Lan guage driver ID.30 312個(gè)字節(jié)保留字節(jié),用于以后添加新的說明性信息時(shí)使用,這里用0來填寫。32 X(n*32 )個(gè)字 節(jié)記錄項(xiàng)信息描述數(shù)組。n表示記錄項(xiàng)的個(gè)數(shù)。 這個(gè)數(shù)組的結(jié)構(gòu)

3、 在表2.8中有詳細(xì)的解釋。X+ 11個(gè)字節(jié)作為記錄項(xiàng)終止標(biāo)識(shí)。文件(.dbf )的文件頭位置內(nèi)容說明0 1011個(gè)字節(jié)記錄項(xiàng)名稱,是 ASCII碼值。111個(gè)字節(jié)記錄項(xiàng)的數(shù)據(jù)類型,是 ASCII碼值。(B、C、D G L、M和 N,具體的解釋見表 2.9 )。12 154個(gè)字節(jié)記錄中該字段的偏移量。161個(gè)字節(jié)記錄項(xiàng)長度,二進(jìn)制型。171個(gè)字節(jié)記錄項(xiàng)的精度,二進(jìn)制型。201個(gè)字節(jié)工作區(qū)ID。21 3010個(gè)字節(jié)保留字節(jié),用于以后添加新的說明性信息時(shí)使用,這里用0來填寫。311個(gè)字節(jié)MDX標(biāo)識(shí)。如果存在一個(gè) MDX格式的索引文件,那么這個(gè)記 錄項(xiàng)為真,否則為空。記錄項(xiàng)信息描述代碼數(shù)據(jù)類型允許輸

4、入的數(shù)據(jù)B二進(jìn)制型雙精度型各種字符。C字符型各種字符。D日期型用于區(qū)分年、月、日的數(shù)字和一個(gè)字符, 內(nèi)部存儲(chǔ)按照YYYYMMD格式。G(Ge neralor OLE)通用類型各種字符。N數(shù)值型(Numeric)-.0 1 2 3 4 5 6 7 8 9L邏輯型(Logical )? Y y N n T t F f (?表示沒有初始化)。M(Memo)各種字符。Y貨幣型F浮點(diǎn)型I整形P圖片表2.9 dbf文件中的數(shù)據(jù)類型2)文件的實(shí)體信息實(shí)體信息部分就是一條條記錄,每條記錄都是由若干個(gè)記錄項(xiàng)構(gòu)成,因此只要依次循環(huán)讀取每條記錄就可以了。3)一個(gè)讀取dbf文件的例子假設(shè)要讀取一個(gè)名為 soil的db

5、f文件(存儲(chǔ)了土地利用信息),它含有 8個(gè)記錄項(xiàng), 記錄項(xiàng)信息如表所示:記錄項(xiàng)名稱數(shù)據(jù)類型長度小數(shù)位數(shù)Area數(shù)值型 ( double )3115Perimeter數(shù)值型(double )3115soils_數(shù)值型(int )110soils_id數(shù)值型(int )110soil_code字符型(character )3無Suit字符型(character )1無Cen troid_x數(shù)值型(double ):3115Cen troid_y數(shù)值型(double )3115dbf文件中的數(shù)據(jù)類型2、行情文件格式說明:(1)、表文件由頭記錄及數(shù)據(jù)記錄組成。頭記錄定義該表的結(jié)構(gòu)及與表相關(guān)的其他信息。

6、數(shù)據(jù)記錄緊接在頭記錄之后,包含字段中實(shí)際的文本。記錄的長度等于所有字段定義的長度之和 (以字節(jié)為單位)。0x1A )結(jié)束。ASCII空格(0x20),則表示該記錄在刪除標(biāo)記之后是字段記錄中所命(2)、頭記錄以終止符(OxOD )結(jié)束,數(shù)據(jù)記錄以終止符(3)、表文件中存儲(chǔ)整數(shù)時(shí)低位字節(jié)在前。(4)、數(shù)據(jù)記錄從刪除標(biāo)記字節(jié)開始。如果刪除標(biāo)記字節(jié)為未被刪除,如果該字節(jié)為星號(hào)(0x2A),則表示該記錄被刪除。名的各字段的數(shù)據(jù)。(5)、數(shù)據(jù)記錄都是用 ASCII碼形式存放的,所以只要讀岀文件頭和字段類型描述區(qū)的內(nèi)容, 就可以直接讀取 dbf文件中的每條記錄。文件頭部結(jié)構(gòu)(32字節(jié))位置長度含義備注01文

7、件類型0x03,F(xiàn)oxBASE+/dBASE HI PLUS ,無備注1 - 33最近一次更新的時(shí)間( YYMMDD )4 - 74文件中的記錄數(shù)目8 - 92文件中的第一個(gè)數(shù)據(jù)記錄的位置10 - 112每個(gè)數(shù)據(jù)記錄的長度(包括刪除標(biāo)記)12 - 3120保留32 - n 字段子記錄字段的數(shù)目決定了字段子記錄的數(shù)目。字段記錄結(jié)構(gòu)(32字節(jié))位置長度說明備注0 - 1011字段名最多10個(gè)字符,若少于10則用空字符填11 1字段類型C-字符型Y-貨幣型N-數(shù)值型F-浮點(diǎn)型D-日期型T-日期時(shí)間型B-雙精度型I-整型L-邏輯型M-備注型G-通用型C-字符型(二進(jìn)制)M-備注型(二進(jìn)制)P-圖片型1

8、2 - 154記錄中該字段的偏移量(16進(jìn)制)16 1字段長度以字節(jié)為單位17 1小數(shù)位數(shù)以字節(jié)為單位18 -3114保留n+1頭記錄終止符(OxOD ),n+2到n+264此范圍內(nèi)的263個(gè)字節(jié)包含后鏈信息(相關(guān)數(shù)據(jù)庫(.dbc)的相對路徑)。如果第一個(gè)字節(jié)為0x00,則該文件不與數(shù)據(jù)庫關(guān)聯(lián)。因此數(shù)據(jù)庫文件本身總是包含0x00。數(shù)據(jù)記錄從除標(biāo)記字節(jié)開始。如果此字節(jié)為ASCII空格(0x20),該記錄沒有刪除標(biāo)記,如果第一字節(jié)為星號(hào)(0x2A),該記錄有刪除標(biāo)記。在標(biāo)記之后是字段記錄中所命名各字段中的數(shù)據(jù)F面是讀取這個(gè)dbf文件的代碼:void On ReadDbf(CStri ng Dbf)

9、FILE* m_Dbf;*Dbf文件指針I(yè)I打開dbf文件if(m_Dbf(Dbf,"rb")=NULL)return;int i,j;/* 讀取dbf文件的文件頭開始BYTE versio n;fread(&versio n,1,1,m_Dbf);BYTE date3;for(i=0;i<3;i+)1,1,m_Dbf);fread(date+i,fread(&RecordByteNum,sizeof(short), 1,m_Dbf);int RecordNum;fread(&RecordNum,short HeaderByteNum;/*si

10、zeof( in t),1,i_Dbf);fread(&HeaderByteNum,sizeof(short), 1,m_Dbf);short RecordByteNumshort Reservedl;1,m_Dbf);Dbf);_Dbf);m_Dbf);fread(&Reserved1,BYTE Flag4s; fread(&F lag4s,BYTE En crypteFlag; fread(&En crypteFlag,sizeof(short), 1,m_Dbf);sizeof(BYTE),sizeof(BYTE), 1,m_for(i=0;i<3;

11、i+)fread(&Unu sed,BYTE MDXFlag;fread(&MDXFIag,sizeof(BYTE), 1,mBYTE LDriID;fread(&LDrilD,short Reserved2;fread(&Reserved2,sizeof(short), 1,m_Dbf);BYTE n ame11;sizeof( in t),1,mi_Dbf);sizeof(BYTE), 1,BYTE fieldType;int Reserved3;BYTE fieldLength;BYTE decimalCou nt;short Reserved4;BYTE

12、 workID;short Reserved55;BYTE mDXFIag1;int fieldsco unt;fieldscount = (HeaderByteNum - 32) / 32;II讀取記錄項(xiàng)信息-共有8個(gè)記錄項(xiàng) for(i=0;i< HeaderByteNum;i+)bytes11, 1,m_Dbf);bytessizeof(BYTE), 1,m_Dbf);bytes=0;IIFieldName11 fread( name,IIFieldType1 fread( &fieldType, IIReserved34 Reserved3fread(&Reserv

13、ed3, sizeof(i nt),1,m_Dbf);IIFieldLe ngth-1bytesfread( &fieldLe ngth,sizeof(BYTE), 1,m_Dbf);IIDecimalCou nt-1bytesIIReserved42bytesfread(&decimalCou nt,sizeof(BYTE), 1,m_Dbf);Reserved4=0;fread(&Reserved4, sizeof(short),1,m_Dbf);/WorkID1bytes),1,m_Dbf);fread(&worklD,sizeof(BYTEReserve

14、d5-10bytesfor(j=0;j<5;j+)1,m_Dbf);fread(Reserved5+j,sizeof(short),MDXFIag1-1bytes1,m_Dbf);fread(&mDXFIag1,sizeof(BYTE),BYTE termi nator;fread(&termi nator,sizeof(BYTE), 1,m_Dbf);/讀取dbf文件頭結(jié)束double Area,Perimeter,Ce ntroid_y,Ce ntroid_x;int Soils_,Soils_id;CStri ng Soil_code,suit;BYTE delet

15、eFlag;char media31;/讀取dbf文件記錄 開始for(i=0;i<RecordNum;i+)fread(&deleteFlag,sizeof(BYTE), 1,m_Dbf);1,m_Dbf);1,m_Dbf);/ 讀取 Area doublefor(j=0;j<31;j+)fread(media+j, sizeof(char),1,m_Dbf);Area =atof(media);/ 讀取 Perimeter double for(j=0;j<31;j+)fread(media+j, sizeof(char),Perimeter =atof(medi

16、a);/ 讀取 soils_ intfor(j=0;j<31;j+)strcpy(media+j,"");for(j=0;j<11;j+)fread(media+j, sizeof(char),Soils_=atoi(media);/ 讀取 Soils_id intfor(j=0;j<31;j+)strcpy(media+j,"");for(j=0;j<11;j+)fread(media+j, sizeof(char),1,m_Dbf);Soils_id=atoi(media);/ 讀取 soil_code stringfor(j=0;j<31;j+)strcpy(media+j,"");for(j=0;j<3;j+)fread(media+j, sizeof(char),1,m_Dbf);Soil_code=media;/ 讀取 suit stringfor(j=0;j<31;j+)strcpy(media+j,"");for(j=0;j<1;j+)fread(media+j, sizeof(char),1,m_Dbf);suit =media;/ 讀取 Centroid_y doublefor(j=0;j<31;j

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論