标题:如何实现打开指定文件夹中文件并合并?
只看楼主
杂七杂八
Rank: 1
等 级:新手上路
帖 子:217
专家分:7
注 册:2018-2-20
结帖率:96%
已结贴  问题点数:20 回复次数:17 
如何实现打开指定文件夹中文件并合并?
程序代码:
cPath=Sys(5)+Sys(2003)+"\ABC\"

lnFiles=Adir(aFile,cPath+"kqb^*.dbf" ) 

 
  Use aFile(1,1)  &&&&???
       
  Copy Structure To AAA           &&&另存在ABC文件夹中
  Use AAA                          
  For lnI=1 To lnFiles               
      lcStr=(aFile(lnI,1))     
    Append From '&lcStr.'        &&&合并后的文件在ABC文件夹中
  ENDFOR
  [local]1[/local]

请问如何修改命令,才能实现目的。
谢谢!
搜索更多相关主题的帖子: 合并 指定文件 文件 打开 ABC 
2022-07-12 19:55
杂七杂八
Rank: 1
等 级:新手上路
帖 子:217
专家分:7
注 册:2018-2-20
得分:0 
A123.rar (1.05 KB)

这是附件
2022-07-12 19:56
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:20 
试试用括号将文件名括起来,如:
Use (aFile(1,1))
Append From (lcStr)
2022-07-12 22:00
杂七杂八
Rank: 1
等 级:新手上路
帖 子:217
专家分:7
注 册:2018-2-20
得分:0 
回复 3楼 吹水佬


 我用VFP6.0

[此贴子已经被作者于2022-7-13 05:20编辑过]

2022-07-13 05:18
杂七杂八
Rank: 1
等 级:新手上路
帖 子:217
专家分:7
注 册:2018-2-20
得分:0 
程序代码:
***在一个名为A123文件夹里有个程序打开文件程序PP.prg

cPath=Sys(5)+Sys(2003)+"\ABC\"

lnFiles=Adir(aFile,cPath+"kqb^*.dbf" ) 

 
  *Use aFile(1,1)  &&&&???
  Use (cPath+aFile(1,1))  
       
  Copy Structure To ABC\AAA           &&&另存在ABC文件夹中
  Use ABC\AAA                          
  For lnI=1 To lnFiles               
      lcStr=(aFile(lnI,1))     
    Append From '&cPath&lcStr.'        &&&合并后的文件在ABC文件夹中
  
  ENDFOR
  
  BROW

搞了一个早上,这样能达到目的,命令语句还能优化吗?
2022-07-13 06:33
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
以前DOS的时候,可以用 copy a1.txt + a2.txt 这样合拼多个txt文件的,不知道DBF,能否利用这样。。。
2022-07-13 08:40
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用mywisdom88在2022-7-13 08:40:52的发言:

以前DOS的时候,可以用 copy a1.txt + a2.txt 这样合拼多个txt文件的,不知道DBF,能否利用这样。。。

dos copy 是低级文件函数操作,相当于VFP用 FREAD()、FWRITE()等。
VFP也可以用低级文件函数来处理相同结构的DBF:文件头块 + 数据块DBF1 +  数据块DBF2 + ......,最后要修改文件头块中的记录数值。
2022-07-13 09:23
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
以下是引用吹水佬在2022-7-13 09:23:04的发言:


dos copy 是低级文件函数操作,相当于VFP用 FREAD()、FWRITE()等。
VFP也可以用低级文件函数来处理相同结构的DBF:文件头块 + 数据块DBF1 +  数据块DBF2 + ......,最后要修改文件头块中的记录数值。

吹斑竹,搞个函数出来玩玩。。。
2022-07-13 12:38
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用mywisdom88在2022-7-13 12:38:48的发言:


吹斑竹,搞个函数出来玩玩。。。

简单示例
程序代码:
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-13 15:16
schtg
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1355
专家分:2534
注 册:2012-2-29
得分:0 
谢谢吹版!
2022-07-14 06:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-509548-1-1.html




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

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