找回密码
 加入
搜索
查看: 4130|回复: 8

[效率算法] INi文件转换的问题,请高手帮忙

  [复制链接]
发表于 2010-4-9 21:23:10 | 显示全部楼层 |阅读模式
本帖最后由 58fly 于 2010-4-9 21:29 编辑

[MAC绑定模块]
192.168.0.254=00-00-4f-67-00-d4
192.168.0.4=00-26-18-DF-46-55
192.168.0.5=00-26-18-DD-D9-EE
192.168.0.9=00-26-18-DD-DB-A2
192.168.0.10=00-26-18-DF-46-BE
192.168.0.11=00-26-18-DF-46-85
192.168.0.12=00-26-18-DF-44-D1

更改后:
[MAC绑定模块]
192.168.0.1=00-00-00-00-00-00
192.168.0.2=00-00-00-00-00-00
192.168.0.3=00-00-00-00-00-00
192.168.0.4=00-26-18-DF-46-55
192.168.0.5=00-26-18-DD-D9-EE
192.168.0.6=00-00-00-00-00-00
192.168.0.7=00-00-00-00-00-00
192.168.0.8=00-00-00-00-00-00
192.168.0.9=00-26-18-DD-DB-A2
192.168.0.10=00-26-18-DF-46-BE
192.168.0.11=00-26-18-DF-46-85
192.168.0.12=00-26-18-DF-44-D1
192.168.0.13=00-00-00-00-00-00
.....
192.168.0.253=00-00-00-00-00-00
192.168.0.254=00-00-4f-67-00-d4

实际功能就是IP地址排序,然后没有的自动补充,并设置MAC为0000000000原始的:
发表于 2010-4-9 21:27:24 | 显示全部楼层
[MAC绑定模块]
192.168.0.254=00-00-4f-67-00-d4
192.168.0.4=00-26-18-DF-46-55
192.168.0.5=00-26-18- ...
58fly 发表于 2010-4-9 21:23



    没有的自动补充  --- 你更改后的也没见补充完整吧 .2  .3  .6 ...
 楼主| 发表于 2010-4-9 21:28:38 | 显示全部楼层
afan那个问题我写的仓促,实际是自动补充的意思,我改一下,帮我看看
发表于 2010-4-9 21:59:45 | 显示全部楼层
For $i = 1 To 254
        $s = IniRead('ipmac.ini', 'MAC绑定模块', '192.168.0.' & $i, '00-00-00-00-00-00')
        IniWrite('new.ini', 'MAC绑定模块', '192.168.0.' & $i, $s)
Next
转化原来的ipmac.ini为new.ini

评分

参与人数 1金钱 +20 贡献 +2 收起 理由
afan + 20 + 2

查看全部评分

 楼主| 发表于 2010-4-9 22:23:27 | 显示全部楼层
$s = IniRead('ipmac.ini', 'MAC绑定模块', '192.168.0.' & $i, '00-00-00-00-00-00')还真的从来没这么用过..厉害
发表于 2010-4-9 22:54:01 | 显示全部楼层
Opt("MustDeclareVars", 1)
#include <Array.au3>


Global Const $sSrcIni = @ScriptDir & "\ipmac.ini", $sTarIni = @ScriptDir & "\new.ini"

If NOT FileExists($sSrcIni) Then Exit 1
ConvMAC()
Exit


Func ConvMAC()
        Local $aOldMAC, $aNewMAC[256][2], $sIPPre3, $iElement

        $aOldMAC = IniReadSection($sSrcIni, "MAC绑定模块")
        If $aOldMAC[0][0] < 1 Then Return SetError(1, 0, 0)
        If NOT StringRegExp($aOldMAC[1][0], "^((25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]?\d?\d)$") Then Return SetError(1, 0, 0)
        $sIPPre3 = StringLeft($aOldMAC[1][0], StringInStr($aOldMAC[1][0], ".", 0, -1))

        For $i = 1 To 255
                $aNewMAC[$i][0] = $sIPPre3 & $i
                $iElement = _ArraySearch($aOldMAC, $aNewMAC[$i][0], 1)
                If @error Then
                        $aNewMAC[$i][1] = "00-00-00-00-00-00"
                Else
                        $aNewMAC[$i][1] = StringUpper($aOldMAC[$iElement][1])
                EndIf
        Next

        IniWriteSection($sTarIni, "MAC绑定模块", $aNewMAC, 1)
        Return
EndFunc   ;==>ConvMAC

评分

参与人数 1威望 +1 金钱 +20 收起 理由
afan + 1 + 20

查看全部评分

发表于 2010-4-9 22:57:14 | 显示全部楼层
转化原来的ipmac.ini为new.ini
nmgwddj 发表于 2010-4-9 21:59



    这样应该会有不少耗时的I/O操作,改用以下写法可以快20倍左右,数据量越大差距将越大。
Local $out, $i, $s
For $i = 1 To 254
        $s = IniRead('1.ini', 'MAC绑定模块', '192.168.0.' & $i, '00-00-00-00-00-00')
        $out &= '192.168.0.' & $i & '=' & $s & @LF
Next
IniWriteSection('New.ini', 'MAC绑定模块', $out)
发表于 2010-4-9 22:59:18 | 显示全部楼层
方法如此之多 看来还是要学习啊
发表于 2010-4-9 23:21:54 | 显示全部楼层
$out &= '192.168.0.' & $i & '=' & $s & @LF
这句太精彩了,节省不少系统资源
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-16 07:45 , Processed in 0.079947 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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