找回密码
 加入
搜索
查看: 3994|回复: 11

[AU3基础] 【已解决】请教----ini关键字后面的内容有分行,如何读取出来?

 火.. [复制链接]
发表于 2011-10-18 13:27:59 | 显示全部楼层 |阅读模式
本帖最后由 SHINE 于 2011-10-19 10:51 编辑

如标题,从excel单元格中读取数据,因为此数据在excel本身就有多行,读到ini中后也是,如下面item5  和 item6,现在想吧这个数据再从此ini中读出来,写到listview中去,请问各位大侠该怎么做呢?谢谢!
PS:以下只列出一条数据,实际上还会有[FOUND2],[FOUND3],[FOUND4].........~~
[FOUND1]
item1=20110505000000
item2=c0ff08a
item3=systemwide
item4=u2_6
item5=    %FAIL - Slot 4 channel 6 Digital looback test compare hi           
                %FAIL - Slot 4 channel 6 Digital looback IOH test         
item6=change u2_7 fail
            change u2_6 pass
item7=Pass
item8=20110509000000
发表于 2011-10-18 14:34:39 | 显示全部楼层
本帖最后由 tryhi 于 2011-10-18 18:38 编辑

写个很菜的函数给你用
iniread换成_IniRead_tryhi使用

$aaaa = _IniRead_tryhi('1.ini','FOUND1','item5','')
MsgBox(0,0,$aaaa)



Func _IniRead_tryhi($ininame,$ziduan,$guanjianzi,$morenzhi)
        $text0 = FileRead($ininame)
        $text = $text0&@CRLF&'[75h54$#?k4t8c6d25^><]'
        $zd = StringRegExp($text,'(?m)(?<=\['&$ziduan&'\])[\s\S]+(?=\[.*\])',3)
        If @error Then Return $morenzhi
        $zdx = $zd[0]&@CRLF&'75#?k25^h54$>4t8c6d<='
        $jieguo = StringRegExp($zdx,'(?<='&$guanjianzi&')[\s\S]*?(?=\v.+=)',3)
        If @error Then Return $morenzhi
        Return $jieguo[0]
EndFunc
发表于 2011-10-18 14:58:04 | 显示全部楼层
函数_IniRead_tryhi引用时漏了下划线哈

评分

参与人数 1金钱 +20 贡献 +2 收起 理由
tryhi + 20 + 2 多谢提醒

查看全部评分

发表于 2011-10-18 15:02:00 | 显示全部楼层
函数_IniRead_tryhi引用时漏了下划线哈
menfan1 发表于 2011-10-18 14:58



    什么意思
发表于 2011-10-18 16:04:26 | 显示全部楼层
回复 4# tryhi

代码第一行: $aaaa = IniRead_tryhi('1.ini','FOUND1','item5','')

函数名前面 _

评分

参与人数 1金钱 +20 贡献 +2 收起 理由
tryhi + 20 + 2 多谢提醒

查看全部评分

发表于 2011-10-18 16:18:29 | 显示全部楼层
加个返回数组的
#include <Array.au3>
Local $Str = _
                '[FOUND1]' & @CRLF & _
                'item1=20110505000000' & @CRLF & _
                'item2=c0ff08a' & @CRLF & _
                'item3=systemwide' & @CRLF & _
                'item4=u2_6' & @CRLF & _
                'item5=    %FAIL - Slot 4 channel 6 Digital looback test compare hi           ' & @CRLF & _
                '                %FAIL - Slot 4 channel 6 Digital looback IOH test          ' & @CRLF & _
                'item6=change u2_7 fail' & @CRLF & _
                '            change u2_6 pass' & @CRLF & _
                'item7=Pass' & @CRLF & _
                'item8=20110509000000'
$ini = '1.ini'
If Not FileExists($ini) Then FileWrite($ini, $Str)




$aKV = _IniReadSection_vc($ini, 'FOUND1')
If Not @error Then MsgBox(0, '数组元素数量: ' & $aKV[0][0], '其中[5]元素为: ' & @LF & $aKV[5][1])
_ArrayDisplay($aKV, UBound($aKV))

Func _IniReadSection_vc($ini, $Section)
        ;$Ini:ini文件路径;$Section:字段名;返回值:正确-2维数组
        Local $aStr = StringRegExp(FileRead($ini), '(?si)(?:^|\n)\h*\[' & $Section & '\]\h*\v+(.+?)(?=\v+\h*\[|$)', 1)
        If @error Then Return SetError(1, 0, -1)
        Local $aKVtmp = StringRegExp($aStr[0], '(?s)\v?(\V+)=(.+?)(?=\v*(?:\V+=|\[|$))', 3)
        If @error Then Return SetError(2, 0, -1)
        Local $i, $ii = 1, $aKV[UBound($aKVtmp) / 2 + 1][2] = [[UBound($aKVtmp) / 2]]
        For $i = 0 To UBound($aKVtmp) - 1 Step 2
                $aKV[$ii][0] = $aKVtmp[$i]
                $aKV[$ii][1] = $aKVtmp[$i + 1]
                $ii += 1
        Next
        Return $aKV
EndFunc   ;==>_IniReadSection_vc

评分

参与人数 1金钱 +40 贡献 +5 收起 理由
tryhi + 40 + 5 学习了

查看全部评分

发表于 2011-10-18 16:42:30 | 显示全部楼层
新手学习...
 楼主| 发表于 2011-10-19 01:32:43 | 显示全部楼层
谢谢各位,这个可以读了,只是tryhi 给出的函数取出来的值多了一个“=”,但对我影响不大。
但是现在又碰到个比较扯的问题:如附件中 item5,在这个文件里面看起来是没有跳行的,
但 1. 使用iniread只能读到前半截;
   2. 使用上面_IniRead_tryhi可以全部读出来,再写到一个edit框里面的时候看起来跟在这个文件一样,没有跳行。
现在希望写到edit框里面后能跳行~~半天没折腾出来~~
PS:将item5这句拷贝出来粘贴到word里面,可以看到它其实是跳行的~~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-10-19 01:42:56 | 显示全部楼层
回复 8# SHINE


    6#的函数 _IniReadSection_vc() 完全适用你附件中的范本。你都不测试的吗?
发表于 2011-10-19 09:33:48 | 显示全部楼层
_IniReadSection_vc不错哈
发表于 2011-10-19 10:05:29 | 显示全部楼层
膜拜正则,头大啊

'[75h54$#?k4t8c6d25^><]'
'75#?k25^h54$>4t8c6d<='
大海的,这些加上去是什么?
 楼主| 发表于 2011-10-19 10:33:01 | 显示全部楼层
谢谢afan 和tryhi 的代码,搞定了~~
得找点正则式的资料学习去了~~~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-1 12:17 , Processed in 0.084379 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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