如何读取含有多个相同的字段名的非标准ini?[已解决]
本帖最后由 zhhsh 于 2010-8-8 12:09 编辑如题
比如说XP安装光盘中DOSNET.INF,里面有几个相同的字段名,但读出来的字段名只有一个,请问如何做到?
附上DOSNET.INF供分析
d1,disk1,disk101
d2,ntdetect.com
d1,1394bus.sys
d1,dmboot.sys
d1,spcmdcon.sys
d1,ntldr
d1,c_1252.nls
d1,c_437.nls
d1,kbdus.dll
d1,vgaoem.fon
d1,l_intl.nls 当成文本文件读取不知可否 _FileReadToArray
--------------------------------------------------------------------------------
读取一个指定文件到一个数组.
#Include <File.au3>
_FileReadToArray($sFilePath, ByRef $aArray) 为什么要弄成一样的字段名呢… 本帖最后由 水木子 于 2010-8-7 19:38 编辑
回复 4# afan
这也不能怪他,那是inf 驱动文件,就是这个样子的。
以前用正则帮鲜奶折腾过,不过我的正则太烂了,真想看看前辈精彩的正则。 M$的东西实在太麻烦。。。 只能自编函数 读ini中所有的字段名都行,
只剩下读字段名中数据 不知循环读文件中的每一行行不行 回复afan
这也不能怪他,那是inf 驱动文件,就是这个样子的。
以前用正则帮鲜奶折腾过,不过我的正则 ...
水木子 发表于 2010-8-7 19:33 http://www.autoitx.com/images/common/back.gif
用正则是肯定可以做到的,只不过貌似比较麻烦点… 本帖最后由 afan 于 2010-8-8 11:46 编辑
#include <Array.au3>
$a = _IniReadSection_line_all('DOSNET.INF', 'FloppyFiles.1')
_ArrayDisplay($a, 'FloppyFiles.1')
$a = _IniReadSection_line_all('DOSNET.INF', 'FloppyFiles.3')
_ArrayDisplay($a, 'FloppyFiles.3')
Func _IniReadSection_line_all($iFile, $Section)
Local $s_File = FileRead($iFile), $line_all
Local $s_Sec = StringRegExp($s_File, '(?s)(?i)(?:^|\n)\h*\[\h*' & $Section & '\h*\](.+?)(?=\r\n\h*\[|$)', 3)
If @error Then Return SetError(1, 0, 0)
For $i = 0 To UBound($s_Sec) - 1
$line_all &= $s_Sec[$i]
Next
Local $s_line = StringRegExp($line_all, '\n\h*([^;\s].*?)\h*(?=\r?\n|$)', 3)
Return $s_line
EndFunc ;==>_IniReadSection_line_all
超版的正则表达式真牛,谢谢
问题解决了。 超版您也有必要更新一下您的_ini.au3 UDF库 回复 13# zhhsh
谢谢提醒~ 如果有此需要我会抽空更新一下。如果有对此函数的要求也可提出,使之更完善~ 日后慢慢研究研究
页:
[1]