| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3586 人关注过本帖
标题:不用循环能解决吗
取消只看楼主 加入收藏
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
结帖率:73.97%
收藏
已结贴  问题点数:20 回复次数:17 
不用循环能解决吗
程序代码:
create cursor b1 (m c(3),m1 n(3), m2 n(3))
insert into b1 values ("10",59,0)
insert into b1 values ("",10,0)
insert into b1 values ("011",82,0)
insert into b1 values ("01",75,0)
insert into b1 values ("",56,0)
SCAN
  p1=LEN(ALLTRIM(m))
  REPLACE m2 WITH IIF(p1>0,m1,0)
ENDSCAN
brow

由于数据量大,此问题能否不用循环以提高效率。
谢谢!
搜索更多相关主题的帖子: values 循环 insert into 数据 
2020-09-22 19:31
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
谢谢!
下面给一个动态的替换

[此贴子已经被作者于2020-9-22 20:58编辑过]

2020-09-22 20:53
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
请教:
下面是动态返回相应字段的值,能否也用 REPLACE ALL进行或其他效率高的代码
程序代码:
create cursor b1 (m c(3),m1 n(3), m2 n(3),m3 n(3))
insert into b1 values ("10",59,40,0)
insert into b1 values ("",10,50,0)
insert into b1 values ("01",82,48,0)
insert into b1 values ("1",75,35,0)
insert into b1 values ("0",56,46,0)

scan
p1=ALLTRIM('m')+ALLTRIM(STR(LEN(ALLTRIM(m))))
REPLACE  m3 WITH IIF(LEN(ALLTRIM(m))>0,&p1,0)
endscan
BROWSE

根据m的长度返回以"m+m的长度"对应字段的值,如m=10,长度为2,m3返回m2的值,m=0,长度为1,m3返回m1的值
谢谢

[此贴子已经被作者于2020-9-22 21:19编辑过]

2020-09-22 21:05
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
以下是引用吹水佬在2020-9-22 21:22:48的发言:

REPLACE ALL m3 WITH IIF(!EMPTY(m), EVALUATE("m"+TRANSFORM(LEN(ALLTRIM(m)))), 0)

多谢,效率高多了!
我对函数的理解太差了,多多学习。
2020-09-22 21:48
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
以下是引用吹水佬在2020-9-22 21:22:48的发言:

REPLACE ALL m3 WITH IIF(!EMPTY(m), EVALUATE("m"+TRANSFORM(LEN(ALLTRIM(m)))), 0)

我曾用以下:
p1="m"+TRANSFORM(LEN(ALLTRIM(m)))
REPLACE ALL  m3 WITH IIF(!EMPTY(m),&p1,0)
但却用m1替换m3,不知何原因?
2020-09-23 13:53
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
以下是引用吹水佬在2020-9-23 15:18:29的发言:


先看看p1是什么就清楚
估计就是
p1="m1"
REPLACE ALL  m3 WITH IIF(!EMPTY(m),&p1,0)
相当于
REPLACE ALL  m3 WITH IIF(!EMPTY(m),m1,0)

哦,而EVALUATE("m"+TRANSFORM(LEN(ALLTRIM(m))))是动态的。
2020-09-23 16:07
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
老师:
再请教关于自定义的问题.
我要用:
      kk1=OCCURS("M", m1 + m2 + m3 + m4 + m5)
      kk2=OCCURS("P", P1 + P2 + P3 )
      kk3=OCCURS("_", _1D + _2D + _3D + _4D )
      .....
      的kk1,kk2,kk3...统计数个数,能否一次性把他们用自定义过程,以便在后面的代码中逐一调用这些参数?
怎样做(我不懂),谢谢!
     

[此贴子已经被作者于2020-9-23 16:49编辑过]

2020-09-23 16:48
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
b4.rar (537 Bytes)

