现有一个文本ip.txt 是美国的ip段列表共有30万条。
-----------txt--------------------------------------------
ip1 ip2 国家
3.0.12.0 3.0.12.255 United states
3.0.13.0 3.0.14.255 United states
3.0.15.0 3.0.15.255 United states
3.0.16.0 3.0.103.255 United states
3.0.104.0 3.0.104.255 United states
3.0.105.0 3.0.117.255 United states
3.0.118.0 3.0.118.255 United states
3.0.119.0 3.0.229.255 United states
3.0.230.0 3.0.230.255 United states
3.0.231.0 3.0.255.255 United states
3.2.0.0 3.2.2.255 United states
3.2.3.0 3.2.3.255 United states
... ...
... ...
85.32.145.144 85.32.145.151 United states
85.32.145.152 85.32.145.175 United states
85.35.145.200 85.35.145.207 United states
85.35.145.208 85.35.145.215 United states
85.35.145.216 85.35.145.223 United states
85.35.145.224 85.35.145.231 United states
85.35.145.232 85.35.145.239 United states
85.35.145.240 85.36.145.240 United states
85.36.145.241 85.37.189.255 United states
85.37.190.0 85.37.191.255 United states
----------txt------------------------------------------------
以上每条的含义是 从 "ip1" 到 "ip2" 属于 "国家"
即 从 3.0.12.0 到 3.0.12.255 属于 United states(美国)
3.0.13.0 到 3.0.14.255 属于 United states
3.0.15.0 到 3.0.15.255 属于 United states
3.0.16.0 到 3.0.103.255 属于 United states
依次类推
通过观察大家可以发现 大部分ip段是可以整合的。
对 “整合” 我简单解释以下。
一个ip我把他分为4个部分组成,即一个ip可以用 A.B.C.D 表示
例一:
----------------------------------------------
A.B.C.D A.B.C.D
3.0.12.0 3.0.12.255 United states
3.0.13.0 3.0.14.255 United states
3.0.15.0 3.0.15.255 United states
3.0.16.0 3.0.103.255 United states
3.0.104.0 3.0.104.255 United states
3.0.105.0 3.0.117.255 United states
3.0.118.0 3.0.118.255 United states
3.0.119.0 3.0.229.255 United states
3.0.230.0 3.0.230.255 United states
3.0.231.0 3.0.255.255 United states
3.2.0.0 3.2.2.255 United states
3.2.3.0 3.2.3.255 United states
-----------------------------------------------
打个简单比方:
--------------
1 2 黑色
5 6 黑色
7 9 黑色
100 102 黑色
107 109 黑色
110 112 黑色
--------------
那么将上面的整合:
1 2 黑色
5 9 黑色
100 102 黑色
107 112 黑色
--------------
再回到例一:
(因为每位ip 数字不能超过255,相当于到256就要进一位,)
3.0.12.255 的下一个ip就是 3.0.13.0
3.0.14.255 的下一个ip 就是 3.0.15.0
3.0.15.255 的下一个ip 就是 3.0.16.0
...
3.2.2.255 的下一个ip 就是 3.2.3.0
那么以上例一中ip段可以整合为:
3.0.12.0 3.0.255.255 United states
3.2.0.0 3.2.3.255 United states
例二:
---------
A.B.C.D A.B.C.D
85.32.145.144 85.32.145.151 United states
85.32.145.152 85.32.145.175 United states
85.35.145.200 85.35.145.207 United states
85.35.145.208 85.35.145.215 United states
85.35.145.216 85.35.145.223 United states
85.35.145.224 85.35.145.231 United states
85.35.145.232 85.35.145.239 United states
85.35.145.240 85.36.145.240 United states
85.36.145.241 85.37.189.255 United states
85.37.190.0 85.37.191.255 United states
---------
整合后为 :
---------
85.32.145.144 85.37.191.255 United states
---------
希望上面2个例子能解释清楚 “整合” 的含义。
一个ip我把他分为4个部分组成,即一个ip可以用 A.B.C.D 表示
我想将这个文本中ip的 B 段进行整合, 这样可以大大减少数据的处理量。
我的思路是:
如果对 ip中的 B C D 段都进行分析比较然后整合话,计算次数太多影响效率。
所以我把 CD 2段先去掉,只对 B 段进行比较整合。然后用0.0 和 255.255 来填充C.D 2段。
那么例一整合后的结果就是:
A.B.C.D A.B.C.D
3.0.0.0 3.0.255.255
3.2.0.0 3.2.255.255
例二整合后的结果就是:
A.B.C.D A.B.C.D
85.32.0.0 85.37.255.255
国家地址部分的数据不用输出。
由于水平有限,只能想出这样的笨办法,
我自己尝试写了一段代码,由于其中有大量的数据对比,用我字就写的这个代码处理完这个文本大概需要一个星期的时间,还
会出不少错误(让大家见笑了)。
所以请各位老师指教,有没更好更有效率的方法和代码。
可以用纯真 ip数据库 测试,将数据解压成文本就和我要处理的文本格式一样了。
http://www.crsky.com/soft/2611.html 下载地址
感谢exzzz的提醒
谢谢了。
Last edited by HAT on 2009-1-11 at 22:34 ]