精易论坛

标题: 散尽家产,如何取出多个编辑框或者组合框相同的行内容 [打印本页]

作者: 小腊肠    时间: 2012-5-13 11:29
标题: 散尽家产,如何取出多个编辑框或者组合框相同的行内容
我正在写个时时彩缩水的软件,步骤是 先取出每个做号条件到编辑框,再合并到一个编辑框,再取重复,再文本排序。

过程繁琐,软件运行效率比较低,我想请问高手,可否用API帮我写个取出每个编辑框或者是组合框相同的行内容(每一注一行,有多少注就有多少行,一行有3个数字)

速度一定要快,我现在用的这个方法要5秒左右才能把数据处理完~~我希望达到的效果是2秒左右吧~~
作者: wodetian55    时间: 2012-5-13 11:29
佚名ka 发表于 2012-5-20 23:31
哥哥 麻烦重新把例程传上来吧~~你发的这个貌似有点问题~

论坛屏蔽了中括号
[attach]108026[/attach]




作者: ZealotMaster    时间: 2012-5-13 11:31
那你就多线程呗……
作者: Cand    时间: 2012-5-13 11:31
启动线程()
作者: 易千寒    时间: 2012-5-13 11:33
嗯 可以尝试用线程解决
作者: 深思    时间: 2012-5-13 11:39
事实上我不懂你在说什么
作者: 小腊肠    时间: 2012-5-13 11:48
多线程我也用了 不用多线程的话效率就更低了~~
作者: 小腊肠    时间: 2012-5-13 11:49
深思 发表于 2012-5-13 11:39
事实上我不懂你在说什么

比如说有4个编辑框,我现在想把每个编辑框相同的行内容取出来 明白了吗哥哥?

作者: 小腊肠    时间: 2012-5-13 12:54
额  还是没有人能帮我解决吗?
作者: wwh944116    时间: 2012-5-13 13:05
编辑框,行? 为什么不用列表框?列表框对行的操作应当更方便得多。

我想你慢是因为把它读写到框的过程。你应当在内存中就进行好所有的过程,比如排序。 而写到列表框(我假设你是用的这个),那是相对费时的。
你可以建立一个结构数组,在内存中把它们处理好,到搞完后再写到显示用的控件上。这样时间就只花费在读和写的过程。内存中处理几乎可以不用考虑。

我想问题是出在思路上而不是易语言的速度上。就算我帮你改用VC来写,效果应当也差不多的。
作者: 小腊肠    时间: 2012-5-13 13:18
wwh944116 发表于 2012-5-13 13:05
编辑框,行? 为什么不用列表框?列表框对行的操作应当更方便得多。

我想你慢是因为把它读写到框的过程。 ...

嗯 是的   我不是质疑易语言的处理数据的速度 我是觉得自身的技术不够造成的~~
那哥哥能否给个例程让小弟学习学习?
要取多个列表框的重复项~~
作者: wwh944116    时间: 2012-5-13 13:37
佚名ka 发表于 2012-5-13 13:18
嗯 是的   我不是质疑易语言的处理数据的速度 我是觉得自身的技术不够造成的~~
那哥哥能否给个例程让小弟 ...

能否把大概的情况说得更清楚一些?资料不足,好象并不能写出来。我甚至不知道你要做什么。
我猜测可能是这样。
就有这样的思路:
1。为每个列表框(假设你用这个)建立一个结构数组(如果是多个值),如果只一个值用数组就行了。
2。把每个列表框的内容读入数组中。
3。比较数组,然后把它们当中出现次数最多的写入一个新数组。之后就再显示到一个列表框中。

这样速度就不会成问题了。关键就在于排序的算法而已,不过数组里就几千个号的话(假设的),那么以现在2G左右的CPU,就算只用冒泡算法也是很快的。根本不用多线程都可以。另外多线程并不能提高速度。更多的只是能够在进程主线程工作时不受影响而已。但如果只是这样程度的根本不用多线程也可以,因为应当不超过0。5秒。
作者: wwh944116    时间: 2012-5-13 13:51

