[已解决]__ArraySorti对ini排序当数值大于10位时显示为2147483647如何解决?
本帖最后由 hlzxcjx 于 2011-10-22 19:39 编辑test.ini文件:
1=1234567890123
3=3333333333333
2=2222222222222
4=4444444444444
6=6666666666666
5=5555555555555排序函数:#include <Array.au3>
$var=IniReadSection ( "test.ini", "test" )
__ArraySort($var,1,1,0,1);降序
_ArrayDisplay($var)
IniDelete( "test.ini", "test")
for $i=1 to $var
;MsgBox(4096, "", "关键字:" & $var[$i] & @CRLF & "数值:" & $var[$i])
IniWrite( "test.ini", "test",$var[$i],$var[$i])
Next
;~ __ArraySort($var,0,1,0,1);升序
;~ _ArrayDisplay($var)
Func __ArraySort(ByRef $avArray, $iDescending = 0, $iStart = 0, $iEnd = 0, $iSubItem = 0)
If Not IsArray($avArray) Then Return SetError(1, 0, 0)
Local $iUBound = UBound($avArray) - 1
; Bounds checking
If $iEnd < 1 Or $iEnd > $iUBound Then $iEnd = $iUBound
If $iStart < 0 Then $iStart = 0
If $iStart > $iEnd Then Return SetError(2, 0, 0)
; Sort
Switch UBound($avArray, 0)
Case 1
__ArrayQuickSort1D($avArray, $iStart, $iEnd)
If $iDescending Then
For $i=$iStart to $iEnd
$avArray[$i]=StringFormat("%19d",$avArray[$i])
Next
_ArrayReverse($avArray, $iStart, $iEnd)
For $i=$iStart to $iEnd
$avArray[$i]=StringFormat("%1d",$avArray[$i])
Next
EndIf
Case 2
Local $iSubMax = UBound($avArray, 2) - 1
If $iSubItem > $iSubMax Then Return SetError(3, 0, 0)
If $iDescending Then
$iDescending = -1
Else
$iDescending = 1
EndIf
For $i=$iStart to $iEnd
$avArray[$i][$iSubMax]=StringFormat("%19d",$avArray[$i][$iSubMax])
Next
__ArrayQuickSort2D($avArray, $iDescending, $iStart, $iEnd, $iSubItem, $iSubMax)
For $i=$iStart to $iEnd
$avArray[$i][$iSubMax]=StringFormat("%1d",$avArray[$i][$iSubMax])
Next
Case Else
Return SetError(4, 0, 0)
EndSwitch
Return 1
EndFunc ;==>_ArraySort结果:
又学会一招 本帖最后由 lynfr8 于 2011-10-22 19:36 编辑
#include <Array.au3>
$var=IniReadSection ( "test.ini", "test" )
_ArrayDelete($var, 0)
_ArraySort($var,1,0,0,1);降序
_ArrayDisplay($var)
IniDelete( "test.ini", "test")
for $i=0 to $var-1
IniWrite( "test.ini", "test",$var[$i],$var[$i])
Next
回复 3# lynfr8
非常感谢!
不过第7行好像有点问题,改为:for $i=0 to $var-1;$i = 0后运行正常。 回复 4# hlzxcjx
谢谢提醒
备注的时候错删了 还是有问题!试试这个ini:
111=1234567890123
333=3333333333333
222=2222222222222
444=4444444444444
666=6666666666666
555=5555555555555上面的代码还是不行,总数$var已经改变!
代码已改为:#include <Array.au3>
$var=IniReadSection ( "test.ini", "test" )
;MsgBox(4096,"$var",$var)
$num=$var
_ArrayDelete($var, 0)
_ArraySort($var,1,0,0,1);降序
_ArrayDisplay($var)
IniDelete( "test.ini", "test")
for $i=0 to $num-1;$i = 0
; MsgBox(4096,$var, "关键字:" & $var[$i] & @CRLF & "数值:" & $var[$i]);这个$var有误!
IniWrite( "test.ini", "test",$var[$i],$var[$i])
Next
页:
[1]