字段大多,只好分开两个表。
图片附件: 游客没有浏览图片的权限,请
登录 或
注册
图片附件: 游客没有浏览图片的权限,请
登录 或
注册
CREATE CURSOR 字段定义表 (字段名 C(10), 类型 C(1), 偏移 I, 宽度 I, 小数位 I)
cDBF = FILETOSTR("B1.dbf")
n记录数 = CTOBIN(SUBSTR(cDBF,5,4),"RS4")
n头记录偏移量 = CTOBIN(SUBSTR(cDBF,9,2),"RS2")
n记录长度 = CTOBIN(SUBSTR(cDBF,11,2),"RS2")
i = 33
c字段定义 = SUBSTR(cDBF,i,32)
DO WHILE LEFT(c字段定义,1) != 0h0D
INSERT INTO 字段定义表 VALUES (;
LEFT(c字段定义,AT(0h00,c字段定义)-1),;
&&字段名
SUBSTR(c字段定义,12,1),;
&& 数据类型
CTOBIN(SUBSTR(c字段定义,13,4),"RS4"),;
&&记录中偏移量
CTOBIN(SUBSTR(c字段定义,17,1),"RS1"),;
&& 字段宽度
CTOBIN(SUBSTR(c字段定义,18,1),"RS1"))
&& 数字型、浮点型、双精度型字段的小数位
IF !INLIST(类型,"N","C")
REPLACE 类型 WITH "Q"
&& 原文件描述的_NullFlag字段类型是0(零)?,现作Q类型处理
ENDIF
i = i + 32
c字段定义 = SUBSTR(cDBF,i,32)
ENDDO
cB1_1 = ""
cB1_2 = ""
SCAN
cField = "," + TRIM(字段名) + " " + 类型 + "("+TRANSFORM(宽度) + IIF(小数位>0,","+TRANSFORM(小数位),"") + ")"
IF RECNO()<255
cB1_1 = cB1_1 + cField
ELSE
cB1_2 = cB1_2 + cField
ENDIF
ENDSCAN
IF !EMPTY(cB1_1)
cB1_1 = "CREATE TABLE B1_1 (" + SUBSTR(cB1_1,2) + ")"
EXECSCRIPT(cB1_1)
ENDIF
IF !EMPTY(cB1_2)
cB1_2 = "CREATE TABLE B1_2 (" + SUBSTR(cB1_2,2) + ")"
EXECSCRIPT(cB1_2)
ENDIF
SELECT 字段定义表
j = n头记录偏移量+1
FOR i=1 TO n记录数
c记录 = SUBSTR(cDBF, j, n记录长度)
IF EMPTY(c记录) OR LEN(c记录)<n记录长度
EXIT
ENDIF
APPEND BLANK IN "B1_1"
IF USED("B1_2")
APPEND BLANK IN "B1_2"
ENDIF
SCAN
v = SUBSTR(c记录, 偏移+1, 宽度)
v = IIF(类型=="N", VAL(v), ALLTRIM(v))
c字段名 = TRIM(字段名)
IF RECNO()<255
REPLACE (c字段名) WITH v IN "B1_1"
ELSE
REPLACE (c字段名) WITH v IN "B1_2"
ENDIF
ENDSCAN
j = j + n记录长度
ENDFOR
SELECT B1_1
BROWSE
SELECT B1_2
BROWSE
CLOSE DATABASES ALL