版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、.標準的DBF文件,是由頭文件和實體信息兩部分構成(如圖所示)。文件頭記錄1記錄2記錄3記錄4記錄nDBF文件的結構1)文件的文件頭其中文件頭部分的長度是不定長的,它主要對DBF文件作了一些總體說明(表),其中最主要的是對這個DBF文件的記錄項的信息進行了詳細地描述,比如對每個記錄項的名稱、數(shù)據(jù)類型、長度等信息都有具體的說明。在文件中的位置內(nèi)容說明01個字節(jié)表示當前的版本信息133個字節(jié)表示最近的更新日期,按照YYMMDD格式。471個32位數(shù)文件中的記錄條數(shù)。891個16位數(shù)文件頭中的字節(jié)數(shù)。10111個16位數(shù)一條記錄中的字節(jié)長度。12132個字節(jié)保留字節(jié),用于以后添加新的說明性信息時使用
2、,這里用0來填寫。141個字節(jié)表示未完成的操作。 151個字節(jié)dBASE IV編密碼標記。162712個字節(jié)保留字節(jié),用于多用戶處理時使用。281個字節(jié)DBF文件的MDX標識。在創(chuàng)建一個DBF 表時 ,如果使用了MDX 格式的索引文件,那么 DBF 表的表頭中的這個字節(jié)就自動被設置了一個標志,當你下次試圖重新打開這個DBF表的時候,數(shù)據(jù)引擎會自動識別這個標志,如果此標志為真,則數(shù)據(jù)引擎將試圖打開相應的MDX 文件。291個字節(jié)Language driver ID.30312個字節(jié)保留字節(jié),用于以后添加新的說明性信息時使用,這里用0來填寫。32X(n*32)個字節(jié)記錄項信息描述數(shù)組。n表示記錄項
3、的個數(shù)。這個數(shù)組的結構在表2.8中有詳細的解釋。X11個字節(jié)作為記錄項終止標識。文件(.dbf)的文件頭位置內(nèi)容說明01011個字節(jié)記錄項名稱,是ASCII碼值。111個字節(jié)記錄項的數(shù)據(jù)類型,是ASCII碼值。(B、C、D、G、L、M和N,具體的解釋見表2.9)。12154個字節(jié)記錄中該字段的偏移量。161個字節(jié)記錄項長度,二進制型。171個字節(jié)記錄項的精度,二進制型。201個字節(jié)工作區(qū)ID。213010個字節(jié)保留字節(jié),用于以后添加新的說明性信息時使用,這里用0來填寫。311個字節(jié)MDX標識。如果存在一個MDX 格式的索引文件,那么這個記錄項為真,否則為空。 記錄項信息描述代碼數(shù)據(jù)類型允許輸入
4、的數(shù)據(jù)B二進制型 雙精度型?各種字符。C字符型各種字符。D日期型用于區(qū)分年、月、日的數(shù)字和一個字符,內(nèi)部存儲按照YYYYMMDD格式。G(Generalor OLE) 通用類型各種字符。N數(shù)值型(Numeric)- . 0 1 2 3 4 5 6 7 8 9 L邏輯型(Logical)? Y y N n T t F f (? 表示沒有初始化)。 M(Memo)各種字符。Y貨幣型F浮點型I整形P圖片表2.9 dbf文件中的數(shù)據(jù)類型2) 文件的實體信息實體信息部分就是一條條記錄,每條記錄都是由若干個記錄項構成,因此只要依次循環(huán)讀取每條記錄就可以了。3) 一個讀取dbf文件的例子假設要讀取一個名為s
5、oil的dbf文件(存儲了土地利用信息),它含有8個記錄項,記錄項信息如表所示:記錄項名稱數(shù)據(jù)類型長度小數(shù)位數(shù)Area 數(shù)值型(double)3115Perimeter數(shù)值型(double)3115soils_數(shù)值型(int)110soils_id數(shù)值型(int)110soil_code字符型(character)3無Suit字符型(character)1無Centroid_x數(shù)值型(double)3115Centroid_y數(shù)值型(double)3115 dbf文件中的數(shù)據(jù)類型2、行情文件格式說明:(1)、表文件由頭記錄及數(shù)據(jù)記錄組成。頭記錄定義該表的結構及與表相關的其他信息。數(shù)據(jù)記錄緊接在
6、頭記錄之后,包含字段中實際的文本。記錄的長度等于所有字段定義的長度之和(以字節(jié)為單位)。(2)、頭記錄以終止符(0x0D)結束,數(shù)據(jù)記錄以終止符(0x1A)結束。(3)、表文件中存儲整數(shù)時低位字節(jié)在前。(4)、數(shù)據(jù)記錄從刪除標記字節(jié)開始。如果刪除標記字節(jié)為ASCII空格(0x20),則表示該記錄未被刪除,如果該字節(jié)為星號(0x2A),則表示該記錄被刪除。在刪除標記之后是字段記錄中所命名的各字段的數(shù)據(jù)。(5)、數(shù)據(jù)記錄都是用ASCII碼形式存放的,所以只要讀出文件頭和字段類型描述區(qū)的內(nèi)容,就可以直接讀取dbf文件中的每條記錄。文件頭部結構(32字節(jié))位置長度含義備注01文件類型0x03,F(xiàn)oxB
7、ASE+/dBASE III PLUS,無備注0x02 FoxBASE0x03 FoxBASE+/dBASE III PLUS,無備注0x30 Visual FoxPro0x43 dBASE IV SQL 表文件,無備注0x63 dBASE IV SQL 系統(tǒng)文件,無備注0x83 FoxBASE+/dBASE III PLUS,有備注0x8B dBASE IV 有備注0xCB dBASE IV SQL 表文件,有備注0xF5 FoxPro 2.x(或更早版本)有備注0xFB FoxBASE1 - 33最近一次更新的時間(YYMMDD)4 - 74文件中的記錄數(shù)目8 - 92文件中的第一個數(shù)據(jù)記
8、錄的位置10 - 112每個數(shù)據(jù)記錄的長度(包括刪除標記)12 - 3120保留28:0x01 具有 .cdx 結構的文件0x02 文件包含備注。0x04 文件是數(shù)據(jù)庫(.dbc)29代碼頁標記32 - n字段子記錄字段的數(shù)目決定了字段子記錄的數(shù)目。字段記錄結構(32字節(jié))位置長度說明備注0 - 1011字段名最多10個字符,若少于10則用空字符填充111字段類型C-字符型Y-貨幣型N-數(shù)值型F-浮點型D-日期型T-日期時間型B-雙精度型I-整型L-邏輯型M-備注型G-通用型C-字符型(二進制)M-備注型(二進制)P-圖片型12 - 154記錄中該字段的偏移量(16進制)161字段長度以字節(jié)為
9、單位171小數(shù)位數(shù)以字節(jié)為單位18 - 3114保留n+1 頭記錄終止符(0x0D),n+2 到 n+264 此范圍內(nèi)的 263 個字節(jié)包含后鏈信息(相關數(shù)據(jù)庫 (.dbc) 的相對路徑)。如果第一個字節(jié)為 0x00,則該文件不與數(shù)據(jù)庫關聯(lián)。因此數(shù)據(jù)庫文件本身總是包含 0x00。數(shù)據(jù)記錄從 除標記字節(jié)開始。如果此字節(jié)為 ASCII 空格 (0x20),該記錄沒有刪除標記, 如果第一字節(jié)為星號 (0x2A),該記錄有刪除標記。在標記之后是字段記錄中所命名各字段中的數(shù)據(jù)下面是讀取這個dbf文件的代碼:void OnReadDbf(CString DbfFileName) FILE* m_DbfFi
10、le_fp; /*Dbf文件指針 /打開dbf文件 if(m_DbfFile_fp=fopen(DbfFileName,rb)=NULL) return; int i,j; /*讀取dbf文件的文件頭 開始 BYTE version; fread(&version, 1, 1,m_DbfFile_fp); BYTE date3; for(i=0;i3;i+) fread(date+i, 1, 1,m_DbfFile_fp); int RecordNum; /* fread(&RecordNum, sizeof(int), 1,m_DbfFile_fp); short HeaderByteNum
11、; fread(&HeaderByteNum, sizeof(short), 1,m_DbfFile_fp); short RecordByteNum fread(&RecordByteNum, sizeof(short), 1,m_DbfFile_fp); short Reserved1; fread(&Reserved1, sizeof(short), 1,m_DbfFile_fp); BYTE Flag4s; fread(&Flag4s, sizeof(BYTE), 1,m_DbfFile_fp); BYTE EncrypteFlag; fread(&EncrypteFlag, size
12、of(BYTE), 1,m_DbfFile_fp); for(i=0;i3;i+) fread(&Unused, sizeof(int), 1,m_DbfFile_fp); BYTE MDXFlag; fread(&MDXFlag, sizeof(BYTE), 1,m_DbfFile_fp); BYTE LDriID; fread(&LDriID, sizeof(BYTE), 1,m_DbfFile_fp); short Reserved2; fread(&Reserved2, sizeof(short), 1,m_DbfFile_fp); BYTE name11; BYTE fieldTyp
13、e; int Reserved3; BYTE fieldLength; BYTE decimalCount; short Reserved4; BYTE workID; short Reserved55; BYTE mDXFlag1; int fieldscount; fieldscount = (HeaderByteNum - 32) / 32; /讀取記錄項信息共有8個記錄項 for(i=0;i HeaderByteNum;i+) /FieldName-11 bytes fread(name, 11, 1,m_DbfFile_fp); /FieldType-1 bytes fread(&f
14、ieldType, sizeof(BYTE), 1,m_DbfFile_fp); /Reserved3-4 bytes Reserved3 =0; fread(&Reserved3, sizeof(int), 1,m_DbfFile_fp); /FieldLength-1 bytes fread(&fieldLength,sizeof(BYTE), 1,m_DbfFile_fp); /DecimalCount-1 bytes fread(&decimalCount,sizeof(BYTE), 1,m_DbfFile_fp); /Reserved4-2 bytes Reserved4 =0; f
15、read(&Reserved4, sizeof(short), 1,m_DbfFile_fp); /WorkID-1 bytes fread(&workID, sizeof(BYTE), 1,m_DbfFile_fp); /Reserved5-10 bytes for(j=0;j5;j+) fread(Reserved5+j,sizeof(short), 1,m_DbfFile_fp); /MDXFlag1-1 bytes fread(&mDXFlag1, sizeof(BYTE), 1,m_DbfFile_fp); BYTE terminator; fread(&terminator, si
16、zeof(BYTE), 1,m_DbfFile_fp); /讀取dbf文件頭結束 double Area,Perimeter,Centroid_y,Centroid_x; int Soils_,Soils_id; CString Soil_code,suit; BYTE deleteFlag; char media31; /讀取dbf文件記錄 開始 for(i=0;iRecordNum;i+) fread(&deleteFlag, sizeof(BYTE), 1,m_DbfFile_fp); /讀取 Area double for(j=0;j31;j+) fread(media+j, size
17、of(char), 1,m_DbfFile_fp); Area =atof(media); /讀取 Perimeter double for(j=0;j31;j+) fread(media+j, sizeof(char), 1,m_DbfFile_fp); Perimeter =atof(media); /讀取 soils_ int for(j=0;j31;j+) strcpy(media+j,); for(j=0;j11;j+) fread(media+j, sizeof(char), 1,m_DbfFile_fp); Soils_ =atoi(media); /讀取 Soils_id in
18、t for(j=0;j31;j+) strcpy(media+j,); for(j=0;j11;j+) fread(media+j, sizeof(char), 1,m_DbfFile_fp); Soils_id =atoi(media); /讀取 soil_code string for(j=0;j31;j+) strcpy(media+j,); for(j=0;j3;j+) fread(media+j, sizeof(char), 1,m_DbfFile_fp); Soil_code =media; /讀取 suit string for(j=0;j31;j+) strcpy(media+j,); for(j=0;j1;j+) fread(media+j, sizeof(char), 1,m_DbfFile_fp); suit =media; /讀取 Centroid
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 非接觸性標測系統(tǒng)引導下的房顫射頻消融術
- 2025年苯噻草胺合作協(xié)議書
- 全日制研究生定向培養(yǎng)協(xié)議書(2篇)
- 管理體系工作參考計劃范文5篇
- 攤位租賃市場租賃協(xié)議
- 旅游接待用車租賃合同
- 財產(chǎn)租賃合同樣書
- 2025年機械自動采樣設備項目發(fā)展計劃
- 八年級語文上冊第五單元寫作說明事物要抓住特征教案新人教版1
- 2024年玉米種植、收購、加工一體化服務合同3篇
- 澳大利亞HIH保險公司破產(chǎn)案例
- 三級配電箱巡檢記錄
- 《全國統(tǒng)一安裝工程預算定額》工程量計算規(guī)則
- 試論plié的力量特征及其在芭蕾舞技術技巧中的運用
- 政府采購評審專家考試題庫與答案(完整版)
- 國內(nèi)省及地市級名稱及郵編
- 2023年上海市旅行社責任保險統(tǒng)保保險方案
- 2023-2024學年山東省威海市小學數(shù)學三年級下冊期末評估試卷
- GB/T 1096-2003普通型平鍵
- 新版2023設計收費標準
- GA/T 798-2008排油煙氣防火止回閥
評論
0/150
提交評論