| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2201 人关注过本帖
标题:从字段列表中循环找到字段值为0(字符型)的替换为空,为什么不成功,请教 何处 ...
只看楼主 加入收藏
muyubo
Rank: 9Rank: 9Rank: 9
来 自:山东莱芜
等 级:蜘蛛侠
威 望:3
帖 子:471
专家分:1017
注 册:2011-3-6
收藏
得分:3 
真正深入掌握点知识有多难
2015-05-21 18:36
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1539
专家分:180
注 册:2006-6-3
收藏
得分:0 
请教各位高手:有点搞糊涂了
一)
alltrim(zf)返回的是字段的值,如:"00"
alltrim(field(i))返回的是字段的名,如:"zf"

1)for zf="00"&&&在窗口中输入
2)FOR ALLTRIM(EVALUATE(FIELD(I)))="00"&&程序中
3)for FIELD(I)="00""&&程序中
这三条命令如何来理介

-----------------------------------------


field(i)是返回字段名假如i=1是xm,它们都是字符型
(field(i))名表达式当计算结果也是 xm

 为什么下面三条命令只有第2条是成功,其它都不成功
1)FOR I=4 TO FCOUNT()
  repl all FIELD(I) with "  " FOR ALLTRIM(EVALUATE(FIELD(I)))=="0" &&取字段名,条件:取字段名再计算
ENDFOR
2------------------------------------
FOR I=4 TO FCOUNT()
  
repl all (FIELD(I)) with "  " FOR ALLTRIM(EVALUATE(FIELD(I)))=="0"&&&先取字段名后再进行名表达,条件:取字段名再计

ENDFOR
3-------------------------------------------

FOR I=4 TO FCOUNT()
  repl all (FIELD(I)) with "  " FOR ALLTRIM(FIELD(I))=="0"  &&先取字段名后再进行名表达,条件:取字段名
ENDFOR
2015-05-21 19:01
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9831
专家分:27162
注 册:2012-2-5
收藏
得分:0 
自己动手,上机操作,逐个比较。

坚守VFP最后的阵地
2015-05-21 19:47
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1539
专家分:180
注 册:2006-6-3
收藏
得分:0 
以下是引用sdta在2015-5-21 19:47:06的发言:

自己动手,上机操作,逐个比较。
上机操作了,解释不了病因。
2015-05-21 20:09
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10577
专家分:43065
注 册:2014-5-20
收藏
得分:0 
回复 22楼 sylknb
一)
alltrim(zf)返回的是字段的值,如:"00"
alltrim(field(i))返回的是字段的名,如:"zf"

1)for zf="00"&&&在窗口中输入
2)FOR ALLTRIM(EVALUATE(FIELD(I)))="00"&&程序中
3)for FIELD(I)="00""&&程序中
这三条命令如何来理介

1、2运行结果是一样,表达方式不同。
3、FIELD(I)返回字段名,如"zf", 运行结果是:for "zf"="00"  永远是.F.
-----------------------------------------


field(i)是返回字段名假如i=1是xm,它们都是字符型
(field(i))名表达式当计算结果也是 xm

为什么下面三条命令只有第2条是成功,其它都不成功
1)FOR I=4 TO FCOUNT()
  repl all FIELD(I) with "  " FOR ALLTRIM(EVALUATE(FIELD(I)))=="0" &&取字段名,条件:取字段名再计算
ENDFOR
2------------------------------------
FOR I=4 TO FCOUNT()
  
repl all (FIELD(I)) with "  " FOR ALLTRIM(EVALUATE(FIELD(I)))=="0"&&&先取字段名后再进行名表达,条件:取字段名再计算

ENDFOR
3-------------------------------------------

FOR I=4 TO FCOUNT()
  repl all (FIELD(I)) with "  " FOR ALLTRIM(FIELD(I))=="0"  &&先取字段名后再进行名表达,条件:取字段名
ENDFOR

(field(i)),这一对括号是“名称表达式”,有特定用法,表达字段名、文件名、别名。VFP帮助有详细说明,可搜索“名称表达式”
2015-05-21 23:17
wangzhiyi
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:366
专家分:684
注 册:2014-4-9
收藏
得分:3 
以下是引用sylknb在2015-5-21 14:54:57的发言:

CLOSE DATABASES
 USE ls.DBF
for I=4 To Fcount()   &&我从第4个字段开始
cfield=fields(i)
REPLACE  &cfield. WITH " "for alltr(fields(i))='0'&&&只要是0的用空格替换。
ENDFOR

你既然前面修改的字段用了宏代换函数,后面的条件位置为何不用宏代换函数呢?还有是条件部分用=号进行比较,会出错算法错误的,比如说如果某的内容是用0开头的字符,也会被你替换为空,应该是用==进行精确比较(也可以使用set exact on)命令设置精确比较。

[ 本帖最后由 wangzhiyi 于 2015-5-22 10:38 编辑 ]
2015-05-22 09:17
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9831
专家分:27162
注 册:2012-2-5
收藏
得分:0 
现在是系统学习VFP的时候了,基础知识不掌握,带来的问题越来越多。

坚守VFP最后的阵地
2015-05-22 09:26
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9831
专家分:27162
注 册:2012-2-5
收藏
得分:0 
以下是引用TonyDeng在2015-5-21 16:58:57的发言:


你知道未知的字段類型都是字符型就敢用alltrim()?還跟字符型"0"做邏輯比較?

应该没问题吧,不符合条件,就不会BLANK

坚守VFP最后的阵地
2015-05-22 09:34
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1539
专家分:180
注 册:2006-6-3
收藏
得分:0 
如果增加判断字段中的0是字符型还是数值型然后根据是字符型的用空格来替换。
CLOSE DATABASES
USE ls.DBF
for I=4 To Fcount()   cfield=fields(i)
IF VARTYPE(FIELD(I))="C"

replace &cfield. with ' ' for allt(&cfield.)=='0' &&&提示参数类型,值。。。不对。

ENDIF
ENDFOR
[attach]80374[/attach]

[ 本帖最后由 sylknb 于 2015-5-22 11:35 编辑 ]
2015-05-22 11:34
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:0 
IF TYPE(FIELD(I))="C"

2015-05-22 12:24
快速回复:从字段列表中循环找到字段值为0(字符型)的替换为空,为什么不成功,请教 ...
数据加载中...
 
   



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

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