ac5474012 发表于 2011-3-6 10:08:18

[求助]如何比对一个INI中的所有键名那几个最小?

本帖最后由 ac5474012 于 2011-3-8 17:12 编辑

如何比对一个INI中的所有键名那几个最小?我做了一个ini来记录时间,我想判断出在ini中那个时间最接近现在。时间计算打算用_DateDiff 来计算,我打算每次计算返回一个最接近现在的日期。ini文件中日期记录的数量大概有2000条。

另外还有一个问题想让会的人教教我
回复水木子

但是这个数组要如何写呢?$var[$sl]这样不行的
ac5474012 发表于 2011-3-8 15:02 http://www.autoitx.com/images/common/back.gif
   

暂时用了一把本办法写了一个,还有个问题。#include <Array.au3>       
#include <Date.au3>
$var = IniReadSection("H:\新.ini", "完成")
$sl = $var
Dim $a
If @error Then
    MsgBox(4096, "", "错误, 读取INI文件失败.")
Else
    For $i = 1 To $var
$riqijisuan = StringSplit($var[$i], "-")
_arrayadd($a,$riqijisuan)
    Next
EndIf
_ArrayDelete( $a,0)
MsgBox(0, '', '最接近的日期:' & _ArrayMax($a,1) & @CRLF & '最接远的日期:' & _ArrayMin($a,1))这里我每次必须删除0数组_ArrayDelete( $a,0)这是因为Dim $a,但是不这样声明又不行所以问问有什么办法解决?

水木子 发表于 2011-3-6 10:19:14

#include <Array.au3>
Global $avArray = ['2011:01:01 12:05', '2011:02:02 11:03', '2010:05:12 01:11', '2000:05:05 12:03', '2008:12:12 12:12']
MsgBox(0, '', '最接近的日期:' & _ArrayMax($avArray) & @CRLF & '最接远的日期:' & _ArrayMin($avArray))

ac5474012 发表于 2011-3-6 10:52:21

回复 2# 水木子


水木子 发表于 2011-3-6 10:19 http://www.autoitx.com/images/common/back.gif


请问如何将ini中2000多个非固定数量的数值全变成数组?

happytc 发表于 2011-3-6 10:57:54

_FileReadToArray()
IniReadSection()

水木子 发表于 2011-3-6 11:30:29

ini*函数的返回值本来就是数组啊!

ac5474012 发表于 2011-3-7 18:04:06

回复 5# 水木子

ini*函数的返回值本来就是数组啊!
水木子 发表于 2011-3-6 11:30 http://www.autoitx.com/images/common/back.gif

对啊!

ac5474012 发表于 2011-3-8 14:18:18

回复 4# happytc

_FileReadToArray()
IniReadSection()
happytc 发表于 2011-3-6 10:57 http://www.autoitx.com/images/common/back.gif

那我要找的是所有关键字中的数据比较,那我要先把所有的关键字放到一个文件里面吗?

happytc 发表于 2011-3-8 14:54:23

回复 7# ac5474012


不是直接就读ini的东西到数组了呀,你在数组比较就可以呀

ac5474012 发表于 2011-3-8 15:02:19

回复 5# 水木子

ini*函数的返回值本来就是数组啊!
水木子 发表于 2011-3-6 11:30 http://www.autoitx.com/images/common/back.gif

但是这个数组要如何写呢?$var[$sl]这样不行的

happytc 发表于 2011-3-8 15:11:28

回复 9# ac5474012

你不会看帮助呀,写得那么清楚,还有清析的例子,看你也不是新人了,灌了400多帖了

$var = IniReadSection("C:\Temp\myfile.ini", "section2")
If @error Then
    MsgBox(4096, "", "错误, 读取INI文件失败.")
Else
    For $i = 1 To $var
      MsgBox(4096, "", "关键字: " & $var[$i] & @CRLF & "值: " & $var[$i])
    Next
EndIf

ac5474012 发表于 2011-3-8 17:02:26

回复 10# happytc

$var = IniReadSection("C:\Temp\myfile.ini", "section2")
If @error Then
    MsgBox(4096, "", "错误, 读取INI文件失败.")
