SHINE 发表于 2011-10-18 13:27:59

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

本帖最后由 SHINE 于 2011-10-19 10:51 编辑

如标题,从excel单元格中读取数据,因为此数据在excel本身就有多行,读到ini中后也是,如下面item5和 item6,现在想吧这个数据再从此ini中读出来,写到listview中去,请问各位大侠该怎么做呢?谢谢!
PS:以下只列出一条数据,实际上还会有,,.........~~

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

tryhi 发表于 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&''
        $zd = StringRegExp($text,'(?m)(?<=\['&$ziduan&'\])[\s\S]+(?=\[.*\])',3)
        If @error Then Return $morenzhi
        $zdx = $zd&@CRLF&'75#?k25^h54$>4t8c6d<='
        $jieguo = StringRegExp($zdx,'(?<='&$guanjianzi&')[\s\S]*?(?=\v.+=)',3)
        If @error Then Return $morenzhi
        Return $jieguo
EndFunc

menfan1 发表于 2011-10-18 14:58:04

函数_IniRead_tryhi引用时漏了下划线哈

tryhi 发表于 2011-10-18 15:02:00

函数_IniRead_tryhi引用时漏了下划线哈
menfan1 发表于 2011-10-18 14:58 http://www.autoitx.com/images/common/back.gif


    什么意思

131738 发表于 2011-10-18 16:04:26

回复 4# tryhi

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

函数名前面 _

afan 发表于 2011-10-18 16:18:29

加个返回数组的#include <Array.au3>
Local $Str = _
                '' & @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, '其中元素为: ' & @LF & $aKV)
_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, '(?s)\v?(\V+)=(.+?)(?=\v*(?:\V+=|\[|$))', 3)
        If @error Then Return SetError(2, 0, -1)
        Local $i, $ii = 1, $aKV = []
        For $i = 0 To UBound($aKVtmp) - 1 Step 2
                $aKV[$ii] = $aKVtmp[$i]
                $aKV[$ii] = $aKVtmp[$i + 1]
                $ii += 1
        Next
        Return $aKV
EndFunc   ;==>_IniReadSection_vc

xtziqian1yan 发表于 2011-10-18 16:42:30

新手学习...

SHINE 发表于 2011-10-19 01:32:43

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

afan 发表于 2011-10-19 01:42:56

回复 8# SHINE


    6#的函数 _IniReadSection_vc() 完全适用你附件中的范本。你都不测试的吗?

menfan1 发表于 2011-10-19 09:33:48

_IniReadSection_vc不错哈

seniors 发表于 2011-10-19 10:05:29

膜拜正则,头大啊

''
'75#?k25^h54$>4t8c6d<='
大海的,这些加上去是什么?

SHINE 发表于 2011-10-19 10:33:01

谢谢afan 和tryhi 的代码,搞定了~~
得找点正则式的资料学习去了~~~
页: [1]
查看完整版本: 【已解决】请教----ini关键字后面的内容有分行,如何读取出来?