注册 登录
编程论坛 VFP论坛

如何解决长命令行

fdqzy 发布于 2023-08-16 12:08, 1326 次点击
程序代码:
DELETE FOR IIF(a1+1=a2,1,0) +;
            IIF(a2+1=a3,1,0) +;
            IIF(a1+1=a2,1,0) +;
            IIF(a2+1=a3,1,0) +;
            IIF(a3+1=a4,1,0) +;
            IIF(a2+1=a3,1,0) +;
            IIF(a3+1=a4,1,0) +;
            IIF(a4+1=a6,1,0) +;
            IIF(a5+1=a6,1,0) +;
            IIF(a1+1=a2,1,0) +;
            IIF(a2+1=a3,1,0) +;
            IIF(a3+1=a4,1,0) +;
            IIF(a4+1=a6,1,0) +;
            IIF(a5+1=a6,1,0) +;
            IIF(a1+1=a2,1,0) +;
            IIF(a2+1=a3,1,0) +;,
            IIF(a3+1=a4,1,0) +;
            IIF(a4+1=a6,1,0)>5



使用这个命令时,当行数超过不到300行时出现
只有本站会员才能查看附件,请 登录

当条件命令行在1000行时,应如何解决?
请帮忙解决一下,急。谢谢!



14 回复
#2
吹水佬2023-08-16 12:10
语句长有限制
超长要分歩
#3
fdqzy2023-08-16 12:26
用SCAN ... ENDSCAN 命令,一行一行累加判断时,一百万条记录可能太慢。
#4
fdqzy2023-08-16 12:26
以下是引用吹水佬在2023-8-16 12:10:38的发言:

语句长有限制
超长要分歩

版主,请教如何分步?请指教!
这条命令结果只是一个数据来判断

[此贴子已经被作者于2023-8-16 12:31编辑过]

#5
吹水佬2023-08-16 12:36
一大串的是累计,就算一句一个加也可以吧
#6
hu9jj2023-08-16 12:45
那么长的命令可谓“叹为观止”。
不光是命令行的字符数有限制,而且IF、FOR等语句的镶套也是有限制的,这些都是每种语言都必须遵守的规则。
#7
fdqzy2023-08-16 13:39
以下是引用吹水佬在2023-8-16 12:36:32的发言:

一大串的是累计,就算一句一个加也可以吧

试试,谢谢!
#8
laowan0012023-08-16 14:21
以下两个方法不受长度限制
方法1:
xchr = 'DELETE FOR '
xchr = xchr + 'IIF(a1+1=a2,1,0) +'
xchr = xchr + 'IIF(a2+1=a3,1,0) +'
xchr = xchr + 'IIF(a1+1=a2,1,0) +'
xchr = xchr + 'IIF(a2+1=a3,1,0) +'
xchr = xchr + 'IIF(a3+1=a4,1,0) +'
......

方法2:
TEXT TO xchr NOSHOW TEXTMERGE
    DELETE FOR '
ENDTEXT
* 以下部分应该是在循环体中每次加一句
TEXT TO xchr addi NOSHOW TEXTMERGE
    IIF(a1+1=a2,1,0) +
    IIF(a2+1=a3,1,0) +
    IIF(a1+1=a2,1,0) +
    IIF(a2+1=a3,1,0) +
    IIF(a3+1=a4,1,0) +
    ......
ENDTEXT
#9
csyx2023-08-16 14:26
以下是引用laowan001在2023-8-16 14:21:13的发言:

以下两个方法不受长度限制
方法1:
xchr = 'DELETE FOR '
xchr = xchr + 'IIF(a1+1=a2,1,0) +'
xchr = xchr + 'IIF(a2+1=a3,1,0) +'
xchr = xchr + 'IIF(a1+1=a2,1,0) +'
xchr = xchr + 'IIF(a2+1=a3,1,0) +'
xchr = xchr + 'IIF(a3+1=a4,1,0) +'
......

方法2:
TEXT TO xchr NOSHOW TEXTMERGE
    DELETE FOR '
ENDTEXT
* 以下部分应该是在循环体中每次加一句
TEXT TO xchr addi NOSHOW TEXTMERGE
    IIF(a1+1=a2,1,0) +
    IIF(a2+1=a3,1,0) +
    IIF(a1+1=a2,1,0) +
    IIF(a2+1=a3,1,0) +
    IIF(a3+1=a4,1,0) +
    ......
ENDTEXT

#10
吹水佬2023-08-16 15:31
每个命令行最多的字符数 8192
#11
z126892023-08-17 09:45
以下是引用吹水佬在2023-8-16 15:31:43的发言:

每个命令行最多的字符数 8192

原来如此,学习了
#12
fdqzy2023-08-22 15:10
以下是引用吹水佬在2023-8-16 12:10:38的发言:

语句长有限制
超长要分歩

版主:恕本人愚昧,就给个分步样式吧!
   
#13
kangss2023-08-22 15:18
以下是引用fdqzy在2023-8-22 15:10:22的发言:


版主:恕本人愚昧,就给个分步样式吧!
   

用 8 楼方式,text to,应该够用
#14
iswith2023-08-22 21:07
以下是引用fdqzy在2023-8-16 12:26:03的发言:

用SCAN ... ENDSCAN 命令,一行一行累加判断时,一百万条记录可能太慢。


用多线程并发,CPU好的,跑一百个并发线程来判定,100W/100=10000,相当于100个 每线程
用SCAN ... ENDSCAN 命令跑总量1W,每行判定,应该不会要几秒。

[此贴子已经被作者于2023-8-22 21:09编辑过]

#15
星光悠蓝2023-08-23 08:35
太深奥,看不明白
FOR 后面有几个一样的条件,如:IIF(a1+1=a2,1,0)
1