找回密码
 加入
搜索
查看: 6468|回复: 11

[系统综合] [已解决]如何返回ini文件中(用时间计算)最大的数值?

  [复制链接]
发表于 2011-3-26 13:44:28 | 显示全部楼层 |阅读模式
本帖最后由 ac5474012 于 2011-3-27 09:55 编辑


需要计算出一个ini文件中,在一个"字段名"中距离当前时间最远时间的"数值"。然后返回这个"数值",和这个数值的关键字"关键字".。

下面所显示的只是这个ini的一小部分,在下面这部分距离现在最远的时间是1999/02/24 00:09:00,那么我需要返回的就是1999/02/24 00:09:00和856480。

另外:这个判断可以忽略小时,也就是说可以只需要精确到天。但是返回的关键字必须完全返回。不过最好别忽略。

ini文件内容
[SQL]
33223=2011/02/24 01:06:34
145634=2011/02/24 10:00:00
856480=1999/02/24 00:09:00
91789=2001/02/24 00:00:00
1898583=2011/04/24 00:00:00
求赐教~

用与下一个对比的方法,并且利用了_Ini.au3。_Ini.au3可以再论坛下载
#include <_Ini.au3>
#include <Date.au3>
Local $var = _IniReadSection('D:\idSQL.ini', 'SQL'), $i, $x, $xN
If @error Then
        Exit -1
EndIf
$x = $var[1][1]
$t = _NowCalc()
For $i = 2 To $var[0][0]
$iDateCalc = _DateDiff( 's',$x,$t)
$iDateCalc2 = _DateDiff( 's',$var[$i][1],$t)
If $iDateCalc2 > $iDateCalc  Then
       $x = $var[$i][1]
       $xN = $var[$i][0]
EndIf
Next
MsgBox(0, $xN, $x)
发表于 2011-3-26 14:39:10 | 显示全部楼层
Local $var = IniReadSection('test.ini', 'SQL'), $i, $x, $xN
If @error Then Exit -1
$x = $var[1][1]
For $i = 2 To $var[0][0]
        If $var[$i][1] < $x Then
                $x = $var[$i][1]
                $xN = $var[$i][0]
        EndIf
Next
MsgBox(0, $xN, $x)

评分

参与人数 1金钱 +22 贡献 +3 收起 理由
ac5474012 + 22 + 3 谢,但还有一事不明

查看全部评分

 楼主| 发表于 2011-3-26 15:43:59 | 显示全部楼层
回复 2# afan

谢谢,我改了下。但是有个问题。

我发现一个奇怪的问题,对比到1024行就不向下对比了请问为什么?怎么解决?
#include <Date.au3>
Local $var = IniReadSection('\idSQL.ini', 'SQL'), $i, $x, $xN
If @error Then 
        MsgBox(0,"","")
Exit -1
EndIf
$x = $var[1][1]
$t=        _NowCalc()
For $i = 2 To $var[0][0]
$iDateCalc = _DateDiff( 's',$x,$t)
$iDateCalc2 = _DateDiff( 's',$var[$i][1],$t)
;~ MsgBox(0,$iDateCalc2,$iDateCalc)
If $iDateCalc2 > $iDateCalc  Then
       $x = $var[$i][1]
       $xN = $var[$i][0]
EndIf        
Next
MsgBox(0, $xN, $x)
发表于 2011-3-26 16:41:06 | 显示全部楼层
IniReadSection : 只有字段中前 32767 字符被正常返回
可以试试我那个 _ini.au3

评分

参与人数 1金钱 +22 收起 理由
ac5474012 + 22

查看全部评分

发表于 2011-3-26 21:20:54 | 显示全部楼层
不知道我想的对不对,我提取出所有的时间字段,然后去除中间的斜杠,直接获得最大的那个!然后我再把含有这个时间的那一行的信息返回不就可以了吗? 是我理解有错误吗?

评分

参与人数 1金钱 +10 收起 理由
ac5474012 + 10

查看全部评分

发表于 2011-3-26 21:59:44 | 显示全部楼层
本帖最后由 水木子 于 2011-3-26 22:07 编辑

这个问题楼主以前不是问过吗!
#include <Array.au3>
$sText = FileRead('Test.ini')
$aRe = StringRegExp($sText, '(?<==)[^\r]+', 3)
MsgBox(0, '', '最小值:' & _ArrayMin($aRe) & @CRLF & '最大值:' & _ArrayMax($aRe))

评分

参与人数 1金钱 +10 收起 理由
ac5474012 + 10

查看全部评分

 楼主| 发表于 2011-3-27 09:40:44 | 显示全部楼层
回复 6# 水木子

水木,你是那个什么天煞孤星吗?
你这种方法的话是可以精确到天的,但是不能精确到小时,因为我用的是标准计算时间2010/07/08 00:00:00,不过也没什么~ 精确到天也可以,上次那个帖子我知道,但是我忘了为什么昨天我不用上次那个方法了。我用与下一个对比的方法做了一个,速度还行克服了ini的字符限制就可以用了。
 楼主| 发表于 2011-3-27 09:42:14 | 显示全部楼层
回复 5# love5173

那还不如水木的,我弄了个复杂的在上面。
 楼主| 发表于 2011-3-27 10:18:51 | 显示全部楼层
回复 4# afan

hi 还有个问题,我如果做自定义函数就报错。

脚本
#include <_Ini.au3>
$idSQLLJ ='D:\au3\idSQL.ini'
$eerr = far($idSQLLJ)
MsgBox(0,"",$eerr)
Func far($idSQLLJ)
#include <_Ini.au3>
#include <Date.au3>
Local $var = _IniReadSection($idSQLLJ, 'SQL'), $i, $x, $xN
If @error Then
        Exit -1
EndIf
$x = $var[1][1]
$t = _NowCalc()
For $i = 2 To $var[0][0]
        $iDateCalc = _DateDiff('s', $x, $t)
        $iDateCalc2 = _DateDiff('s', $var[$i][1], $t)
        If $iDateCalc2 > $iDateCalc Then
                $x = $var[$i][1]
                $xN = $var[$i][0]
        EndIf
Next
Return $xN
;~ MsgBox(0, $xN, $x)
EndFunc
错误
[主体]计算idSQL中距现最长的时间.au3(35,10) : WARNING: already included file: D:\au3\AUTOIT_3.3.6.1PRE\Include\_Ini.au3
#include <_Ini.au3>
~~~~~~~~~^
D:\au3\AUTOIT_3.3.6.1PRE\Include\_Ini.au3(47,1) : 错误: 表达式错误
Func
^
D:\au3\进行\第四次导出\实验室\时间优先级判定\[主体]计算idSQL中距现最长的时间.au3 - 1 error(s), 1 warning(s)
 $var[$i][1]
                $xN = $var[$i][0]
        EndIf
Next
Return $xN
;~
发表于 2011-3-27 11:41:45 | 显示全部楼层
#include 这些写到 Func 外面~
 楼主| 发表于 2011-3-27 12:26:14 | 显示全部楼层
回复 10# afan


    哇,问题解决啦
发表于 2011-3-29 12:36:30 | 显示全部楼层
高深莫测,绝非我辈能看得懂的,飘过~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-2 10:36 , Processed in 0.126703 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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