分别统计_1D,_2D,_3D在同一记录上的总个数,_1X,_2X,_3x在同一记录上的总个数
程序代码:
CLOSE TABLES all
USE fc\b4
REPLACE ALL ;
            md1 WITH IIF(OCCURS("_", _1D + _2D + _3D)=1,"MD1", "");
            md2 WITH IIF(OCCURS("_", _1D + _2D + _3D)=2,"MD2", "");
            md3 WITH IIF(OCCURS("_", _1D + _2D + _3D)=3,"MD3", "");
           
REPLACE ALL ;
            mx1 WITH IIF(OCCURS("_", _1X + _2X + _3X)=1,"MX1", "");
            mx2 WITH IIF(OCCURS("_", _1X + _2X + _3X)=2,"MX2", "");
            mx3 WITH IIF(OCCURS("_", _1X + _2X + _3X)=3,"MX3", "")

表中类似统计很多,这样写有点麻烦。
用你前面的方法:
kk=0
REPLACE ALL ;
    p1 WITH IIF(fun()=1, 'P1', ''),;
    p2 WITH IIF(kk=2, 'P2', ''),;
    p3 WITH IIF(kk>2, 'P3', '')

RETURN

FUNCTION fun()
    kk = OCCURS("M",m1+m2+m3+m4+m5)
    RETURN kk
ENDFUNC
自定义函数只一次统计1个类型,能否用自定义多个参数如kk1,kk2...传递到后面要用的统计代码中。
2020-09-23 18:49
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
程序代码:
CLOSE TABLES all
USE b4
BLANK FIELDS md1,md2,md3,mx1,mx2,mx3 ALL 
kk1=0
kk2=0
REPLACE ALL ;
            md1 WITH IIF(fun()=1,"MD1", "");
            md2 WITH IIF(kk1=2,"MD2", "");
            md3 WITH IIF(kk1=3,"MD3", "")
           
REPLACE ALL ;
            mx1 WITH IIF(fun1()=1,"MX1", "");
            mx2 WITH IIF(kk2=2,"MX2", "");
            mx3 WITH IIF(kk2=3,"MX3", "")
  RETURN


FUNCTION fun()

kk1=OCCURS("_", _1D + _2D + _3D)

RETURN kk1
ENDFUNC

FUNCTION fun1()

kk2=OCCURS("_", _1X + _2X + _3X)
RETURN kk2
ENDFUNC

这样行吗?
把上面代码都放在1个prg文件中,不太习惯。
能否只把过程文件放在prg文件中?
2020-09-23 20:06
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
以下是引用吹水佬在2020-9-23 21:05:39的发言:

将主过程和自定义函数放在一个PRG只是方便阅读和运行示例,实际情况极少会这样做。
可以将所有相关的自定义函数放在一个PRG,用到时用 SET PROCEDURE TO 载入。
如果在当前表单里运行,可在设计表单时自定义表单方法fun,调用时用 thisform.fun()。
假设自定义函数放在funs.prg

FUNCTION fun()
    kk1 = OCCURS("_", _1D + _2D + _3D)
    kk2 = OCCURS("_", _1X + _2X + _3X)
    RETURN kk1
ENDFUNC

FUNCTION fun1()
   ******
ENDFUNC

FUNCTION fun2()
   ******
ENDFUNC


主过程代码
SET PROCEDURE TO funs.prg ADDITIVE
PRIVATE kk1,kk2
kk1 = 0
kk2 = 0
USE b4
REPLACE ALL ;
    md1 WITH IIF(fun()==1, "MD1", ""),;
    md2 WITH IIF(kk1==2, "MD2", ""),;
    md3 WITH IIF(kk1==3, "MD3", ""),;
    mx1 WITH IIF(kk2==1, "MX1", ""),;
    mx2 WITH IIF(kk2==2, "MX2", ""),;
    mx3 WITH IIF(kk2==3, "MX3", "")
RELEASE PROCEDURE funs.prg
SELECT * FROM b4

谢谢!又涨了点知识。
2020-09-23 21:26
快速回复:不用循环能解决吗
数据加载中...
 
   



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

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