好的,不急,谢谢
CLOSE DATABASES ALL SET SAFETY OFF && 关闭文件删除和覆盖提示 SET DECIMALS TO 4 && 设置浮点数显示小数点后4位 CLEAR Import_Table("53.TXT", "Table_53") RETURN *----------------------- * 功能:从外部文本文件生成VFP表数据 * 参数:tcDataFileName -- 文本文件名(可带路径) * tcTableName -- 生成的数据表文件名 * 返回:操作成功为.T.,否则为.F. *----------------------- FUNCTION Import_Table(tcDataFileName, tcTableName) LOCAL lnHandle, lnLine, lcFieldName, lnIndex LOCAL lnFields, lnRecords LOCAL llSuccess OPEN DATABASE DATA1 EXCLUSIVE && 打开数据库 SET DATABASE TO DATA1 USE Dictionary EXCLUSIVE IN 0 && 打开数据字典 * 用低级文件模式打开文本文件 lnHandle = FOPEN(tcDataFileName) IF lnHandle < 0 MESSAGEBOX("数据文件" + tcDataFileName + "打开失败!", 16) RETURN .F. ENDIF * 跳过前面9行 FOR lnLine = 1 TO 9 FGETS(lnHandle) NEXT * 获取字段数 lnFields = INT(VAL(FGETS(lnHandle))) llSuccess = .T. * 创建数据表结构 LOCAL laFields[lnFields,18] && 建立数据表结构数组,行数为刚才读得的字段数,列数为结构规定的18列 FOR lnLine = 1 TO lnFields && 依次读入字段名并查找数据字典设置每个字段的结构 lcFieldName = ALLTRIM(FGETS(lnHandle)) SELECT Dictionary LOCATE ALL FOR ALLTRIM(Dictionary.Field_Name) == lcFieldName IF !FOUND() MESSAGEBOX("发现数据字典中没有的字段:" + lcFieldName, 16) llSuccess = .F. EXIT ENDIF * 将数据字典中该字段的信息复制到结构数组对应行 FOR lnIndex = 1 TO ALEN(laFields,2) laFields[lnLine,lnIndex] = EVALUATE(FIELD(lnIndex, "Dictionary")) NEXT NEXT USE IN Dictionary && 因为所需的数据结构已抄到数组中,现在不需要数据字典了 IF llSuccess IF INDBC(tcTableName, "TABLE") * 如果目标数据表已存在于数据库中,则先移除之 REMOVE TABLE (tcTableName) ENDIF * 生成数据空表 CREATE TABLE (tcTableName) NAME (tcTableName) FROM ARRAY laFields * 导入数据 lnRecords = INT(VAL(FGETS(lnHandle))) && 获取记录数 FOR lnLine = 1 TO lnRecords && 依次读入每条记录 SELECT (tcTableName) APPEND BLANK FOR lnIndex = 1 TO lnFields && 依次读入每个字段 LOCAL lcBuffer * 字段结构数组的使用法: * 第1列为字段名 * 第2列为字段类型 * 第3列为字段宽度 * 第4列为浮点型字段的小数位数 lcBuffer = FREAD(lnHandle, laFields[lnIndex,3]) DO CASE CASE laFields[lnIndex,2] == "C" REPLACE (laFields[lnIndex,1]) WITH lcBuffer CASE laFields[lnIndex,2] == "N" REPLACE (laFields[lnIndex,1]) WITH StringToNumeric(lcBuffer, laFields[lnIndex,3], laFields[lnIndex, 4]) ENDCASE NEXT FGETS(lnHandle) NEXT ENDIF * 关闭低级文件句柄 FCLOSE(lnHandle) * 关闭打开的数据库 SET DATABASE TO DATA1 CLOSE DATABASES * 返回操作结果 RETURN llSuccess ENDFUNC *------------------------ * 功能:将字符串转换为浮点数 *------------------------ FUNCTION StringToNumeric(tcString, tnLen, tnDec) RETURN VAL(LEFT(tcString, tnLen - tnDec - 1) + "." + RIGHT(tcString, tnDec)) ENDFUNC