| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 959 人关注过本帖
标题:&的一些疑惑
取消只看楼主 加入收藏
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
结帖率:79.38%
收藏
已结贴  问题点数:20 回复次数:7 
&的一些疑惑
一数据库的字段变量如kc_ls,kc_dl,kc_wy...... 一共有9个,写了以下代码,虽是成功的,但对&的用法不是很理介
lcs="_yw,_sx,_yy,_zz,_ls,_dl,_wl,_hx,_sw,_js"

nrow=Alines(cstr,Strtran(lcs,",",Chr(13)+Chr(10)))
for i=1 to nrow
select kc&cstr(i) as kch from xkkskwsj.dbf where kc&cstr(i)<>'  'into table cstr(i)
 endfor
 kc_ls,kc_dl均为字段变量,为什么kc与cstr(i)间用了&变成了字段变量?
搜索更多相关主题的帖子: 数据库 
2015-11-23 21:28
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
以下是引用吹水佬在2015-11-23 21:48:25的发言:

能不用&(宏替换)吗?
nrow=Alines(cstr,Strtran(lcs,",",Chr(13)+Chr(10)))
这句可以:
nrow=Alines(cstr,lcs,",")
我所表达的意思 KC&CSTR(i)中&的作用?
2015-11-24 09:15
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
以下是引用吹水佬在2015-11-24 09:46:08的发言:

 
CSTR(1)=="_yw", KC&CSTR(1)就相当于表达式 KC_yw, 这样理解&的作用够形象具体吧?
这里的&起到何作用?&cstr(i)中的宏替换了什么?宏的概念不是替换字符型变量的值吗?
一般常见的例如字段函数fields()我要逐个取出表中的各字段名
for i=1 to fcount()
a=fields(i)   &&常见的表达形式,然后再用&a
repl &a with .....
--------------------------------------
&&常见的表达形式,然后再用&a 把字符型变量a的值替换出来
a=fields(i)  
命令词   &a  
现在 这种表达式 kc&cstr(i)怎么变成了 kc_yw?,变量+变量的值-->新的变量?
2015-11-24 10:22
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
以下是引用tlliqi在2015-11-24 10:11:26的发言:

属于
属于是什么意思?
2015-11-24 10:22
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
以下是引用吹水佬在2015-11-24 10:31:12的发言:

个人理解,&就是将一个字符串变成一个表达式(或表达式的一部份),关键是怎样去理解这个表达式,这样理解对否?
关键是怎样去理解这个表达式,这是关键说来说去如何去理介?难点是如何来理介呢?我要求的就是如何去理介?
2015-11-24 11:22
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
以下是引用taifu945在2015-11-25 08:38:54的发言:

楼主想多了。&是一个很简单的东西,它的作用就是仅仅把后面跟随的字符型变量中的内容原样替换出来而已,且仅此而已。至于替换出来能不能用,是程序猿自己要事先做的功课。下面举几个栗子:

 1、AB="1";?&AB+1 → 得到的结果为:2。
    分析:根据&仅仅起到把字符型变量中的内容原样替换出来的原理,“?&AB+1”相当于“?1+1”,所以结果等于2。

 2、AB(1)="1";?"AB&AB(1)" → 得到的结果为:AB1
    分析:结果中的“AB”是“AB&AB(1)”中&前的那个“AB”,而后面的“1”就是AB(1)被替换出来的结果。所以,连在一起输出就是“AB1”。

 3、接续栗子2:把 ?"AB&AB(1)" 改成 ?AB&AB(1),会得到一个出错信息:找不到变量‘AB1’。
    分析:栗子2中已经说到“AB&AB(1)”经过计算后,会得到“AB1”的结果。那为何栗子2可以输出这个结果,而到了这里却出错了呢?请注意:栗子2输出命令中是把AB&AB(1)放在一对双引号里的,也就是说,那条命令中的 AB&AB(1) 其实是一个字符串常量;而这个栗子中的AB&AB(1)没有套上双引号,因此会被当作变量对待。由于事先没有定义过AB1这个变量,也没有用任何赋值语句给这个变量赋过值,VFP就没有在内存中建立这个变量。此时,突然之间要输出这个变量的值,当然就会出错。

 4、接续栗子3:加一条命令 AB1=5,那么,?AB&AB(1) 就会得到结果:5。
    根据栗子3的分析,这个栗子中的结果不会有什么难以理解的地方了吧?

 5、再来个猛的,在日常编程中很可能会碰到。
    比如,有一个订单表要作统计,假设其中有三个字段:客户名称 V(50),订单编号 V(20),下单日期 D。需要按两种方式统计订单数(在操作窗口中选择):(1)每个客户的总订单数,也就是不分下单时段的订单总数;(2)每个客户在指定下单时段内的总订单数,需要设置日期的。
   IF 统计时间 THEN &&“统计时间”变量根据操作窗口中的勾选设定
      日期1="{^"+DTOC(起始日期)+"}"
      日期2="{^"+DTOC(终止日期)+"}"
      条件="下单日期 BETWEEN "+日期1+" AND "+日期2
   ELSE
      条件=".T."
   ENDIF
   SELECT 客户名称,COUNT(DISTINCT 订单编号) 订单数 ;
      FROM 订单表;
      WHERE &条件;
      GROUP BY 客户名称;
      INTO CURSOR T7
    分析:因为查询语句中的条件不是固定的,但整个查询的结构又一致,所以用IF...ELSE...ENDIF的分支语句配合宏替换来解决是比较方便的,不要分成两条或更多条的查询语句了。这样一来,代码看上去也比较简洁。这里的关键是那个红色的 条件=".T." 那句。为什么要加这一句呢?如果用户在操作窗口中勾选了不需要统计时间的选项,那么THEN后面的若干条语句便不会执行,也就是内存变量“条件”就没有建立。这时代码执行到查询语句,WHERE子句会因为找不到“条件”这个变量而出错。同样,也不能把“条件”变量的值设为空值("")。因为设为空值后,WHERE子句就只剩下一个关键字“WHERE”了,会造成语法错误。

    啰啰嗦嗦地说了辣么多,不知道楼主弄懂了宏替换没有。总之,一句话,宏替换就是简单地把字符串变量中的内容原样拿出来而已,你不要想得太多。
谢谢!回答如此详细。1)我问的的数组cstr(i)为什么前面加了&它可以形成一个表达式?假如I=1为“_ls",kc&cstr(i)--->kc_ls
2)字段函数fields(i)为什么前面不能用&fields(i),一定要用a=fields(i)然后再用&a
3)前面你的列子中2、AB(1)="1";?"AB&AB(1)" → 得到的结果为:AB1 在命令窗口不能运行?


[此贴子已经被作者于2015-11-25 12:04编辑过]

2015-11-25 12:00
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
第(3)个问题:这是两条命令,只不过我偷懒,写在了一行上而已。实测时,应该在命令窗口先键入 AB(1)="1" 回车,再键入 ?"AB&AB(1)" 回车,就能看到大窗口中出现结果 AB1 了。
我试了一下,出现错误提示
图片附件: 游客没有浏览图片的权限,请 登录注册
2015-11-25 14:32
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
以下是引用liuxingang28在2015-11-25 13:37:41的发言:

数组与函数不能混为一谈。cStr(i) 是一个数组,是一个变量,而 fields(i)是一个函数。看来要当好一个老师还真不容易啊。
cStr(i) 是一个数组,是一个变量,就是说数组可以加上&?

[此贴子已经被作者于2015-11-25 15:18编辑过]

2015-11-25 14:41
快速回复:&的一些疑惑
数据加载中...
 
   



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

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