Else
    For $i = 1 To $var
      MsgBox(4096, "", "关键字: " & $var[$i] & @CRLF & "值: " & $var[$i])
    Next
EndIf

。。。那你说我要这个ini中的所有值做比较,在下面写_ArrayMax($a,1)这个$a应该写作为什么?

水木子 发表于 2011-3-8 17:21:17

既然说来说去问题都没解决,楼主为何不将你那ini文件放上来看看。

ac5474012 发表于 2011-3-8 17:27:00

回复 12# 水木子

既然说来说去问题都没解决,楼主为何不将你那ini文件放上来看看。
水木子 发表于 2011-3-8 17:21 http://www.autoitx.com/images/common/back.gif

[完成]
3213211=2009/09/12 00:00:00-2011/02/24 00:00:00
434228=1939/09/09 00:00:00-2011/02/24 00:00:00
5435343566=1999/09/09 04:00:00-2011/02/24 00:04:00
654645646=1949/09/09 00:00:00-2011/02/24 00:00:00
88940=1959/08/09 00:00:00-2011/02/24 00:00:00
76575=1999/07/09 01:00:00-2011/02/24 00:00:00
432432866=1999/09/01 06:00:00-2011/02/24 00:00:00
13213042=1997/09/09 05:04:00-2011/02/24 00:00:00
32132135=1299/09/09 05:02:00-2011/02/24 00:00:00
32318858=1999/09/09 00:00:00-2011/02/24 00:01:00
21312086=1999/09/09 00:00:00-2011/02/24 00:00:00
3213123357=1999/09/09 00:00:00-2011/02/24 00:00:00
21312318611=1399/09/09 00:00:00-2011/02/24 03:00:00

3mile 发表于 2011-3-8 18:39:14

回复 13# ac5474012
同样的思路变通一下.
#include <Date.au3>
#include <Array.au3>
;Global $avArray = ['2011/01/01 12:05', '2011/02/02 11:03', '2010/05/12 01:11', '2000/05/05 12:03', '2008/12/12 12:12']
$var = IniReadSection("Temp.ini", "完成")
If @error Then
    MsgBox(4096, "", "错误, 读取INI文件失败.")
Else
        local $var_array
    For $i = 1 To $var
                $var_array[$i]=$var[$i]
                $split=StringSplit($var[$i],"-",3)               
                $var_array[$i]=$split
                $var_array[$i]=$split
    Next       
EndIf
_ArrayDisplay($var_array)
MsgBox(0, '比较第一列时间', '最接近的日期:' & _Time_Max($var_Array,1) & @CRLF & '最接远的日期:' & _Time_Min($var_Array,1))
MsgBox(0, '比较第二列时间', '最接近的日期:' & _Time_Max($var_Array,2) & @CRLF & '最接远的日期:' & _Time_Min($var_Array,2))


func _Time_Max($array,$subitem=1)
        if Not IsArray($array) then
                SetError(1)
        Else
                local $temp
                for $i=0 to UBound($array)-1
                        $temp[$i] = $array[$i][$subitem]
                        $temp[$i] = _DateDiff( 's',$array[$i][$subitem],_NowCalc())
                Next
                _ArraySort($temp,0,0,0,1)
                return $temp
        EndIf
EndFunc
       
func _Time_Min($array,$subitem=1)
        if Not IsArray($array) then
                SetError(1)
        Else
                local $temp
                for $i=0 to UBound($array)-1
                        $temp[$i] = $array[$i][$subitem]
                        $temp[$i] = _DateDiff( 's',$array[$i][$subitem],_NowCalc())
                Next
                _ArraySort($temp,1,0,0,1)
                return $temp
        EndIf
EndFunc

netegg 发表于 2011-3-8 19:51:18

#include<array.au3>
Local $aA = IniReadSection('1.ini','完成')
_arraydisplay($aA, ' ')
_ArraySort($aA, 0, 0, 0, 1)
_arraydisplay($aA, ' ')
页: [1]
查看完整版本: [求助]如何比对一个INI中的所有键名那几个最小?