是这么个东西?
如果是你可以试着用我的思路写,应当可以的。好久没折腾易语言了,要是用VC写,我倒是更顺手。
作者: 小腊肠    时间: 2012-5-13 14:20
wwh944116 发表于 2012-5-13 13:37
能否把大概的情况说得更清楚一些?资料不足,好象并不能写出来。我甚至不知道你要做什么。
我猜测可能是 ...

对对对 就是这个意思~~
比如说我们有4个列表框 4个列表框里面都有列表项目的,那么全部加入到结构数组里面,就要取出这个结构数组里面出现4次的数组
如果4个列表框只有3个有列表项目,那么就要取出结构数组里面出现3次的数组 明白我的意思了吗?
作者: 小腊肠    时间: 2012-5-13 14:21
wwh944116 发表于 2012-5-13 13:51
是这么个东西?
如果是你可以试着用我的思路写,应当可以的。好久没折腾易语言了,要是用VC写,我倒是更 ...

大概意思差不多吧~~只取出相同的 而且速度要快  我现在写的速度就很慢~~
作者: wwh944116    时间: 2012-5-13 14:35
很简单吧。为什么不自己写一下,加深一下认识。也就是数组的使用方法。写完了会大有进步的。
排序或者你说的那个找出相同的,用循环嵌套 先从号码1数组中的第一个去对比其它三个中是否有相同的值。这三个也用循环取出。因为是在数组中的,也就是内存中的,所以根本就不费时间。所以速度肯定够快。这里面呢就要想法多点。但不成问题的嘛。
自己编,很有意思的事,不想抢了你的乐趣。呵呵~~
作者: s19876699    时间: 2012-5-13 15:25
用数组吧,直接点中那行那行的行数就作为下标,直接引用数组数据。
作者: 小腊肠    时间: 2012-5-13 18:41
wwh944116 发表于 2012-5-13 14:35
很简单吧。为什么不自己写一下,加深一下认识。也就是数组的使用方法。写完了会大有进步的。
排序或者你说 ...

额····我就是用数组的方法呀~~哥哥~~~~你能不能给我个例程呢????
作者: 小腊肠    时间: 2012-5-13 19:31
求高手指点啊a~~~~
作者: 小腊肠    时间: 2012-5-13 20:24
自己顶起来 等高手来解答~~
作者: 小腊肠    时间: 2012-5-13 21:13
难道还是没有人吗?
作者: 小腊肠    时间: 2012-5-13 22:20
还是没人吗???
作者: wwh944116    时间: 2012-5-13 22:46
佚名ka 发表于 2012-5-13 22:20
还是没人吗???

我试验了一下。可能没什么好办法。
1。生成四个文本文件,里面都是用随机数随机生成的3位的数字。
2。把它们放到列表框中。
3。两两对比,把在四个列表框中都存在的在放到第五个列表框中。

试验的结果:
如果生成的四个文件中的数字,也就是3位一组的数字。它的 数量 有2000个。那么就要用到差不多五秒。才能完成。如果是每个列表框中的数字只有1000个的话,感觉上是一秒半的样子。如果是500个那么只是一闪就可以,应当少于一秒。这就不用说少于500个的情况了。
我是用VC6。0写的。
思路就是前面说的。放到数组,四个数组两两相比,然后得出两个,再次两两相比,得出来的就是结果。不过有重复,这不是问题。至时再把重复的去掉就行。这倒好实现。
做过一些极限试验 5000个数字的话,那就不行了。因为相同数字会达到600万个。用时30秒以上。

所以你可以这样,把这个数字量限制在每个列表框中在1000个以下。这样就能保证速度了。
至于写法。我是用VC6写的,如果你想要我倒是可以给你源码。易语言。。。我好久没用了。有点拿不准。

作者: 小腊肠    时间: 2012-5-13 22:56
wwh944116 发表于 2012-5-13 22:46
我试验了一下。可能没什么好办法。
1。生成四个文本文件,里面都是用随机数随机生成的3位的数字。
2。把 ...

看来我的思路和你的差不多  我也是这样弄的 开了多线程 不多我不是全部放到数组里面去比较 我是取一个编辑框的内容 分割文本 然后用每一个数组去查找另外一个编辑框的内容 如果找到 则添加到另外一个编辑框

请问下 如何直接放到数组里面去比较呢?
作者: wwh944116    时间: 2012-5-13 22:57
总结来说,就是每个列表框中,把数字分成1000组。如果大于就分开来进行第二次。然后在结果那里再把重复的去掉。事实上用时都是在写到列表框中时出现。在内存中计算时不怎么费时间。
作者: 小腊肠    时间: 2012-5-13 23:04
wwh944116 发表于 2012-5-13 22:57
总结来说,就是每个列表框中,把数字分成1000组。如果大于就分开来进行第二次。然后在结果那里再把重复的去 ...

每个列表框的数字肯定都小于或者等于1000 这是可以肯定的 呵呵

问题是放在数组里面怎么取出来重复 ?

用精易的模块 文本数组排序?然后取重复?还是怎么地?
作者: wwh944116    时间: 2012-5-13 23:07
佚名ka 发表于 2012-5-13 22:56
看来我的思路和你的差不多  我也是这样弄的 开了多线程 不多我不是全部放到数组里面去比较 我是取一个编辑 ...

可以先取列表框的总项目数,然后定义一个数组。再分别把列表框项目中的文本放到数组中就行了。这样应当能够加快不少的速度。因为在读列表中的数值时会比较费时,而如果项目数很多,累加起来会比较可观的。
另外,你每个列表中的数字的数量达到2000项?如果达到,那么最好先把它们分成500或1000。这样速度应当就可以了。
就软件上,VC不会比易语言快多少的。至于算法。多线程,如果你是四核可能是有效提高速度。如果象我只是双核,可能效果也提不了多少。我的是2GCPU和2G内存。好几年的机子了。
作者: 小腊肠    时间: 2012-5-13 23:10
wwh944116 发表于 2012-5-13 23:07
可以先取列表框的总项目数,然后定义一个数组。再分别把列表框项目中的文本放到数组中就行了。这样应当能 ...

哥哥 说了那么多还是没说到点子上嘛

能用易语言写个例程吗?我还是不太懂如何取出相同的数组
作者: wwh944116    时间: 2012-5-13 23:13
你影响速度的问题可能就出在要一个一个的读出来,再去读其它的编辑框。这很费时的。一次性把它们全读到数组。再数组中对比。这就应当会快许多倍。
作者: 小腊肠    时间: 2012-5-13 23:16
wwh944116 发表于 2012-5-13 23:13
你影响速度的问题可能就出在要一个一个的读出来,再去读其它的编辑框。这很费时的。一次性把它们全读到数组 ...

是的啊~~怎么对比呀????
作者: wwh944116    时间: 2012-5-13 23:23
{:3_227:}
我比较失败,看来没有当老师的天份。。。。
那么事实上你的问题可以简化为如何把编辑框中的内容读到数组中?这就简单了。你直接在易语言中声明四个1000的数组。然后用个循环放到数组就行了。而读的过程,你自己不是会读出来分割了嘛。只不过这回你一次性分割全部放到数组中。数组的操作也还算比较容易。几个循环而已。
在VC中如果是1000项,那么完全不必要用多线程。因为生成发行版后用时少于0。5秒的。如果是DEBUG版用1秒的样子。
作者: 小腊肠    时间: 2012-5-14 13:27
wwh944116 发表于 2012-5-13 23:23
我比较失败,看来没有当老师的天份。。。。
那么事实上你的问题可以简化为如何把编辑框中的内容 ...

唉 我还是写不出来呀~~~数组里面取重复~~
作者: 小腊肠    时间: 2012-5-14 16:25
额······求解答啊~~
作者: 小腊肠    时间: 2012-5-14 21:42
自己顶起来~~
作者: 小腊肠    时间: 2012-5-14 23:20
高手呢??高手呢????
作者: 小腊肠    时间: 2012-5-15 13:58
求高手解答 自己顶起来~
作者: 小腊肠    时间: 2012-5-16 18:34
自己顶起来~~
作者: 小腊肠    时间: 2012-5-17 13:29
快来人呐~~~
作者: 小腊肠    时间: 2012-5-17 16:59
哎哎  谁能帮我解答一下嘛?
作者: 小腊肠    时间: 2012-5-17 17:00
wwh944116 发表于 2012-5-13 22:46
我试验了一下。可能没什么好办法。
1。生成四个文本文件,里面都是用随机数随机生成的3位的数字。
2。把 ...

高手  怎么不说话了啊?
作者: wwh944116    时间: 2012-5-17 17:46
佚名ka 发表于 2012-5-17 17:00
高手  怎么不说话了啊?

我试图用易来写,发现很多东西不怎么用了。。。{:3_227:}
你看得懂VC吗?我给你那个看看。速度上我觉得还可以。我想你可以改编成易。

另外,我不是高手。

作者: 小腊肠    时间: 2012-5-17 18:30
wwh944116 发表于 2012-5-17 17:46
我试图用易来写,发现很多东西不怎么用了。。。
你看得懂VC吗?我给你那个看看。速度上我觉得还 ...

vc看不懂啊
作者: 小腊肠    时间: 2012-5-18 00:02
哥哥姐姐们  我发现了个用字节集到内存中取重复的例程 但是我照搬还是出错了呢   我把我写的和例程都发出来,请好心人帮忙看看吧~~~

合集.rar

33.75 KB, 下载次数: 34


作者: wwh944116    时间: 2012-5-18 00:49
VC的源码。你看看能不能看懂了。。。。里面也有个EXE可以试试看效果。我是做成1000个数据。

test11111.rar

42.18 KB, 下载次数: 10


作者: 小腊肠    时间: 2012-5-18 11:16
源码我已经传到42楼了呀~~~~~~各位大大帮帮我啊
作者: 小腊肠    时间: 2012-5-18 13:13
各位帮帮我吧 啊啊啊啊啊啊  我急用呀  自己学不会啊啊啊啊
作者: exit11    时间: 2012-5-18 14:53
不要拿这种图像出来恶心人。。。。。。。。。。。。。。。。。。。。

每个编辑框里面的数字会不会有重复的?

作者: michel    时间: 2012-5-18 19:03
这个问题真火!
作者: wwh944116    时间: 2012-5-18 21:19
帮你改好了。好久不用易语言,真是难为我老家了。另外求求你把该死的图标换一下,实在是有点反胃。
我在我的双核2GCPU,2G内存的机子上速度是把所有的都勾上选出有得复的有时大概1秒。应当可以满足你了。

自己写的.rar

11.75 KB, 下载次数: 25


作者: 最初的信仰    时间: 2012-5-19 18:59
我都没有搞懂你说的是什么问题
作者: 吾愛じ啃飯團ジ    时间: 2012-5-19 23:12

我无语了
这个问题我也不回
我对不起你了
作者: 六月雪    时间: 2012-5-20 09:34
那个处理字节集的那个源码,完全不知道那源码处理那些数据的目的是什么,麻烦把你自己以前编写的源码发出来{:3_233:}
作者: cookey    时间: 2012-5-20 11:27
启用多线程  一定解决
作者: 吾愛じ啃飯團ジ    时间: 2012-5-20 11:32
可以用判断的方式去判断一个个是否相同
作者: wodetian55    时间: 2012-5-20 13:53
提示:使用节点
在不考虑其他流程效率的前提下,使用节点的效果是比较高的,我测试1700+条数据76毫秒。
请给分吧
作者: wodetian55    时间: 2012-5-20 15:46
答案已经给出了,请加分!
作者: 小腊肠    时间: 2012-5-20 18:15
wwh944116 发表于 2012-5-18 21:19
帮你改好了。好久不用易语言,真是难为我老家了。另外求求你把该死的图标换一下,实在是有点反胃。
我在我 ...

哈哈 等我来试试~~
作者: 小腊肠    时间: 2012-5-20 18:16
wodetian55 发表于 2012-5-20 15:46
答案已经给出了,请加分!

额  哥哥 能不能给个例程呢????
作者: 小腊肠    时间: 2012-5-20 19:30
wwh944116 发表于 2012-5-18 21:19
帮你改好了。好久不用易语言,真是难为我老家了。另外求求你把该死的图标换一下,实在是有点反胃。
我在我 ...

哥哥 不对啊  
作者: 小腊肠    时间: 2012-5-20 19:32
wwh944116 发表于 2012-5-18 21:19
帮你改好了。好久不用易语言,真是难为我老家了。另外求求你把该死的图标换一下,实在是有点反胃。
我在我 ...

哥哥 不对啊    点击取重复数的时候 应该是要取出2个列表框的重复项啊~~只取重复的
作者: wwh944116    时间: 2012-5-20 19:38
佚名ka 发表于 2012-5-20 19:32
哥哥 不对啊    点击取重复数的时候 应该是要取出2个列表框的重复项啊~~只取重复的

你再看看吧。应当是对的,就是就是取的重复项。
另外,你就不能把该死的头像换一个,哪怕没有也好得多。
作者: 小腊肠    时间: 2012-5-20 20:06
wwh944116 发表于 2012-5-20 19:38
你再看看吧。应当是对的,就是就是取的重复项。
另外,你就不能把该死的头像换一个,哪怕没有也好得多。

呵呵呵 确实有点不对~~哥哥你可以做个测试 同时勾选2个0 得出来的结果里面有366 但实际上并没有366  你可以看看常量里面是不是这个情况~
还有把所有的选择框都勾选上,有1007个号码,这个肯定是不对的,从000到999总共只有1000个~
作者: 小腊肠    时间: 2012-5-20 20:16
佚名ka 发表于 2012-5-20 20:06
呵呵呵 确实有点不对~~哥哥你可以做个测试 同时勾选2个0 得出来的结果里面有366 但实际上并没有366  你可 ...

哥哥 有时候正确有时候错误~这是什么原因呢?好像不太稳定~~
作者: wwh944116    时间: 2012-5-20 20:55
佚名ka 发表于 2012-5-20 20:16
哥哥 有时候正确有时候错误~这是什么原因呢?好像不太稳定~~

确实存在有错误,因为总的数据量是超过了1000。应当是在消去相同时的逻辑上不够严密的原因。
而366,我没看到有。这应当是你在选0。0的和,差,那么是要重新读入一次才行。可能是你没有重新读。这上面应当没有问题。
嗯,我们都想想吧。
作者: wodetian55    时间: 2012-5-20 20:56
佚名ka 发表于 2012-5-20 18:16
额  哥哥 能不能给个例程呢????

例子,不用看其他的了,效率都没有这个高。
节点删除重复文本.zip (12.7 KB, 下载次数: 11)



作者: wodetian55    时间: 2012-5-20 20:59
1600+条数据,处理速度76毫秒
作者: 小腊肠    时间: 2012-5-20 21:54
wodetian55 发表于 2012-5-20 20:56
例子,不用看其他的了,效率都没有这个高。

哥哥啊 ~~~~~速度确实没得说 非常快  不过哥哥啊   我要的结果是保留重复的  删掉不重复的啊~~你这个例程刚好把重复的删掉了~
作者: 小腊肠    时间: 2012-5-20 22:41
wodetian55 发表于 2012-5-20 20:59
1600+条数据,处理速度76毫秒

{:3_231:}哥哥 还在吗????只差一点就成功了啊~~
作者: wodetian55    时间: 2012-5-20 23:14
佚名ka 发表于 2012-5-20 22:41
哥哥 还在吗????只差一点就成功了啊~~

这个用时更少,我测试为47毫秒
自己在删除重复的子程序里修改为:

t = 取启动时间 ()
原文本组 = 分割文本 (原文本, #换行符, )
新文本 = “”
重复文本 = “”
调试输出 (取数组成员数 (原文本组))
.计次循环首 (取数组成员数 (原文本组), i)
    节点.取文本值 (原文本组 , 重复文本)
    .如果真 (重复文本 ≠ “”)
        新节点.加入属性 (重复文本, “”)
    .如果真结束
    节点.加入属性 (原文本组 , 原文本组 )
.计次循环尾 ()
新节点.取全部属性名 (新文本组)
.计次循环首 (取数组成员数 (新文本组), i)
    新文本 = 新文本 + 新文本组 + #换行符
.计次循环尾 ()
输出调试文本 (取启动时间 () - t)
返回 (新文本)

作者: 小腊肠    时间: 2012-5-20 23:17
wodetian55 发表于 2012-5-20 23:14
这个用时更少,我测试为47毫秒
自己在删除重复的子程序里修改为:

哥哥 这个是去掉不重复的 留下重复的吗?
作者: wodetian55    时间: 2012-5-20 23:23
佚名ka 发表于 2012-5-20 22:41
哥哥 还在吗????只差一点就成功了啊~~

如果你需要显示每一条重复的数据
那么按照下面这个来修改(我测试的用时62毫秒):

.子程序 取重复
编辑框2.内容 = 保留重复文本 (编辑框1.内容)

.子程序 保留重复文本, 文本型
.参数 原文本, 文本型
.局部变量 节点, 节点
.局部变量 全部重复文本组, 文本型, , "0"
.局部变量 重复文本, 文本型
.局部变量 i, 整数型
.局部变量 原文本组, 文本型, , "0"
.局部变量 新文本, 文本型
.局部变量 t

t = 取启动时间 ()
原文本组 = 分割文本 (原文本, #换行符, )
新文本 = “”
重复文本 = “”
调试输出 (取数组成员数 (原文本组))
.计次循环首 (取数组成员数 (原文本组), i)
    节点.取文本值 (原文本组 , 重复文本)
    .如果真 (重复文本 ≠ “”)
        加入成员 (全部重复文本组, 重复文本)
    .如果真结束
    节点.加入属性 (原文本组 , 原文本组 )
.计次循环尾 ()
.计次循环首 (取数组成员数 (全部重复文本组), i)
    新文本 = 新文本 + 全部重复文本组 + #换行符
.计次循环尾 ()
输出调试文本 (取启动时间 () - t)
返回 (新文本)

作者: wodetian55    时间: 2012-5-20 23:26
佚名ka 发表于 2012-5-20 23:17
哥哥 这个是去掉不重复的 留下重复的吗?

是的,第一个是只保留重复的数据一次。
70楼的是保留每一个重复数据。
作者: 小腊肠    时间: 2012-5-20 23:31
wodetian55 发表于 2012-5-20 23:14
这个用时更少,我测试为47毫秒
自己在删除重复的子程序里修改为:

哥哥 麻烦重新把例程传上来吧~~你发的这个貌似有点问题~
作者: wodetian55    时间: 2012-5-20 23:35
佚名ka 发表于 2012-5-20 23:31
哥哥 麻烦重新把例程传上来吧~~你发的这个貌似有点问题~

自己加下数组的中括号。。。论坛屏蔽的中括号




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4