dearmb 发表于 2010-12-22 23:09:00

【已解决】一行行读取文本,有什么好方法吗?

本帖最后由 dearmb 于 2011-1-1 21:39 编辑

我原来做的一个vbs脚本,读取这样的文本,主机名与Mac地址的对应关系,如:
pc001    00-0A-EB-AB-92-B0
pc002    00-02-EB-AB-92-B0
……
pc100    00-03-EB-AB-92-B0
先是检测本机mac地址,查找对应的主机名,因为vbs读取文本是按行循环读取的
读取一行之后,我用Split将一行分成两个数组,然后对照
但是AU3语法解释中,FileReadLine 有这样一段话
“从性能的角度来看,一行行读取是一个坏主意,此时“行号” 参数是一个递增值. 这将迫使 AutoIt 从开始重读该文件,直至达到指定的行”
有没有什么更好的办法实现我的要求,要是实在不行的话……只有用FileReadLine 一行一行读文本了……

netegg 发表于 2010-12-22 23:58:41

filereadtoarray
_arraysearch
不知道效率如何
当然如果正则比较熟用正则最合适

afan 发表于 2010-12-23 00:10:50

没看懂…
要找 00-02-EB-AB-92-B0 的主机名,正则一步到位
(?<=\n|^).+?(?=\h+00-02-EB-AB-92-B0)

dearmb 发表于 2010-12-23 07:45:58

本帖最后由 dearmb 于 2010-12-23 07:50 编辑

没看懂…
要找 00-02-EB-AB-92-B0 的主机名,正则一步到位
(?
afan 发表于 2010-12-23 00:10 http://autoitx.com/images/common/back.gif

简单的说,就是我做一个txt,格式是
pc001    AA-AA-AA-AA-AA-AA
pc002    BB-BB-BB-BB-BB-BB
……
pc100    CC-CC-CC-CC-CC-CC
首先自动获取本机的mac地址,得出本机所对应的主机名,然后自动修改主机名,我原本是用vbs实现的,现在想改成au3

(?<=\n|^).+?(?=\h+00-02-EB-AB-92-B0)
这个能解释一下不?我诈一看会以为是乱码的……

guland 发表于 2010-12-23 08:40:05

用INI存储比较简单啊

3mile 发表于 2010-12-23 09:27:42

本帖最后由 3mile 于 2010-12-23 09:31 编辑

同楼上。如下INI形式,读取MAC,得到主机号

AA-AA-AA-AA-AA-AA=pc001
BB-BB-BB-BB-BB-BB=pc002
……
CC-CC-CC-CC-CC-CC=pc100
或如2楼思路。_filereadtoarray读入数组。

dearmb 发表于 2010-12-23 17:21:45

感谢各位,读取ini可以满足我的要求且实现简单~~

xowen 发表于 2010-12-23 17:35:35

本帖最后由 xowen 于 2010-12-23 17:43 编辑

一行一行度效率也不高,虽然不明白意思,但是似乎可以用以下方式提高效率:
1、先将TXT中的文本格式化:使用StringReplace将@CRLF替换成一个字符,这样文本中不具备回车。
2、然后在分成N个字符串:使用StringSplit按照替换的@CRLF字符分段。
3、然后在每个字符串中匹配,这样速度应该会快。
用这个匹配计算机名:(\w*?)\s+

chenronting 发表于 2010-12-23 18:43:13

呵呵, INI是好啊,规范

dearmb 发表于 2010-12-23 19:14:26

一行一行度效率也不高,虽然不明白意思,但是似乎可以用以下方式提高效率:
1、先将TXT中的文本格式化:使 ...
xowen 发表于 2010-12-23 17:35 http://autoitx.com/images/common/back.gif

决定用ini了,怎么都觉得简单
你说的方法应该也行,不过我需要把公司大概2000台机器做到这个对应表里,用你的方法会不会也很慢,呵呵,不知道了,反正决定ini了
页: [1]
查看完整版本: 【已解决】一行行读取文本,有什么好方法吗?