找回密码
 加入
搜索
查看: 3989|回复: 5

[效率算法] [已解决]__ArraySorti对ini排序当数值大于10位时显示为2147483647如何解决?

  [复制链接]
发表于 2011-10-22 14:32:10 | 显示全部楼层 |阅读模式
本帖最后由 hlzxcjx 于 2011-10-22 19:39 编辑

test.ini文件:
[test]
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[0][0]
         ;MsgBox(4096, "", "关键字:" & $var[$i][0] & @CRLF & "数值:" & $var[$i][1])
        IniWrite( "test.ini", "test",$var[$i][0],$var[$i][1])
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
结果:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-10-22 16:38:17 | 显示全部楼层
又学会一招
发表于 2011-10-22 17:45:19 | 显示全部楼层
本帖最后由 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[0][0]-1
        IniWrite( "test.ini", "test",$var[$i][0],$var[$i][1])
Next

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2011-10-22 19:31:48 | 显示全部楼层
回复 3# lynfr8


    非常感谢!
不过第7行好像有点问题,改为:
for $i=0 to $var[0][0]-1;$i = 0
后运行正常。
发表于 2011-10-22 19:36:10 | 显示全部楼层
回复 4# hlzxcjx


   谢谢提醒
   备注的时候错删了
 楼主| 发表于 2011-10-22 20:20:33 | 显示全部楼层
还是有问题!试试这个ini:
[test]
111=1234567890123
333=3333333333333
222=2222222222222
444=4444444444444
666=6666666666666
555=5555555555555
上面的代码还是不行,总数$var[0][0]已经改变!
代码已改为:
#include <Array.au3>
$var=IniReadSection ( "test.ini", "test" )
;MsgBox(4096,"$var[0][0]",$var[0][0])
$num=$var[0][0]
_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[0][0], "关键字:" & $var[$i][0] & @CRLF & "数值:" & $var[$i][1]);这个$var[0][0]有误!
        IniWrite( "test.ini", "test",$var[$i][0],$var[$i][1])
Next
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-21 01:59 , Processed in 0.080289 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表