| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1872 人关注过本帖
标题:如何实现打开指定文件夹中文件并合并?
只看楼主 加入收藏
nbwww
Rank: 8Rank: 8
等 级:贵宾
威 望:11
帖 子:333
专家分:810
注 册:2021-1-9
收藏
得分:0 
以下是引用吹水佬在2022-7-13 15:16:53的发言:


简单示例

cDefPath = ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (cDefPath)

CREATE TABLE dbf1 (f1 c(11), f2 I, f3 n(9,2))
INSERT INTO dbf1 VALUES ("aa", 1, 1.12)
INSERT INTO dbf1 VALUES ("bb", 2, 2.23)
USE
CREATE TABLE dbf2 (f1 c(11), f2 I, f3 n(9,2))
INSERT INTO dbf2 VALUES ("cc", 3, 3.34)
INSERT INTO dbf2 VALUES ("dd", 4, 4.45)
INSERT INTO dbf2 VALUES ("ee", 5, 5.56)
USE
dbf1 = FILETOSTR("dbf1.dbf")
dbf2 = FILETOSTR("dbf2.dbf")
nDataOffset = CTOBIN(SUBSTR(dbf1,9,2),"2rs") + 1       && 数据块偏移量
nRecords = CTOBIN(SUBSTR(dbf1,5,4),"4rs")              && dbf 记录数
nRecords = nRecords + CTOBIN(SUBSTR(dbf2,5,4),"4rs")   && 合并表记录数
dbf = STUFF(dbf1,5,4,BINTOC(nRecords,"4rs"))           && 取最前的表,修改记录数
dbf = LEFT(dbf,LEN(dbf)-1)                             && 前面的表去除文件结束标志
dbf = dbf + SUBSTR(dbf2,nDataOffset)                   && 追加最后的表(保留文件结束标志)
STRTOFILE(dbf,"dbf.dbf")                               && 保存合并的表
SELECT * FROM dbf
CLOSE TABLES ALL
DELETE FILE dbf.dbf
DELETE FILE dbf1.dbf
DELETE FILE dbf2.dbf

2022-07-14 06:36
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10608
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 9楼 吹水佬
这种方法稍为修改一下就可以用来修复损坏的DBF表
2022-07-14 07:51
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
没搞过,还能有这个作用的阿
2022-07-14 08:28
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
回复 6楼 mywisdom88
肯定不行,因为DBF文件前部是文件头,包含了字段的定义等内容,简单的合并则不会自动剔除第二个DBF文件的文件头部分。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2022-07-14 08:36
sostemp
Rank: 4
等 级:贵宾
威 望:10
帖 子:202
专家分:284
注 册:2009-6-2
收藏
得分:0 
2022-07-14 09:26
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10608
专家分:43186
注 册:2014-5-20
收藏(1)
得分:0 
以下是引用mywisdom88在2022-7-14 08:28:23的发言:

没搞过,还能有这个作用的阿

程序代码:

CREATE TABLE dbf (f1 c(11), f2 I, f3 n(9,2))
INSERT INTO dbf VALUES ("cc", 3, 3.34)
INSERT INTO dbf VALUES ("dd", 4, 4.45)
INSERT INTO dbf VALUES ("ee", 5, 5.56)
USE
dbf = FILETOSTR("dbf.dbf")
dbf = LEFT(dbf,LEN(dbf)-10) && 模拟存盘不正常
STRTOFILE(dbf,"dbf.dbf")    
SELECT * FROM dbf           && 抛出异常,按“忽略”继续修复                                
nDataOffset = CTOBIN(SUBSTR(dbf, 9,2),"2rs")                && 数据块偏移量
nRecordSize = CTOBIN(SUBSTR(dbf,11,2),"2rs")                && 记录长度
**nRecords    = INT((LEN(dbf)-nDataOffset)/nRecordSize)       && 有效记录数据
nRecords    = CEILING((LEN(dbf)-nDataOffset)/nRecordSize)   && 尽可能多的数据
dbf = PADR(dbf, nDataOffset+nRecordSize*nRecords, 0h00)
dbf = STUFF(dbf,5,4,BINTOC(nRecords,"4rs")) + 0h1A          && 修改记录数和添加文件结束标志
STRTOFILE(dbf,"dbf.dbf")
SELECT * FROM dbf
2022-07-14 09:31
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1740
专家分:3329
注 册:2012-2-29
收藏
得分:0 
回复 16楼 吹水佬
威武!
2022-07-14 11:46
bdx808
Rank: 1
等 级:新手上路
帖 子:85
专家分:2
注 册:2009-5-9
收藏
得分:0 
谢谢!学习了
2022-07-14 17:17
快速回复:如何实现打开指定文件夹中文件并合并?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034022 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved