用_GUICtrlListView_GetItemCount咋出错了?
本帖最后由 hhasee 于 2009-5-26 09:05 编辑$ListView1 = GUICtrlCreateListView(" 序号| 单号| S N号| 日期| 时间", 5, 107, 525, 315)
使用$jls = _GUICtrlListView_GetItemCount($ListView1)时,当LISTVIEW里的数大于1000条时怎么得出的数据比实际的小呢?? 本帖最后由 lynfr8 于 2009-5-25 18:16 编辑
呵呵
估计你想不到这是AutoIt3的 限制吧
其实我在做'代号autoitscript5.1工程'电子书的时候才发现的
才认真看帮助文件找答案,发现【AutoIt3 限制/默认】提到:MAX_ENVSIZE 32767 ENV 变量(环境变量)的最大字符串数量.
【常见问题(FAQ)----15. 目前AutoIt v3有什么技术上的局限吗?】也提到一些关于au3限制的内容
而
能够同时使用的最大变量数量: 没有限制
用户定义函数的最大数量: 没有限制
就是说你可以设置n多个变量,但是每个变量装入数据容器不是无限大的
恰恰是有限制的,就是32767个字符
当你这个变量装满了,就不会再容纳更多后来读取的数据
假设你这个变量你放进去一个循环语句里面
并且另外定义一个$count变量赋值循环一次$count=$count+1
你会发现当容器满了即使这个循环没有报错,而且$count变量还是不断增加
但是这个变量容器已经无法写入了
就是类似你的这种情况啦
呵呵,正所谓十只手指都有长短,这是au3的短处
据说是为了防止数据流过大而导致内存崩溃
顺便给个代码出来,就是我之前做电子书时候整理索引写的
有兴趣的可以下载做个测试就明白了
源码: dim $count,$file
$file = FileOpen("TopicList.txt", 0)
While 1
$line = FileReadLine($file)
$array = StringSplit($line, "=", 1)
$count = $count + 1
for $i = 2 to $array
;msgbox(4096,$i,$array[$i])
$title = $array
$link = $array
;MsgBox(4096,$i, $Number)
;MsgBox(4096,$i, $link)
Next
$file2 = FileOpen("2.txt", 1)
$a='<a href'&'='
$b='''html/'
$c='.html'''
$d='>'&$title&'</a></br>'
$e=$a&$b&$link&$c&' '&$d
;msgbox(4096,$i,$e)
FileWriteLine($file2, $e)
;msgbox(4096,$i,$count)
TrayTip("次数", $count, 0)
Wend
运行的次数已经很高了,但是:
其实数据的读取和写入已经停止了
看,需要读取的数据是超出au3可以处理的范围了
另外FileReadLine 一次最大能返回 65534 字符,这里的测试数字统计估计是没包含空格等其他制表符
至于解决的方法,当时我的思路是‘一个容器装不下就换一个’,就是当报错了就换变量来读取数据
不过当时也没太多时间去写了,),不过感觉有矛盾不知道怎么实现,而且5.1也快结束了,就手工解决了(每读取完一次就删除掉那一部分数据再重新读取,累的双手....)
如果有更好的思路,请指教 原来如此,希望新版时能解决这样的问题!
页:
[1]