找回密码
 加入
搜索
查看: 5234|回复: 14

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

 火.. [复制链接]
发表于 2011-3-6 10:08:18 | 显示全部楼层 |阅读模式
本帖最后由 ac5474012 于 2011-3-8 17:12 编辑

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

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

但是这个数组要如何写呢?$var[$sl]这样不行的
ac5474012 发表于 2011-3-8 15:02

   

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

评分

参与人数 1金钱 +10 收起 理由
ac5474012 + 10 谢谢,但是还有问题。

查看全部评分

 楼主| 发表于 2011-3-6 10:52:21 | 显示全部楼层
回复 2# 水木子

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



请问如何将ini中2000多个非固定数量的数值全变成数组?
发表于 2011-3-6 10:57:54 | 显示全部楼层
_FileReadToArray()
IniReadSection()

评分

参与人数 1金钱 +22 收起 理由
ac5474012 + 22 谢谢,但是还有问题

查看全部评分

发表于 2011-3-6 11:30:29 | 显示全部楼层
ini*函数的返回值本来就是数组啊!
 楼主| 发表于 2011-3-7 18:04:06 | 显示全部楼层
回复 5# 水木子

ini*函数的返回值本来就是数组啊!
水木子 发表于 2011-3-6 11:30


对啊!
 楼主| 发表于 2011-3-8 14:18:18 | 显示全部楼层
回复 4# happytc

_FileReadToArray()
IniReadSection()
happytc 发表于 2011-3-6 10:57


那我要找的是所有关键字中的数据比较,那我要先把所有的关键字放到一个文件里面吗?
发表于 2011-3-8 14:54:23 | 显示全部楼层
回复 7# ac5474012


不是直接就读ini的东西到数组了呀,你在数组比较就可以呀
 楼主| 发表于 2011-3-8 15:02:19 | 显示全部楼层
回复 5# 水木子

ini*函数的返回值本来就是数组啊!
水木子 发表于 2011-3-6 11:30


但是这个数组要如何写呢?$var[$sl]这样不行的
发表于 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[0][0]
        MsgBox(4096, "", "关键字: " & $var[$i][0] & @CRLF & "值: " & $var[$i][1])
    Next
EndIf

评分

参与人数 1金钱 +10 收起 理由
ac5474012 + 10 多谢帮助,在来看看

查看全部评分

 楼主| 发表于 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[0][0]
        MsgBox(4096, "", "关键字: " & $var[$i][0] & @CRLF & "值: " & $var[$i][1])
    Next
EndIf

。。。那你说我要这个ini中的所有值做比较,在下面写_ArrayMax($a,1)这个$a应该写作为什么?
发表于 2011-3-8 17:21:17 | 显示全部楼层
既然说来说去问题都没解决,楼主为何不将你那ini文件放上来看看。
 楼主| 发表于 2011-3-8 17:27:00 | 显示全部楼层
回复 12# 水木子

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


[完成]
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
发表于 2011-3-8 18:39:14 | 显示全部楼层
回复 13# ac5474012
同样的思路变通一下.
#include <Date.au3>
#include <Array.au3>
;Global $avArray[5] = ['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[UBound($var)][3]
    For $i = 1 To $var[0][0]
                $var_array[$i][0]=$var[$i][0]
                $split=StringSplit($var[$i][1],"-",3)                
                $var_array[$i][1]=$split[0]
                $var_array[$i][2]=$split[1]
    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[UBound($array)][2]
                for $i=0 to UBound($array)-1
                        $temp[$i][0] = $array[$i][$subitem]
                        $temp[$i][1] = _DateDiff( 's',$array[$i][$subitem],_NowCalc())
                Next
                _ArraySort($temp,0,0,0,1)
                return $temp[1][0]
        EndIf
EndFunc
        
func _Time_Min($array,$subitem=1)
        if Not IsArray($array) then 
                SetError(1)
        Else
                local $temp[UBound($array)][2]
                for $i=0 to UBound($array)-1
                        $temp[$i][0] = $array[$i][$subitem]
                        $temp[$i][1] = _DateDiff( 's',$array[$i][$subitem],_NowCalc())
                Next
                _ArraySort($temp,1,0,0,1)
                return $temp[1][0]
        EndIf
EndFunc
发表于 2011-3-8 19:51:18 | 显示全部楼层
#include<array.au3>
Local $aA = IniReadSection('1.ini','完成')
_arraydisplay($aA, ' ')
_ArraySort($aA, 0, 0, 0, 1)
_arraydisplay($aA, ' ')
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-21 13:24 , Processed in 0.083418 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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