| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 222 人关注过本帖
标题:do while...enddo好像比scan...endscan更好用哦!
取消只看楼主 加入收藏
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:368
专家分:335
注 册:2013-10-4
结帖率:100%
收藏
 问题点数:0 回复次数:2 
do while...enddo好像比scan...endscan更好用哦!
印象中,VFP手册写道:scan...endscan比do while...enddo效率更高,建议使用前者。

结果今天运行一个耗时的脚本,scan...endscan一旦开始循环,就无法中途通过按键退出了;要么静待循环结束,要么强制杀死VFP进程,丢失循环更新的数据,甚至有可能损坏表。

请教DeepSeek,说是“SCAN...ENDSCAN 是原子操作,默认不响应外部事件,其内部封装了记录指针移动,循环期间阻塞外部事件(包括按键和窗口关闭)。必须依赖外部 API 强制干预(如 GetAsyncKeyState)才能通过按键退出循环。”

而“do while...enddo通过简单添加 DOEVENTS 即可支持事件响应,是更优选的循环结构。”

试了一下,果真如此!TNND,微软欺骗了我的感情十多年哪,嘿嘿。

2025-04-06 23:39
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:368
专家分:335
注 册:2013-10-4
收藏
得分:0 
以下是引用csyx在2025-4-7 09:20:58的发言:

scan ... endscan 是原子操作? 这我倒是第一次听说
怎么感觉 ds 又成功忽悠瘸了一位呢,印象中我就有大量在 scan 中允许用户按键退出循环的代码


哈哈,学到啦!非常感谢!

昨天在利用DeepSeek提供代码模拟“按键精灵”,让VFP脚本与其他软件交互。当中不得不插入了一大堆的inkey(1)延时,开始运行后才发觉:scan...endscan完至少需要一两个通宵。scan了一个多小时后,想中途暂停,看一下结果,有无bug,却根本无法暂停!一下子就慌了,折腾了好半天,最终不得不强行杀了VFP进程。

接着让DeepSeek解决这个问题,它就给出了上述解释,并给出修正后的代码。

修正后的代码,能够完美运行。我没考虑那么多,直接采纳了脚本Ver 2.0。

这重点,其实不在“忽悠瘸”还是“不瘸”。重点是:

凭我一己之力,想要写出这个脚本,起码需要好几天工夫,不停去查Windows API,不停去百度十几年前的VFP代码,不停去试错;而利用DeepSeek写,讲真,一上午喝着咖啡,吃着小甜饼,就轻轻松松解决了。

我要的只是结果,过程真的无意义!——试想,这年头,谁还乐意浪费时间去钻研什么VFP艰深学问啊?

当玩具用用而已。
2025-04-07 12:10
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:368
专家分:335
注 册:2013-10-4
收藏
得分:0 
这种交互式脚本,流行的作法是用Python来干。一开始也确实是让DeepSeek提供Python的实现思路。只是突发奇想:脚本需要遍历存取本地表数据,而这方面的操作,VFP似乎更简洁方便些,于是让DeepSeek转译成VFP代码。VFP恰好我还没丢,仍看得懂。一看之下,发现它写的VFP实现代码异常简洁,换我自己写恐怕得多出两三倍代码量!

这没什么的,也没必要对AI太过抵触、排斥、戒惧,毕竟它的“记忆力”比我们好不知多少倍!在它的“大脑”里填塞了截至2023年的绝大多数网上资源、信息与数据;就拿Windows API来说吧,它能“记得”几乎所有的API,写代码时,信手拈来,随意调用,完全不像我们,为了一个小问题就要搜索老半天,甚至纠结好多天!
2025-04-07 13:52
快速回复:do while...enddo好像比scan...endscan更好用哦!
数据加载中...
 
   



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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.230786 second(s), 11 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved