如何判定ini中不同字段名中关键值是否达到指定数量
ini配置aa=123
bb=1
aa=123
bb=1
aa=123
bb=2
求教,例:ini字段名都不同,我如何判断关键字bb中1有2个的话则自动判断2是否有2个,依次类推!
如果判定小于2个的话则写入一个
aa=123
bb=1;这个数值1,是判断过后小于2个的那个数值! 回复 1# abcd1234 $aStr = StringRegExp(FileRead('your.ini'), '(?m)^bb=1[\r\n]', 3)
If Not @error Then MsgBox(0, '匹配数量', UBound($aStr))
回复 2# user3000
那怎么给这段赋予循环判断呢,如果 bb=1 ,这个匹配等于3个的话,bb=1就自动加1,也就是bb=2,继续匹配,依次类推! 如果bb=1 (1这个数值是根据匹配小于3的数值,也包括bb=2;b=3.....)匹配小于3个的话,就弹出信息框! {:face (189):} 兄弟们,帮帮忙!~~~~ 本帖最后由 dunphy 于 2014-11-5 03:02 编辑
回复 4# abcd1234
举个批例子也不说清楚。
给你段代码,你看是不是这个意思。若字段里的BB值为1连续出现2个。则BB的值+1,,再接着判断字段里BB值为2的情况,若有2个,BB值再加1 .是不是这个意思。。
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiIPAddress.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <Array.au3>
Global Const $gc_formName = "配置文件"
Global $ini = @ScriptDir & "\*.ini"
Global $a_PznameA = "aa", $a_PznameB = "bb"
#Region
Global $gu_PzForm = GUICreate($gc_formName, 402, 288, 340, 128)
Global $gu_PzGroup1 = GUICtrlCreateGroup("配置文件", 13, 6, 374, 60)
Global $gu_PzInput1 = GUICtrlCreateInput("", 25, 32, 260, 21)
GUICtrlSetData($gu_PzInput1, $ini)
Global $gu_PzButton1 = GUICtrlCreateButton("随机写入(O)", 288, 30, 86, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
Global $gu_PzButton2 = GUICtrlCreateButton("关于(A)", 13, 250, 59, 25)
Global $gu_PzButton3 = GUICtrlCreateButton("输出", 264, 250, 59, 25)
Global $gu_PzButton4 = GUICtrlCreateButton("退出(X)", 328, 250, 59, 25)
GUISetState(@SW_SHOW)
#EndRegion
_Main() ;主函数开始
Exit
Func _Main()
Local $nMsg
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $gu_PzButton1
Local $path = FileSaveDialog("配置文件存储位置", _
@ScriptDir, "配置文件.ini (*.ini)|所有文件(*.*)", 1 + 8, _
"*.ini", $gu_PzForm)
If @error Then
MsgBox(16, "提示", "你未选择INI文件.")
Else
If FileExists( $path) = 1 Then FileDelete( $path)
Local $a_SectionName
Local $i, $b = UBound($a_SectionName)
For $i = 1 To $b - 1 Step 1
;;$a_SectionName = UBound($a_SectionName) - 1
$a_SectionName[$i] = "a" & $i
IniWrite( $path, $a_SectionName[$i], $a_PznameA, 123)
IniWrite( $path, $a_SectionName[$i], $a_PznameB, 1)
Next
GUICtrlSetData($gu_PzInput1, $path)
MsgBox(0, "提示:", "成功写入配置文件" & @CRLF & "请在当前程序目录查看")
EndIf
Case $gu_PzButton3
Local$path = GUICtrlRead($gu_PzInput1)
Global $sSection = IniReadSectionNames( $path)
;; _ArrayDisplay($sSection, "$sSection")
If @error Then
MsgBox(0, "提示", "请先创建后再输出查看")
ExitLoop
EndIf
Global $ArraySecName
For $i = 1 To UBound($ArraySecName) - 1
Local $pz_array = IniReadSection( $path, $sSection[$i])
$ArraySecName = "字段名"
$ArraySecName = "第一关键字"
$ArraySecName = "第一关键字的值"
$ArraySecName = "第二关键字"
$ArraySecName = "第二关键字的值"
$ArraySecName[$i] = $sSection[$i]
$ArraySecName[$i] = $pz_array
$ArraySecName[$i] = $pz_array
$ArraySecName[$i] = $pz_array
$ArraySecName[$i] = $pz_array
;If $ArraySecName[$I] = 1 Then
;MsgBox (0,"提示","字段"& $sSection[$I]&"中关健字bb值为1")
;EndIf
Next
_ArrayDisplay($ArraySecName, "$Array")
;;_Exists() ;如果连续二个的BB值为1,则数组中追加一字段
Case $gu_PzButton2
MsgBox(0 + 64, $gc_formName, "作者:#####")
Case $gu_PzButton4
Exit
EndSwitch
WEnd
EndFunc ;==>_main
看不懂。。。。 前来学习。。。。。。。。。。。。。。。。。。。。。。 本帖最后由 dunphy 于 2014-10-7 14:42 编辑
回复 6# netegg
前辈看不懂是不是因为他提的问题不具体???我感觉他的意思如同我现在创建的INI的代码,如果字段里有2个BB值为1,那么重新写入一个字段
AA=123
BB=2
然后再继续匹配,如果再往下,还有2个BB值为1
再重新写入一个字段
【X1】
AA=123
BB=2
判断完后,现在的新数组里如果匹配AA=2的次数小于3个的话MSGBOX提示一下
再载入新的数组,判断是否有2个BB值为2的情况,
如果有再写入BB=3
然后再枚举下去。。。 回复 8# dunphy
能否直接判断后输出为ini,帮下忙 回复 6# netegg
蛋蛋,帮着解决一下这个嘛,数组都列出来了。好像LZ是这个意思。现在有100个BB=1,
1. 从第一个元互索引开始判断,如果连续有3个BB=1 ,重新向另外一个新数组写一行并建赋值BB为2,并从现数组第4个元素索引继续判断至完......(如果小于3个BB=1的话信息提示).
2 .接着判断BB为2的情况
3,接着判断BB为3的情况
4.. 依次至完 整到数组里做,不是很简单嘛,dunphy,你不会这也想不到吧 理解上好像不是,好像是的一个项是,然后类推的意思 回复 10# dunphy
问的太笼统了点 回复 11# netegg
不是已经整到数组里面了的嘛 ,见5楼 ,只是如何来判定,如果有三个BB=1就重新定义数组。加个BB=2.如果小于3个就提示,然后再接着判定加到数组后面的BB=2的情况,如果BB=2的元素个数超过三个,就重新定义数组。向数组里写入BB=3。小于三个再提示。依次类推.比如BB=1的元素个数为16,BB=2的元素个数等于16/3 约等于5个,还有一个就提示,BB=3的情况就5/3 约等于1个,还有的就提示。我理解的LZ要表达的就是这个意思。 回复 14# dunphy
类似传递,或者是调用个自定义函数