| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2201 人关注过本帖
标题:从字段列表中循环找到字段值为0(字符型)的替换为空,为什么不成功,请教 何处 ...
取消只看楼主 加入收藏
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1539
专家分:180
注 册:2006-6-3
结帖率:79.38%
收藏
已结贴  问题点数:20 回复次数:9 
从字段列表中循环找到字段值为0(字符型)的替换为空,为什么不成功,请教 何处出错了
CLOSE DATABASES
 USE ls.DBF
for I=4 To Fcount()   &&我从第4个字段开始
cfield=fields(i)
REPLACE  &cfield. WITH " "for alltr(fields(i))='0'&&&只要是0的用空格替换。
ENDFOR
ls.rar (17.46 KB)
2015-05-21 14:54
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1539
专家分:180
注 册:2006-6-3
收藏
得分:0 
以下是引用吹水佬在2015-5-21 15:31:40的发言:

USE ls
SCAN
    FOR i = 4 TO FCOUNT()
        IF ALLTRIM(EVALUATE(FIELD(i))) == "0"
            REPLACE (FIELD(i)) WITH ""
        ENDIF
    ENDFOR
ENDSCAN
行的,我的代码错在哪里?
在命令窗中:例如字段为ZF中把0的替换为""
         replace zf with " " for alltrim(zf)="0"
      是可行的,全部含有0都替换了。
       现只要把字段逐个循环不也是可行吗
                FOR i = 4 TO FCOUNT()
                     cfiel=field(i)
             replace &cfiel with " " for alltrim(field(i))="0"
                endfor
为什么还要SCAN  
           IF
            END
         ENDSCA
  

[ 本帖最后由 sylknb 于 2015-5-21 15:55 编辑 ]
2015-05-21 15:45
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1539
专家分:180
注 册:2006-6-3
收藏
得分:0 
alltrim(zf)返回的是字段的值,如:"0"
alltrim(field(i))返回的是字段的名,如:"zf"
 一直理介为 for alltrim(field(i))='0'中提出字段名zf,它的值等于0 与for alltrim(zf)='0'应是等同的
从ALLTRIM(EVALUATE(FIELD(I)))=="0"中来理介==前半句是计算出字段的值,假如是0,则等号前面的0等于等号后面的0-->0==0
zf=0与field(i))=0是不同的。
上述理介不知对否?
2015-05-21 17:06
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1539
专家分:180
注 册:2006-6-3
收藏
得分:0 
以下是引用TonyDeng在2015-5-21 16:58:57的发言:


你知道未知的字段類型都是字符型就敢用alltrim()?還跟字符型"0"做邏輯比較?
是字符型
2015-05-21 17:07
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1539
专家分:180
注 册:2006-6-3
收藏
得分:0 
(FIELD(I))是名称表达式 与FIELD(I)又有何区别?
2015-05-21 17:24
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
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1539
专家分:180
注 册:2006-6-3
收藏
得分:0 
以下是引用sdta在2015-5-21 19:47:06的发言:

自己动手,上机操作,逐个比较。
上机操作了,解释不了病因。
2015-05-21 20:09
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
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1539
专家分:180
注 册:2006-6-3
收藏
得分:0 
以下是引用wangzhiyi在2015-5-22 12:39:38的发言:

 
CLOSE DATABASES
USE ls.DBF
for I=4 To Fcount()   &&我从第4个字段开始
    cfield=fields(i)
    IF TYPE("&cfield")='C'
    REPLACE  &cfield WITH " " for ALLTRIM(&cfield)=='0'&&&只要是0的用空格替换。
    ENDIF  
ENDFOR
brow
 
VFP9运行通过。
用type()与vartype()有何区别吗,不是说后者比前者更好吗,后者对括号内的字段不要加引号"",更方便。


[ 本帖最后由 sylknb 于 2015-5-22 22:23 编辑 ]
2015-05-22 22:19
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1539
专家分:180
注 册:2006-6-3
收藏
得分:0 
不怕你见笑,调试器查找问题我不太会用,而且也没有产生错误的所以然
为什么用vartype()在程序中来判断字段类型时有时要出错
IF VARTYPE(FIELD(i))="C"   &&换成type()就没有下面的提示
    REPLACE  &cfield WITH " " for ALLTRIM(&cfield)=='0'&&&只要是0的用空格替换。 提示字段类型 ,数值。。。不对
    ENDIF  
type()与vartype()有何区别吗,不是说后者比前者更好吗,后者对括号内的字段不要加引号"",更方便。


[ 本帖最后由 sylknb 于 2015-5-23 11:42 编辑 ]
2015-05-23 11:16
快速回复:从字段列表中循环找到字段值为0(字符型)的替换为空,为什么不成功,请教 ...
数据加载中...
 
   



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

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