找回密码
 加入
搜索
查看: 4673|回复: 14

[AU3基础] 如何读取含有多个相同的字段名的非标准ini?[已解决]

  [复制链接]
发表于 2010-8-7 18:42:01 | 显示全部楼层 |阅读模式
本帖最后由 zhhsh 于 2010-8-8 12:09 编辑

如题

比如说XP安装光盘中DOSNET.INF,里面有几个相同的字段名,但读出来的字段名只有一个,请问如何做到?

附上DOSNET.INF供分析
[FloppyFiles.0]
d1,disk1,disk101
d2,ntdetect.com


[FloppyFiles.1]
d1,1394bus.sys

[FloppyFiles.2]
d1,dmboot.sys


[FloppyFiles.3]
d1,spcmdcon.sys

[FloppyFiles.x]
d1,ntldr



[FloppyFiles.1]
d1,c_1252.nls
d1,c_437.nls
[FloppyFiles.3]
d1,kbdus.dll
[FloppyFiles.1]
d1,vgaoem.fon
d1,l_intl.nls

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-8-7 19:05:04 | 显示全部楼层
当成文本文件读取不知可否
发表于 2010-8-7 19:06:16 | 显示全部楼层
_FileReadToArray
--------------------------------------------------------------------------------

读取一个指定文件到一个数组.


#Include <File.au3>
_FileReadToArray($sFilePath, ByRef $aArray)
发表于 2010-8-7 19:22:55 | 显示全部楼层
为什么要弄成一样的字段名呢…
发表于 2010-8-7 19:33:02 | 显示全部楼层
本帖最后由 水木子 于 2010-8-7 19:38 编辑

回复 4# afan
这也不能怪他,那是inf 驱动文件,就是这个样子的。

以前用正则帮鲜奶折腾过,不过我的正则太烂了,真想看看前辈精彩的正则。
 楼主| 发表于 2010-8-7 20:02:11 | 显示全部楼层
M$的东西实在太麻烦。。。
发表于 2010-8-7 20:21:11 | 显示全部楼层
只能自编函数
 楼主| 发表于 2010-8-8 10:38:52 | 显示全部楼层
读ini中所有的字段名都行,
只剩下读字段名中数据
 楼主| 发表于 2010-8-8 10:42:49 | 显示全部楼层
不知循环读文件中的每一行行不行
发表于 2010-8-8 10:49:00 | 显示全部楼层
回复  afan
这也不能怪他,那是inf 驱动文件,就是这个样子的。

以前用正则帮鲜奶折腾过,不过我的正则 ...
水木子 发表于 2010-8-7 19:33



    用正则是肯定可以做到的,只不过貌似比较麻烦点…
发表于 2010-8-8 11:12:19 | 显示全部楼层
本帖最后由 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

评分

参与人数 1金钱 +20 收起 理由
zhhsh + 20 谢谢!

查看全部评分

 楼主| 发表于 2010-8-8 12:08:22 | 显示全部楼层
超版的正则表达式真牛,谢谢
问题解决了。
 楼主| 发表于 2010-8-8 12:10:26 | 显示全部楼层
超版您也有必要更新一下您的_ini.au3 UDF库

评分

参与人数 1金钱 +20 收起 理由
afan + 20 谢谢提醒

查看全部评分

发表于 2010-8-8 12:13:26 | 显示全部楼层
回复 13# zhhsh


    谢谢提醒~ 如果有此需要我会抽空更新一下。如果有对此函数的要求也可提出,使之更完善~
发表于 2010-12-3 00:44:58 | 显示全部楼层
日后慢慢研究研究
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-24 04:04 , Processed in 0.082905 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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