| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3880 人关注过本帖
标题:不用循环能解决吗
只看楼主 加入收藏
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 10楼 fdqzy
要着具体是怎样使用这些变量
类似问题之前的贴有讨论过重复使用变量kk
2020-09-23 17:54
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
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 13楼 fdqzy
将主过程和自定义函数放在一个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:05
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
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
有更好的办法解决吗?
程序代码:
USE b1 IN 0 ALIAS t1

USE b1 IN 0 ALIAS t2 AGAIN 
SELECT t1
SET RELATION TO RECNO()+1 INTO "t2"

SCAN
  tj=0
  if '_'$t1._1d and '_'$t2._1d &&两表上下相同
     tj=tj+1
  endif
  if '_'$t1._2d and '_'$t2._2d
     tj=tj+1
  ENDIF
  if '_'$t1._3d and '_'$t2._3d
     tj=tj+1
  ENDIF
  
  REPLACE t2.mdx1 WITH IIF(tj=1, 'MDX1', '');
          t2.mdx2 WITH IIF(tj=2, 'MDX2', '');
          t2.mdx3 WITH IIF(tj=3, 'MDX3', '')
ENDSCAN


[此贴子已经被作者于2020-9-24 17:59编辑过]

2020-09-24 17:53
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 16楼 fdqzy
与之前的贴大同小异,变通一下就OK
程序代码:
USE b1 IN 0 ALIAS t1
USE b1 IN 0 ALIAS t2 AGAIN 
SELECT t1
SET RELATION TO RECNO()+1 INTO "t2"
PRIVATE tj
tj = 0
REPLACE ALL ;
    t2.mdx1 WITH IIF(fun()=1, 'MDX1', ''),;
    t2.mdx2 WITH IIF(tj=2, 'MDX2', ''),;
    t2.mdx3 WITH IIF(tj=3, 'MDX3', '')
SELECT * FROM b1
RETURN

FUNCTION fun()
    tj =      IIF('_'$t1._1d and '_'$t2._1d, 1, 0)
    tj = tj + IIF('_'$t1._2d and '_'$t2._2d, 1, 0)
    tj = tj + IIF('_'$t1._3d and '_'$t2._3d, 1, 0)
    RETURN tj
ENDFUNC

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

与之前的贴大同小异,变通一下就OK

USE b1 IN 0 ALIAS t1
USE b1 IN 0 ALIAS t2 AGAIN
SELECT t1
SET RELATION TO RECNO()+1 INTO "t2"
PRIVATE tj
tj = 0
REPLACE ALL ;
    t2.mdx1 WITH IIF(fun()=1, 'MDX1', ''),;
    t2.mdx2 WITH IIF(tj=2, 'MDX2', ''),;
    t2.mdx3 WITH IIF(tj=3, 'MDX3', '')
SELECT * FROM b1
RETURN

FUNCTION fun()
    tj =      IIF('_'$t1._1d and '_'$t2._1d, 1, 0)
    tj = tj + IIF('_'$t1._2d and '_'$t2._2d, 1, 0)
    tj = tj + IIF('_'$t1._3d and '_'$t2._3d, 1, 0)
    RETURN tj
ENDFUNC

谢谢!!!
我的思路跟不上
2020-09-24 20:59
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
关于FUNCTION参数传递超26个的问题:
程序代码:
FUNCTION fun1()
    kk1......
    kk2......
......
    kk20.....

 
    RETURN kk1
ENDFUNC

FUNCTION fun2()
    bb1......
    bb2......
......
    bb15..
ENDFUNC

在主程序中,除fun1()中能正确传递参数外
fun2()的参数不能正确传递。
我又把fun1()和fun2()分别放入2个prg文件中,在主程序中
SET PROCEDURE TO funs1.prg ADDITIVE
......

SET PROCEDURE TO funs2.prg ADDITIVE
.....

还是与只正确传递fun1()中的20个参数值,fun2()的参数就不行了
应如何解决,谢谢!
2020-09-25 18:03
瓜瓜1990
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:18
帖 子:125
专家分:699
注 册:2020-2-25
收藏
得分:7 
回复 19楼 fdqzy
VFP中函数最多只允许26个参数
另外把函数放在一个过程文件里,set procedure to 使用一次就可以了.

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


piu~piu~
2020-09-25 19:02
快速回复:不用循环能解决吗
数据加载中...
 
   



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

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