dunphy
发表于 2014-11-4 15:19:19
本帖最后由 dunphy 于 2014-11-5 02:37 编辑
回复 15# netegg
如何来筛刷呢? 假设BB=1的情况有4999个,那不是要循环12次才能筛刷完?如5楼写入数组后,像我这样循环完了,怎么重新义新数组并加提示? 我不知道如何整理这些数组了
#include <Array.au3>
Global $gc_IniFile = @ScriptDir & "\aa.ini"
Global $Pzname1 = "aa", $Pzname2 = "bb"
Local $sSection = IniReadSectionNames($gc_IniFile) ;返回字段名
Local $a = 2
Local $a_bb ;创建一个数组来展示
$a_bb = $sSection
$a_bb = 'bb'
$a_bb = 1
;;Local $c = Mod($sSection, $a)
For $I = 1 To $a_bb
$a_bb[$I] = Floor($a_bb[($I - 1)] / $a) ;除以2取整舍去小数部份
$a_bb[$I] = 'bb'
$a_bb[$I] = $I + 1
If $a_bb[$I] = 1 Then
Local $vol_i = $I ;记录元素的个数
ExitLoop
EndIf
Next
ReDim $a_bb[$vol_i + 1]
_ArrayDisplay($a_bb, "$a_bb")
;读取文件到数组
Local $a_SecName, $I ;5001
For $I = 1 To $a_bb ;1-5000
Local $a_KeyWord = IniReadSection($gc_IniFile, $sSection[$I]) ;返回关键字
$a_SecName = "字段名"
$a_SecName = "第一关键字"
$a_SecName = "第一关键字的值"
$a_SecName = "第二关键字"
$a_SecName = "第二关键字的值"
$a_SecName[$I] = $sSection[$I]
$a_SecName[$I] = $a_KeyWord
$a_SecName[$I] = $a_KeyWord
$a_SecName[$I] = $a_KeyWord
$a_SecName[$I] = $a_KeyWord
Next
If Mod($sSection, $a) = 1 Then
MsgBox(0, "提示", "存在不同的项" & "在第" & $sSection & "行")
EndIf
_ArrayDisplay($a_SecName, "配置文件数组")
Local $m, $k
For $m = 1 To UBound($a_bb) - 1 Step 1
If Mod($a_bb[$m], $a) = 1 Then
MsgBox(0, "提示", "存在不同的项" & "在第" & $a_bb[$m] & "行")
EndIf
;5001
Local $I, $j = 1, $p = 1 ;定义数组$ARAY2来存放判定后的值
Local $array2[$a_bb[$m] + 1]
For $I = 2 To $a_bb[$m - 1] Step 2 ;2-5000
If StringCompare($a_SecName[$I], $a_SecName[$j]) = 0 Then ; 两两比较,如果连续二个的BB值为1,则追加一字段,并赋值给BB=2
$array2[$p] = "a" & ($a_bb + 1 + $k)
$array2[$p] = $Pzname1
$array2[$p] = 123
$array2[$p] = $Pzname2
$array2[$p] = $a_bb[$m]
;IniWrite ( "文件名", "字段", "关键字", "值" )
;IniWrite($gc_IniFile, "a"&$k, $Pzname1, 123) ;向字段名a101 中写入aa=123
;IniWrite($gc_IniFile, "a"&$k, $Pzname2, 2) ;向字段名a101 中写入BB=2
EndIf
$p += 1
$j += 2
$k += 1
Next
_ArrayDisplay($array2, "$array2")
Next
wangms
发表于 2014-11-4 18:04:45
学习学习、、、、、、、、、、、、、
abcd1234
发表于 2014-11-5 12:37:46
回复 16# dunphy
aa=123456
bb=1
aa=45125
bb=1
aa=74582
bb=2
就比方说,我的配置如上,去判断,设值,如bb=1 文件里面存在2个的话,那就判断bb=2有没有2个,有的话继续类推,反之,如果bb=2 只有1个,那么我就在添加一个(下方),一次类推!
aa=123
bb=2
wangms
发表于 2014-11-5 18:57:11
前来学习。。。。。。。。。。。。
dunphy
发表于 2014-11-5 22:38:37
本帖最后由 dunphy 于 2014-11-5 23:22 编辑
回复 18# abcd1234
5楼就说你,举个批例子都说不清楚,也不知道是不是我理解的太简单了,建议贴上你原来的配置文件.....
我用数组是随机举例,如你的配置所说,应先判断再提示,直到判断BB=3.BB=4..... BB=N 完,不能在判断中在原数组或者原配置文件写入一个段名和值,只可以重新写入另一个配置文件或者在另一个数组设置一个段名和值,也不知道你最后要展示给大家的是什么。。因为你例出的段名和值太短,都不知道你要表达的是什么意思。。。。
提问: 1,如果BB=1只有一个或者如我举例BB=1的情况为奇数,不是两两相比较么,如果判断至最后只有一个怎么办,还要向新配置文件中写入下面所示的么?
aa=123
bb=1
看了你原配置文件,也就是说,里面也有BB=2.BB=3......BB=N。。 举个示例见下: 我暂且举例N到5 (LZ你就不能把你的配置文件贴出来么?)也不知道你是不是这种情况。。只能猜罗
aa=123456
bb=1
aa=45125
bb=1
aa=452125
bb=1
aa=74582
bb=2
aa=724582
bb=2
aa=7282
bb=3
aa=7272
bb=3
aa=7272
bb=4
aa=72721
bb=5
如上的配置文件,
提问: 2: 先判断BB=1的情况是否为2个,(或者说为偶数个,不知道你是不是这个意思),(如果为1或者说为奇数个该怎么办??),
提问:3: 如果是2个(或者偶数个,也不知你是不是这个意思)那么判断BB=2的情况是不是也是2个,
提问:4 : 如果判断出BB=2的情况为1个,或者说奇数个。在另外的段里写入
aa=123
bb=2
提问: 5: 这里的段名A1是不是指判断为 BB=1 情况为1的时候(或者奇数个),才向新配置文件中写入段名A1,和 值AA=123
提问: 6: 当判断 原配置文件bb的值=2的时候,(包不包括上面这个重新向新配置文件写入的段名和值) ..如果不包括,原配置文件BB=2的情况为1个或者偶数个后,应该向新配置文件写入新的段名?)写法:
AA=123
bb=37: 是否就这样筛刷到完。。。
最好楼主请将你的配置文件代码贴出来
abcd1234
发表于 2014-11-7 22:00:23
aa=123456
bb=1
aa=45125
bb=1
aa=452125
bb=1
aa=74582
bb=2
aa=724582
bb=2
aa=7282
bb=3
aa=7272
bb=3
aa=7272
bb=4
aa=72721
bb=5
比如,[]内不固定值,aa=也是不固定值的!bb=是1~n,
AA=123
bb=1
如果我固定为8个,我点击下按钮,就开始去判断bb=1是不是有8个[如上]的配置,当然,bb=1怎么都不会超过8个,如果判断bb=1购8个,那么,就开始判断bb=2是不是有8个,如果只有7个,那么我就添加一个,到添加完毕后,按钮过程结束{如下}
;不固定值
AA=123;不固定值
bb=2
我再次点击按钮,就像上面一次判断bb=1等于8个不,等于就继续bb=2判断,依次类推,没达到8个,就在配置文件里添加一个[如下]
;不固定值
AA=123;不固定值
bb=3
添加一次,就完成了一个按钮的操作,后面点击按钮,则如上判断,然后添加
netegg
发表于 2014-11-10 08:09:55
回复 16# dunphy
不要定义固定数组,dim一个只有一个元素的数组,然后redim
dunphy
发表于 2014-11-10 20:44:14
回复 23# netegg
嗯。我今天有点事,下来我研究研究
dunphy
发表于 2014-11-10 20:47:23
本帖最后由 dunphy 于 2014-11-10 20:55 编辑
回复 21# abcd1234
我现在都还似懂非懂你提的问题,不过大概快要明白了
你3楼说了,不够你所要筛刷的上限数就要弹出信息框提示,
提问1:如你所设的匹配数为8,当BB=1小于8个的时候提不提示??
这里大于8个的时候就在未尾写入一个
;段名不固定
AA=232 ;值232不固定,AA要固定撒吗?????
BB=2
提问2:当BB=2 至N的的时候,每按一次键去判断,当小于你所设的匹配数8,也不提示了吗?
abcd1234
发表于 2014-11-10 22:07:49
不用提示,判断bb=1,小于8个的话就写入
;段名不固定
AA=232 ;值232不固定,AA要固定撒吗?????
BB=1;这个与上面判断的数值一样!
如果bb=1等于8个,就判断bb=2等于8个不,如果小于8个就添加
;段名不固定
AA=232 ;值232不固定,AA要固定撒吗?????
BB=2;这个与上面判断的数值一样!
依次类推!~~
user3000
发表于 2014-11-11 20:52:58
描述不清的问题竟然能讨论得这么热闹,真出乎我的意料啊.
按楼主的一再描述,问题关键在确定总个数少于8个的 'bb=N', 这个N是多少吧?
感觉用个递归就解决了.
楼主用你自己的INI文件测试吧.Global Const $iCount = 8
Local $text = ClipGet();FileRead('your.ini')
Local $key = 'bb'
Local $val = 1
Local $num = _get_my_val($text, $key, $val)
MsgBox(64, 'result', $key & '=' & $val & @CRLF & '个数:' & $num)
Func _get_my_val($sText, $sKey, ByRef $iVal)
Local $iRe = 0
Local $sMatch = '(?m)^' & $sKey & '=' & $iVal & '[\r\n]'
Local $aStr = StringRegExp($sText, $sMatch, 3)
If Not @error Then
If UBound($aStr) >= $iCount Then
$iVal += 1
Return _get_my_val($sText, $sKey, $iVal)
Else
$iRe = UBound($aStr)
EndIf
EndIf
Return $iRe
EndFunc
abcd1234
发表于 2014-11-12 08:42:33
回复 27# user3000
{:face (356):}讨论的最高境界就是,明知不可为而为之,延伸出另一种问题出来! 哈哈! 感谢各位同仁!
dunphy
发表于 2014-11-17 21:02:37
本帖最后由 dunphy 于 2014-11-27 23:16 编辑
回复 27# abcd1234
今天有空改了改,随机了100个,段名不固定了,AA的值不固定了,然后平均分配了一下,BB =1;2;3;4;5的情况各20,你看你的例子才出来。。我先贴代码
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiIPAddress.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <Array.au3>
HotKeySet("{ESC}", "HotKeyPressed")
Global Const $gc_formName = "配置文件"
Global $ini = @ScriptDir & "\*.ini"
Global $a_PznameA = "aa", $a_PznameB = "bb"
Local $a_bbval, $P = 1
For $i = 1 To 5
$a_bbval[$i] = $P
$P += 1
Next
#Region
Global $gu_PzForm = GUICreate("gc_formName", 403, 289, 340, 128)
Global $gu_PzGroup1 = GUICtrlCreateGroup(" 设置随机数", 16, 8, 377, 49)
Global $gu_PzInput1 = GUICtrlCreateInput("", 39, 23, 41, 21, $ES_READONLY)
Global $gu_PzLabel1 = GUICtrlCreateLabel("个随机数", 84, 30, 52, 17)
Global $gu_PzButton1 = GUICtrlCreateButton("设置", 304, 24, 51, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
Global $gu_PzGroup2 = GUICtrlCreateGroup("设置配置文件", 13, 62, 382, 68)
Global $gu_PzInput2 = GUICtrlCreateInput("", 33, 88, 244, 21)
GUICtrlSetData($gu_PzInput2, $ini)
Global $gu_PzButton2 = GUICtrlCreateButton("随机写数", 296, 86, 70, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
Global $gu_PzGroup3 = GUICtrlCreateGroup(" 设置匹配值", 16, 136, 377, 57)
Global $gu_PzInput3 = GUICtrlCreateInput("", 36, 157, 49, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
Global $gu_PzButton3 = GUICtrlCreateButton("关于(A)", 13, 250, 59, 25)
Global $gu_PzButton4 = GUICtrlCreateButton("判断", 264, 250, 59, 25)
Global $gu_PzButton5 = 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 $Number = Random(1, 29, 1)
GUICtrlSetData($gu_PzInput1, Random(150, 200, 1))
Local $pz_rdnum = GUICtrlRead($gu_PzInput1)
MsgBox(0, "提示", "准备输入" & $pz_rdnum & "个随机数", 1)
Case $gu_PzButton2
If GUICtrlRead($gu_PzInput1) = "" Then
MsgBox(16, "提示", "请先设置随机数")
Else
Global $path = FileSaveDialog("配置文件存储位置", _
@ScriptDir, "配置文件.ini (*.ini)|所有文件(*.*)", 1 + 8, _
"*.ini", $gu_PzForm)
If @error Then
MsgBox(16, "提示", "你未选择INI文件.")
Else
If FileExists($path) = 1 Then FileDelete($path)
Global $a_Numbers = _RandomNumber()
; _SortArray($a_Numbers) ;从小到大排序
Local $i, $j = UBound($a_Numbers) - 1, $P = 1
For $i = 1 To 8 Step 1
IniWrite($path, $a_Numbers[$i], $a_PznameA, $a_Numbers[$j])
IniWrite($path, $a_Numbers[$i], $a_PznameB, $a_bbval)
$j -= 1
Next
For $i = 9 To 16 Step 1
IniWrite($path, $a_Numbers[$i], $a_PznameA, $a_Numbers[$j])
IniWrite($path, $a_Numbers[$i], $a_PznameB, $a_bbval)
$j -= 1
Next
For $i = 17 To 24 Step 1
IniWrite($path, $a_Numbers[$i], $a_PznameA, $a_Numbers[$j])
IniWrite($path, $a_Numbers[$i], $a_PznameB, $a_bbval)
$j -= 1
Next
For $i = 25 To 32 Step 1
IniWrite($path, $a_Numbers[$i], $a_PznameA, $a_Numbers[$j])
IniWrite($path, $a_Numbers[$i], $a_PznameB, $a_bbval)
$j -= 1
Next
For $i = 33 To 40 Step 1
IniWrite($path, $a_Numbers[$i], $a_PznameA, $a_Numbers[$j])
IniWrite($path, $a_Numbers[$i], $a_PznameB, $a_bbval)
$j -= 1
Next
GUICtrlSetData($gu_PzInput2, $path)
MsgBox(0, "提示:", "成功写入配置文件" & @CRLF & "请在当前程序目录查看")
EndIf
EndIf
Case $gu_PzButton4
_readSecName()
_Exists()
Case $gu_PzButton3
MsgBox(0 + 64, $gc_formName, "提示:" & @CRLF & "1.先设置随机数" _
& @CR & "2.保存文件并随机写数" _
& @CR & "3.设置查寻值并判断。")
Case $gu_PzButton5
Exit
EndSwitch
WEnd
EndFunc ;==>_Main
Func _RandomNumber()
Local $a_Numbers, $P = 1
While $P <=GUICtrlRead($gu_PzInput1) ;随机 所设的上限值 个四位正整数
Local $Number = StringFormat("%03s", Random(1000, 8000, 1))
Local $i, $f = 1
For $i = 1 To UBound($a_Numbers, 1) - 1
If $a_Numbers[$i] = $Number Then
$f = 0
ExitLoop
EndIf
Next
If $f = 1 Then
ReDim $a_Numbers[$P + 1]
$a_Numbers[$P] = $Number
$P += 1
EndIf
WEnd
;; _ArrayDisplay( $a_Numbers," $a_Numbers")
Return $a_Numbers
EndFunc ;==>_RandomNumber
Func _readSecName()
If GUICtrlRead($gu_PzInput1) = "" Then
MsgBox(16, "提示", "请先设置随机数再判断")
Else
Local $sSection = IniReadSectionNames(GUICtrlRead($gu_PzInput2))
If @error Then
MsgBox(16, "提示", "先配置文件地址再判断")
Else
Local $a_SecName[$sSection + 1]
For $i = 1 To UBound($a_SecName) - 1
Local $pz_array = IniReadSection($path, $sSection[$i])
$a_SecName = "字段名"
$a_SecName = "第一关键字"
$a_SecName = "第一关键字的值"
$a_SecName = "第二关键字"
$a_SecName = "第二关键字的值"
$a_SecName[$i] = $sSection[$i]
$a_SecName[$i] = $pz_array
$a_SecName[$i] = $pz_array
$a_SecName[$i] = $pz_array
$a_SecName[$i] = $pz_array
Next
EndIf
EndIf
;;_ArrayDisplay($a_SecName, "$a_SecName")
Return $a_SecName
EndFunc ;==>_readSecName
Func _Exists()
Local $SearchVal = GUICtrlRead($gu_PzInput3)
If $SearchVal = "" Then
MsgBox(16, "提示", "请输入查寻值", 1)
ElseIf StringIsInt($SearchVal) = "" Then
MsgBox(16, "提示", "你输入查寻值为" & $SearchVal & @CRLF & "你输入的值不为数字请重新输入")
Else
Local $i
For $i = 1 To UBound($a_bbval) - 1
Local $a_SecName = _readSecName()
Local $iIndex = _ArrayFindAll($a_SecName, $a_bbval[$i], Default, Default, Default, Default, 4)
TrayTip("现在有" & UBound($iIndex) & "个BB=" & $a_bbval[$i] & @CRLF & ",你的匹配值为" & $SearchVal, "提示", 1)
If UBound($iIndex) < $SearchVal Then ; 小于所设的匹配值则写入一个BB=1
Local $p
Local $n = $SearchVal - UBound($iIndex)
For $p=1 To $n
Local $j = Random(100, GUICtrlRead($gu_PzInput1), 1)
Local $k = Random(100, GUICtrlRead($gu_PzInput1), 1)
IniWrite(GUICtrlRead($gu_PzInput2), $a_Numbers[$j], $a_PznameA, $a_Numbers[$k])
IniWrite(GUICtrlRead($gu_PzInput2), $a_Numbers[$j], $a_PznameB, $a_bbval[$i])
Next
EndIf
_ArrayDisplay($a_SecName, "$a_SecName")
Next
EndIf
EndFunc ;==>_Exists
Func HotKeyPressed()
Switch @HotKeyPressed ; 最后按下的热键.
Case "{ESC}" ; {ESC} 是"退出"热键.
Exit
EndSwitch
EndFunc ;==>HotKeyPressed
dunphy
发表于 2014-11-17 21:29:17
本帖最后由 dunphy 于 2014-11-27 19:43 编辑
回复 25# abcd1234
按25L 你所说,(也就是判断28楼例子里的aa.ini不同字段关键值达到所设的数量)
依照28L的例子。如果你所设的值为11就开始判断了
1。 循规判断BB=1--BB=5的数量"8"小于11的时候
IF "8"< 11 then;(我平均分配了8个) 如果小于11个,则写入
IniWrite($path,"随意段名", $a_PznameA, "随意值")
IniWrite($path, "同上的段名", $a_PznameB, 1)
endif
循环BB=2,BB=3。BB=4,BB=5
最后,应该都是11个。 是不是这个意思? 应该解决了。
wangms
发表于 2014-11-20 15:40:04
前来学习、、、、、、、、、、、、、、、、、、