| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3550 人关注过本帖
标题:文件名可以用变量代替么
只看楼主 加入收藏
dhy793202
Rank: 1
等 级:新手上路
帖 子:29
专家分:4
注 册:2013-3-17
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:12 
文件名可以用变量代替么
一直都只学习过单表的简单命令,近期需要从许多个DBF库中按条件抽取一些数据,比如A01.DBF、A02.DBF、A03.DBF、A04.DBF,这样比较规则的文件序列,这块前面的A0可以用变量替代么?


追问:
上面那个我基本能解决了,
temp2='F2012'
FOR i=1 to 12
  IF i<10
  WD=temp2-alltrim(str(0))-alltrim(str(i))
  else
  WD=temp2-alltrim(str(i))
  endif
  ?WD
endfor

现在是想问这个变量WD能直接作为路径么,比如我在G盘下有个F201201到F201212一共12个文档,我要依次打开,能否这样用:
temp2='F2012'
FOR i=1 to 12
  IF i<10
  WD=temp2-alltrim(str(0))-alltrim(str(i))
  else
  WD=temp2-alltrim(str(i))
  endif
  USE G:\WD.DBF
endfor

继续追问:现在是WD这个文档下的某些条件的数据需要拷贝出来,也是要分别拷贝出12个小库,我又加了一个变量FL,但是在SELECT命令中的INTO TABLE时跳出来错误“不能识别的谓语命令”
temp1='O3'
temp2='F2012'
FOR i=1 to 12
  FL=temp1+'-'-alltrim(str(i))
    IF i<10
     WD=temp2-alltrim(str(0))-alltrim(str(i))
    else
     WD=temp2-alltrim(str(i))
    endif
  USE G:\&WD..DBF
  SELECT *;
  FROM &WD.;
  WHERE 'O3'$&WD..分类
  INTO TABLE G:\&FL..DBF
  USE
  USE
endfor

呃,结贴,我以上我自己忘记打分号了

[ 本帖最后由 dhy793202 于 2013-6-4 11:29 编辑 ]
搜索更多相关主题的帖子: 老公 
2013-06-04 00:31
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:5 
qz="AO"
FOR i=1 TO 4
?qz+ALLTRIM(STR(i))
endf
2013-06-04 01:18
dhy793202
Rank: 1
等 级:新手上路
帖 子:29
专家分:4
注 册:2013-3-17
收藏
得分:0 
多谢版主,大半夜还不睡觉
2013-06-04 01:24
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用tlliqi在2013-6-4 01:18:03的发言:

qz="AO"
FOR i=1 TO 4
?qz+ALLTRIM(STR(i))
endf

STR(I)是不是应该改为STR(I,1)?否则,该函数默认是10位宽度输出,拼接起来会变成“A0         1”酱紫。
2013-06-04 08:26
dhy793202
Rank: 1
等 级:新手上路
帖 子:29
专家分:4
注 册:2013-3-17
收藏
得分:0 
ALLTRIM已经是去除了空格吧?
2013-06-04 08:38
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
收藏
得分:0 
可以直接使用Transform函数
?Transform(i)

个性太多,无法显示
2013-06-04 08:41
dhy793202
Rank: 1
等 级:新手上路
帖 子:29
专家分:4
注 册:2013-3-17
收藏
得分:0 
呃,试验过,以上确实会出现4楼兄弟说的情况
2013-06-04 08:46
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用dhy793202在2013-6-4 08:38:15的发言:

ALLTRIM已经是去除了空格吧?
是这样的:如果数值位数是固定的,比如本案例固定1位,就在STR()函数中指定,也少套一个函数,减少代码复杂度;如果数值位数不固定,比如A01-A099,甚至更多,用2楼的方法就很好,省得STR()函数中再套IIF()函数去判断了。
2013-06-04 09:51
dhy793202
Rank: 1
等 级:新手上路
帖 子:29
专家分:4
注 册:2013-3-17
收藏
得分:0 
回复 8楼 taifu945
再给看看新问题,路径能不能做变量?
2013-06-04 09:54
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:15 
以下是引用dhy793202在2013-6-4 00:31:40的发言:

一直都只学习过单表的简单命令,近期需要从许多个DBF库中按条件抽取一些数据,比如A01.DBF、A02.DBF、A03.DBF、A04.DBF,这样比较规则的文件序列,这块前面的A0可以用变量替代么?
 
 
追问:
上面那个我基本能解决了,
temp2='F2012'
FOR i=1 to 12
  IF i<10
  WD=temp2-alltrim(str(0))-alltrim(str(i))
  else
  WD=temp2-alltrim(str(i))
  endif
  ?WD
endfor  
 
现在是想问这个变量WD能直接作为路径么,比如我在G盘下有个F201201到F201212一共12个文档,我要依次打开,能否这样用:
temp2='F2012'
FOR i=1 to 12
  IF i<10
  WD=temp2-alltrim(str(0))-alltrim(str(i))
  else
  WD=temp2-alltrim(str(i))
  endif
  USE G:\WD.DBF
endfor
红色代码改成:USE G:\&WD..DBF IN 0。注意:&WD后面有两个圆点。第一个圆点表示宏代换变量名的结束,第二个圆点才是主干名和后缀名的分隔符。加“IN 0”子句是为了把各个表文件分别打开在不同的数据区中,不加的话,所有表文件在同一个区打开,结果就是只有最后一个表文件打开了,其它都没打开。你还可以把整个文件路径都写在一个变量中,然后用名表达式打开,名表达式比宏代换速度快得多。比如:文件=[c:\rr\foxpro\t1.dbf],再用USE (文件)命令就可以打开了。名表达式用的地方很多,比如:REPLACE命令中的字段名部分就可以用名表达式,但SQL命令好象不能用(比如UPDATE-SQL)。我猜测SQL可能是从其它数据库系统移植过来的,而名表达式是VFP自己的东西,所以不配套。
2013-06-04 10:07
快速回复:文件名可以用变量代替么
数据加载中...
 
   



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

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