如何读取INI其中的数值,列出结果,用;隔开
比如1.ini中VOD|MOV1: MP3=2 GB D:\文件
VOD|MOV2: RM=512 MB D:\文件
VOD|MOV3: AVI=1 GB D:\文件
VOD|MOV4: MKV=256 MB D:\文件
如何读取其中的数值,列出为以下结果,用;隔开
MP3=2GB;RM=512MB;AVI=1GB;MKV=256MB;
各位大大帮帮忙!谢谢... $var = IniReadSection("1.ini", "VOD")
$result=""
If @error Then
MsgBox(4096, "", "Error occurred, probably no INI file.")
Else
For $i = 1 To $var
$strArr=StringSplit($var[$i]," ")
$str=$strArr & "="
$result=$result & $str
$strArr=StringSplit($var[$i]," ")
$str=$strArr & $strArr & ";"
$result=$result & $str
Next
EndIf
MsgBox(4096, "", $result) 本帖最后由 水木子 于 2010-6-27 10:28 编辑
脚本 与 1.ini 同目录下运行Local $sText, $sResult
$sText = FileRead('1.ini')
$aReg = StringRegExp($sText, ': (\w+=\d+ +) ', 3)
For $i = 0 To UBound($aReg) - 1
$sResult &= $aReg[$i] & ';'
Next
MsgBox(0, '结果', $sResult) 嘿嘿!谢谢两位大大! 本帖最后由 minbiao 于 2010-6-28 14:56 编辑
运用水木子大大给的代码,小弟写了一个批量处理的,但是遇到个问题,小弟新生,写的不好望指点!
#扫描'\文件'文件夹下的所有ini,列出VOD<>'1'的ini文件路径到'\Log.txt',读取'\Log.txt'所列出的文件路径,
逐个进行处理,把结果输出到'\pcname.ini'中。
遇到一个问题,就是输出的结果会重叠到下一行,如:
[列表]
D盘.ini=MP3=2 GB;RM=1 GB;AVI=768 MB;MKV=512MB;
E盘.ini=MP3=2 GB;RM=1 GB;AVI=768 MB;MKV=512MB;MP3=3 GB;RM=5 GB;AVI=1 GB;MKV=1 GB;
D盘.ini的结果会写到E盘.ini的前面, 应该怎么解决呢?
-----------------------------------------#include <File.au3>
$Dir = @ScriptDir & '\文件'
$File = _FileListToArray($Dir, '*.ini', 1)
If @error Then Exit MsgBox(48, "错误", "错误001!")
Local $sText, $sResult, $File
Dim $data = '', $txtFile = @ScriptDir & '\Log.txt', $aFile
For $i = 1 To $File
$s_File = $Dir & '\' & $File[$i]
$val = IniRead($s_File, "VOD", "VOD", "")
If $val <> '1' Then $data &= $s_File & @CRLF
Next
FileWrite($txtFile, $data)
_FileReadToArray($txtFile, $aFile)
If $aFile = "" Then
Exit
Else
For $i = 1 To $aFile
$sText = FileRead($aFile[$i])
$aReg = StringRegExp($sText, ': (\w+=\d+ +) ', 3)
For $ii = 0 To UBound($aReg) - 1
$sResult &= $aReg[$ii] & ';'
IniWrite(@ScriptDir & '\pcname.ini',"列表", $File[$i], $sResult)
Next
IniWrite($aFile[$i], "VOD", "VOD", "1")
Next
FileClose(FileOpen(@ScriptDir & '\Log.txt', 2));清空Log文件
Endif 小弟在线等! 大大们帮帮忙! 本帖最后由 afan 于 2010-6-28 18:38 编辑
24和25行换个位置;
27行前面加一行 $sResult = '' 本帖最后由 minbiao 于 2010-6-28 19:27 编辑
afan大大终于来了! 好马上试一下!
----------------------------------------------------------------------
OK啦! 谢谢afan大大! 本帖最后由 afan 于 2010-6-28 19:46 编辑
第28证明那个临时文件log.txt实属多余~#include <File.au3>
Dim $Dir = @ScriptDir & '\'
Dim $File = _FileListToArray($Dir, '*.ini', 1)
If @error Then Exit MsgBox(48, "错误", "未找到ini文件")
Dim $i, $val, $s_File, $sText, $aReg, $j
For $i = 1 To $File
$s_File = $Dir & '\' & $File[$i]
$val = IniRead($s_File, "VOD", "VOD", "")
If $val = '1' Then ContinueLoop
$sText = FileRead($s_File)
$aReg = StringRegExp($sText, '\:\h([^\h]+)\h([^\h]+)', 3)
If @error Then ContinueLoop
Local $sResult = ''
For $j = 0 To UBound($aReg) - 2 Step 2
$sResult &= $aReg[$j] & $aReg[$j + 1] & ';'
Next
IniWrite(@ScriptDir & '\pcname.ini', "列表", $File[$i], $sResult)
IniWrite($s_File, "VOD", "VOD", "1")
Next 明白!原来可以这么写! afan大大好厉害! 新手!学习了!谢谢!! 本帖最后由 minbiao 于 2010-6-30 16:05 编辑
如果*.ini中
VOD|MOV1: MP3=2 GB D:\文件
VOD|MOV2: RM=512 MB D:\文件
VOD|MOV3: AVI=1 GB D:\文件
VOD|MOV4: MKV=256 MB D:\文件
Disk|Disk Drive1=982 GB (C;D)
Disk|Disk Drive2=238 GB (E;F)
Partition1=C: (NTFS) 29996 MB free 10168 MB
Partition2=D: (NTFS) 948992 MB free 248108 MB
Partition3=E: (NTFS) 199987 MB free 48776 MB
Partition4=F: (NTFS) 37869 MB free 19953 MB
---------------------------------------
加写两个:
$aReg2 = StringRegExp($sText, 'Disk Drive+\d+=(.*+) ', 3)
$aReg3 = StringRegExp($sText, 'Partition+\d+=.* (\d+ +)', 3)
如何让列出的结果为:
VODSer.ini
MOV=MP3=2GB;RM=512MB;AVI=1GB;MKV=256MB;
Disk=982 GB;238 GB
Partition=10168 MB;248108 MB;48776 MB;19953 MB;
小弟搞了很久没搞好,分别用了三个For来处理,问题是:
列出结果的MOV那行是正确的,Disk和Partition会乱,不知道应该如果处理好,望指教! 这个其实可以先用iniread读取键值再正则 可能是我一来就直接用正则,误导了楼主的思路,实在抱歉啊! 能正则,我用三个for写会出现这样的结果:
MOV=MP3=2GB;RM=512MB;AVI=1GB;MKV=256MB;
Disk=982 GB;Partition=10168 MB;248108 MB;48776 MB;19953 MB;
;238 GB;
页:
[1]
2