中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-13 14:26
47,812 主题排行 / 349,916 发帖 / 今日 0 篇 / 48,268 会员排行
DOS批处理 & 脚本技术(批处理室) » [已结]对ip段的整合,涉及超多次比较!
可打印版本  3,277 / 40
第31楼 exzzz 发表于 2009-01-11 17:17
初级用户 发帖 167 积分 194
明年开始我就不做移动的代维了,项目解散了,组员都走了。就剩下我了,boss说要调我去国税让我跟其他网络工程师学习网络,要学的东西可就多了。不过我也正好要学这方面。就好像算法里面的 IP换算成10进制一样,呵呵,昨晚还去翻了本CCNA的书才知道的。
第32楼 netbenton 发表于 2009-01-12 01:42
银牌会员 发帖 752 积分 1,916 来自 广西
我来追加一个(全精度的),16秒完成
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
title IP分段工具,开始时间是 %time%
cd. >分段结果.txt
set n=
set _h1=1
echo.&echo.&echo.&echo.
for /f "tokens=1-8,* delims=. " %%a in (ipdata.txt) do (
set _cu=0&set _e1=!_e!&set _f1=!_f!&set _g1=!_g!&set/a _h1=_h+1
if !_h!==255 (set _h1=0&set /a _g1=_g+1&if !_g!==255 (set _g1=0&set /a _f1=_f+1&if !_f!==255 (set _f1=0&set /a _e1=_e+1)))

if "!_from!"=="" set _from=%%a.%%b.%%c.%%d
if not !_e1!!_f1!!_g1!!_h1!==%%a%%b%%c%%d (if not "!_e!"=="" (echo !_from! !_e!.!_f!.!_g!.!_h! !_fi!>>分段结果.txt&set _from=%%a.%%b.%%c.%%d))
set _e=%%e&set _f=%%f&set _g=%%g&set _h=%%h
set _fi=%%i

set /a n+=1
set /p = 当前记录:!n!<nul

)

echo.
echo ********************
echo 结束时间是:%time%
echo ********************

pause

[ Last edited by netbenton on 2009-1-12 at 01:54 ]
第33楼 cz1314 发表于 2009-01-12 05:50
初级用户 发帖 43 积分 64
思路很牛b
思路很牛b

但是我不需要全精度的,
最合适的精度是 C 段 的差 小于100 就整合,大于100 分开。
------------
A1.B1.C1.D1 A2.B2.C2.D2
A3.B3.C3.D3 A4.B4.C4.D4
-------------------
也就是当 A2.B2 = A3.B3 的时候比较 C2和C3

当 C2-C3<=100 的时候 2段整合为:A1.B1.C1.D1 A4.B4.C4.D4

如果 C2-C3>100 不整合。

这是最适合的精度。。
第34楼 cz1314 发表于 2009-01-12 05:52
初级用户 发帖 43 积分 64
全精度的代码执行起来需要很厂时间,大概有400万条数据处理。



这是我修改 exzzz 发出的代码

处理完400万条数据在 10分钟以内

全精度的好象需要几个小时

[ Last edited by cz1314 on 2009-1-12 at 05:55 ]
第35楼 exzzz 发表于 2009-01-12 12:05
初级用户 发帖 167 积分 194
Originally posted by netbenton at 2009-1-12 01:42 AM:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
title IP分段工具,开始时间是 %time%
cd. >分段结果.txt
set n=
set _h1=1
echo.&echo.&echo.&echo.
for /f "tokens=1-8, ...



呵呵,我测试了一下,在我这台赛扬2.66的机器上,
将你我代码中所有有关 计数及屏显 的提示内容 rem 掉运行处理楼主提供的IPDATA.TXT。

你的算法需要14.3秒,我的算法用7.9秒。。。。。。
第36楼 netbenton 发表于 2009-01-12 20:09
银牌会员 发帖 752 积分 1,916 来自 广西
我的处理纯真网络解压出来的ip数据36万多条记录(全精度)
用时04:41秒
结果只有一条:
0.0.0.0 255.255.255.255 纯真网络 2009年1月10日IP数据

[ Last edited by netbenton on 2009-1-12 at 20:16 ]
第37楼 cz1314 发表于 2009-01-13 00:43
初级用户 发帖 43 积分 64
哈哈! netbenton 真幽默。你的代码的确不错!!!
第38楼 exzzz 发表于 2009-01-13 10:02
初级用户 发帖 167 积分 194
Originally posted by netbenton at 2009-1-12 08:09 PM:
我的处理纯真网络解压出来的ip数据36万多条记录(全精度)
用时04:41秒
结果只有一条:
0.0.0.0 255.255.255.255 纯真网络 2009年1月10日IP数据

[ Last edited by netbenton on 2009-1-12 at 20:16 ]



呵呵,我的也是。
第39楼 netbenton 发表于 2009-01-13 15:11
银牌会员 发帖 752 积分 1,916 来自 广西

但是我不需要全精度的,
最合适的精度是 C 段 的差 小于100 就整合,大于100 分开。
------------
A1.B1.C1.D1 A2.B2.C2.D2
A3.B3.C3.D3 A4.B4.C4.D4
也就是当 A2.B2 = A3.B3 的时候比较 C2和C3

当 C2-C3<=100 的时候 2段整合为:A1.B1.C1.D1 A4.B4.C4.D4

如果 C2-C3>100 不整合。

这是最适合的精度。。
...

那这样的也不整合吗?
1.0.0.15 1.1.255.255
1.2.0.0 1.2.12.17
第40楼 netbenton 发表于 2009-01-13 15:20
银牌会员 发帖 752 积分 1,916 来自 广西
大提速
::全精度比较
::处理楼主的ipdata.txt 用5秒,处理纯真的36万数据用1分17秒
::如果是400万数据,预计:13分左右


@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
title IP分段工具,开始时间是 %time%
cd. >分段结果.txt
set n=0
call :sub

echo.&echo.&echo.&echo.
for /f "tokens=1-8,* delims=. " %%a in (ipdata.txt) do (
if !_h!==256 (set _h=0&set /a _g+=1&if !_g!==256 (set _g=0&set /a _f+=1&if !_f!==256 (set _f=0&set /a _e+=1)))
if not !_e!!_f!!_g!!_h!==%%a%%b%%c%%d (echo !_fr! !_end!>>分段结果.txt&set _fr=%%a.%%b.%%c.%%d)
set _end=%%e.%%f.%%g.%%h
set _e=%%e&set _f=%%f&set _g=%%g&set/a _h=%%h+1
)
if not "!_g!"=="" echo !_fr! !_end!>>分段结果.txt
echo ********************
echo 结束时间是:%time%
echo ********************
pause
goto :eof

:sub
for /f "tokens=1-8,* delims=. " %%a in (ipdata.txt) do (
set _fr=%%a.%%b.%%c.%%d
set _e=%%a&set _f=%%b&set _g=%%c&set _h=%%d
goto :eof
)

[ Last edited by netbenton on 2009-1-15 at 20:46 ]
第41楼 cz1314 发表于 2009-01-14 00:29
初级用户 发帖 43 积分 64
Originally posted by netbenton at 2009-1-13 03:11 PM:

那这样的也不整合吗?
1.0.0.15 1.1.255.255
1.2.0.0 1.2.12.17



恩是个问题。但是可以用

(A2*65536+B2*256+C2)-(A2*65536+B3*256+C3)<>5 比较

这样可以吗?

[ Last edited by cz1314 on 2009-1-14 at 00:30 ]
上一页  1 2 3
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023