找回密码
 加入
搜索
楼主: annybaby

[效率算法] 向各位路过的老师请教下关于文件行数及数组问题[已解决]

 火... [复制链接]
 楼主| 发表于 2011-5-20 00:45:01 | 显示全部楼层
回复 14# 3mile


    其实我想问下,你是做神马的,怎么天天有那么多时间泡在坛子里,不用上班么??或者不用上课??
发表于 2011-5-20 00:45:32 | 显示全部楼层
回复 15# love5173
Dos和windows采用回车+换行CR/LF表示下一行,即0x0D0A
UNIX/Linux采用换行符LF表示下一行,0X0A
苹果机(MAC OS系统)则采用回车符CR表示下一行,0X0D
即2楼的兄弟代码大体是没有问题的,并且楼主已经发现2楼代码的问题所在.
你在5楼的代码当然修正了字符串末尾没有换行符的问题.
但楼主并未提供样本文件,所以大家也只是在盲人摸象.
 楼主| 发表于 2011-5-20 00:47:37 | 显示全部楼层
本帖最后由 annybaby 于 2011-5-20 00:54 编辑

回复 17# 3mile


    我的文件是ANSI TXT,其实,我的文本文件来源是一个EXCEL来的,只是因为我不太会用AU3来处理EXCEL数据,所以一般是先直接对EXCEL处理一下,然后复制到一个新建的TXT里面去~~

并且,就算是将空行的当作有数据来处理也不会有什么问题,最重要的是不能漏掉,比如说有100行,只处理了99行,就会出大事`~
发表于 2011-5-20 00:48:27 | 显示全部楼层
回复 16# annybaby
呵呵,我就是个盲流.
发表于 2011-5-20 00:57:37 | 显示全部楼层
本帖最后由 love5173 于 2011-5-20 00:59 编辑

回复 19# 3mile
最后说明一下,3M已经很困了说,
我说的是三楼的代码,你拿2楼的跟我比,2楼是现成的UDF好吧!
你怎么可以这样对我呢!
我什么时候说过2楼的代码有致命伤的.
另外根据3M老师的建议我将代码改为
$array=StringRegExp(fileread("sql.txt"),'[^\n\r]+',3)
$con=UBound($array)

处理速度还是比2楼的要快的
发表于 2011-5-20 01:34:34 | 显示全部楼层
本帖最后由 easefull 于 2011-5-20 01:35 编辑

因为au3大多都是windows环境.操作的又是文本文件,所以我选择了\r\n

我在3楼的代码,如果txt的文件最后一行记录后面没有加换行,确实会漏掉最后一行的记录.这的确是存在问题的.

在我想法里面:
1.因为获取的文本行还是需要再次处理的,所以不在正则里面删除空行,而是在之后处理的时候加一个 if $ling = "" then continuneloop.
这样可以保持源文本的正确行数,也许还可以省掉那个替换的时间.

2.如果正则取到@cr,这也应该是不必要的.因为这也有可能影响到之后的处理.具体的得看那文本的使用格式.

3.按格式的文本记录文件.
因为,如果使用
$sResult   =  ""
$sResult &= @crlf &  "Result"

会造成第一行记录前多出一个空行.所以我更我习惯于用
$sResult   =  ""
$sResult &= "Result" & @crlf

但用在第三方的记录文本时,确实应该先做兼容处理.

另外,特别感谢3mile发的换行普及知识.之前我只知道@crlf和@lf是换行——原来@CR也是换行....
发表于 2011-5-20 01:53:57 | 显示全部楼层
最后说一下2楼的缺陷,当你把一个txt全写成换行的时候就知道,这个UDF就是一个扯淡的函数了,这个时候我的第一个代码就可以识别出来,好比我们打开记事本的状态栏,在里面输入10个回车,这个时候再比较上面的代码就会发现,我那个最慢的代码能正常的返回行数,但是其他的就不行了!难道写那个UDF的人就要拉出去砍头吗?
就事论事,没有最完美的代码,只有最契合需要的代码!总结完毕!
发表于 2011-5-25 13:13:06 | 显示全部楼层
回到楼主的正题上,有时候换一种思路试试,比如,根据实际需要调整调整一个已经存在的数组的大小
ReDim $array[subscript 1]...[subscript n]
发表于 2011-5-25 14:47:45 | 显示全部楼层
好的,顶顶
 楼主| 发表于 2011-5-25 23:27:46 | 显示全部楼层
发现个很奇怪的问题
用for循环嵌套对数组赋值:
$str[$i][$j]=$temp[$j]
$str和$temp都是数组,并且用MSGBOX显示里面的数据都是正确的,将内容输出到文件也是正确的,但是运行之后查看文件的内容日志,都显示有粉红色的??
定位都是在上面那行代码,在对数组定义时,用的是 global[$lines],其中$lines是文件的行数,用的是_FileCountLines()
返回的,


如果换成明确的常数比如说100,运行就没有任何问题~~不知道是什么原因??
发表于 2011-5-26 23:07:31 | 显示全部楼层
难道2楼不是最正确的写法????完全符合楼主的要求``而且代码简单...........
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-13 22:33 , Processed in 0.066872 second(s), 13 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表