【已解决】请教----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 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
函数_IniRead_tryhi引用时漏了下划线哈 函数_IniRead_tryhi引用时漏了下划线哈
menfan1 发表于 2011-10-18 14:58 http://www.autoitx.com/images/common/back.gif
什么意思 回复 4# tryhi
代码第一行: $aaaa = IniRead_tryhi('1.ini','FOUND1','item5','')
函数名前面 _ 加个返回数组的#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
新手学习... 谢谢各位,这个可以读了,只是tryhi 给出的函数取出来的值多了一个“=”,但对我影响不大。
但是现在又碰到个比较扯的问题:如附件中 item5,在这个文件里面看起来是没有跳行的,
但 1. 使用iniread只能读到前半截;
2. 使用上面_IniRead_tryhi可以全部读出来,再写到一个edit框里面的时候看起来跟在这个文件一样,没有跳行。
现在希望写到edit框里面后能跳行~~半天没折腾出来~~
PS:将item5这句拷贝出来粘贴到word里面,可以看到它其实是跳行的~~ 回复 8# SHINE
6#的函数 _IniReadSection_vc() 完全适用你附件中的范本。你都不测试的吗? _IniReadSection_vc不错哈 膜拜正则,头大啊
''
'75#?k25^h54$>4t8c6d<='
大海的,这些加上去是什么? 谢谢afan 和tryhi 的代码,搞定了~~
得找点正则式的资料学习去了~~~
页:
[1]