|
cz1314
初级用户
 
积分 64
发帖 43
注册 2007-11-12
状态 离线
|
|
2007-11-12 23:18 |
|
|
lxmxn
版主
       
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第 2 楼』:
使用 LLM 解释/回答一下
如果A段不同,则继续选择下面的ip进行A段的比较。
如果第一行和第二行的A段不同,那么是拿第三行和第一行比较,还是拿第三行和第二行比较,还是比较第一行和第二行后面的两行(即第三行和第四行)?
|
|
2007-11-12 23:30 |
|
|
lxmxn
版主
       
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
|
2007-11-12 23:34 |
|
|
cz1314
初级用户
 
积分 64
发帖 43
注册 2007-11-12
状态 离线
|
|
2007-11-12 23:47 |
|
|
cz1314
初级用户
 
积分 64
发帖 43
注册 2007-11-12
状态 离线
|
『第 5 楼』:
使用 LLM 解释/回答一下
Originally posted by lxmxn at 2007-11-12 11:30 PM:
如果第一行和第二行的A段不同,那么是拿第三行和第一行比较,还是拿第三行和第二行比较,还是比较第一行和第二行后面的两行(即第三行和第四行)?
因为从纯真ip数据库上取下来的原始数据都是按ip 顺序排列好了的!
所以如果 第一行和第二行的A段不同 ,就直接比较 第二行和第三行的A段
|
|
2007-11-12 23:51 |
|
|
everest79
金牌会员
      一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
|
2007-11-12 23:59 |
|
|
cz1314
初级用户
 
积分 64
发帖 43
注册 2007-11-12
状态 离线
|
『第 7 楼』:
使用 LLM 解释/回答一下
Originally posted by everest79 at 2007-11-12 11:59 PM:
不需要考虚后边那些地址注释?例如我把龙岗的跟罗湖的合并在一起
不用 文字全部可以去掉!
其实主要 是整理 ip 的 a段和b段! c d 都可以不考虑!
我有思路 可是不会些!! 郁闷啊!!
|
|
2007-11-13 00:36 |
|
|
cz1314
初级用户
 
积分 64
发帖 43
注册 2007-11-12
状态 离线
|
『第 8 楼』:
使用 LLM 解释/回答一下
大哥能留下你的qq吗?
我在非常批处理 和 百度知道都提问了
可惜么人能帮我!
那位高手能帮帮我 啊! 感激不尽!
|
|
2007-11-13 00:40 |
|
|
genteman
初级用户
 
积分 90
发帖 43
注册 2007-10-31
状态 离线
|
『第 9 楼』:
使用 LLM 解释/回答一下
有空我来帮你写吧,这个用二进制去解决会容易很多。
这两天工作忙,加我qq聊吧58280608
|
|
2007-11-13 10:03 |
|
|
everest79
金牌会员
      一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第 10 楼』:
使用 LLM 解释/回答一下
@echo off
set text=a,b,c,e,f,g,h
for /f "tokens=1-8* delims=. " %%a in (ip.txt) do (
call :x1 %%a %%b %%c %%d %%e %%f %%g %%h
)
call :txout
echo -------------------------------------------------------
for /f "tokens=1-8* delims=. " %%a in (ip.txt) do (
set/a ao=%%a,bo=%%b,co=%%c,do=%%d,eo=%%e,fo=%%f,go=%%g,ho=%%h
call :x2
)
goto end
:x1
if not defined ao (
set/a ao=%1,bo=%2,co=%3,do=%4,eo=%5,fo=%6,go=%7,ho=%8&&goto :eof
) else (
if not defined an (
set/a an=%1,bn=%2,cn=%3,dn=%4,en=%5,fn=%6,gn=%7,hn=%8)
)
set/a 1/(ao-en) 2>nul&&call :txout&&call :clear "%text%" "%%%%xo"&&goto x1
if %bo% geq %fn% (set/a B=bo-fn) else (set/a B=fn-bo)
if %b% leq 1 (
set/a eo=en,fo=fn,go=gn,ho=hn
call :clear "%text%" "%%%%xn"
) else (
call :txout
call :clear "%text%" "%%%%xo"
goto x1
)
goto :eof
:x2
set/a aaa=((bo-fo)*2+1)%%2*(bo-fo),1/(aaa/6) 2>nul||goto txout
set/a loop=aaa/5,zzz=aaa%%5,fo=bo
for /l %%x in (1,1,%loop%) do (
set/a fo+=5
call :txout
set/a bo+=5
)
set/a bo=fo,fo+=zzz
call :txout
goto :eof
:clear
for %%x in (%~1) do set %~2=%~3
goto :eof
:txout
echo %ao%.%bo%.%co%.%do% %eo%.%fo%.%go%.%ho%
goto :eof
:end
pause
goto :eof
现写的,你发的例子没问题
|
|
2007-11-13 10:32 |
|
|
genteman
初级用户
 
积分 90
发帖 43
注册 2007-10-31
状态 离线
|
|
2007-11-13 11:15 |
|
|
cz1314
初级用户
 
积分 64
发帖 43
注册 2007-11-12
状态 离线
|
『第 12 楼』:
非常感谢10楼的大哥!
使用 LLM 解释/回答一下
万分感谢10楼的朋友,但貌似还有点小问题。
由于我太菜,看不大懂你写的内容。你能把思路和每小段代码的功能注释下吗?
下面是我自己写的一点,只能在A段相同的时候比较 B 段和合并 B 段。
由于是初学,代码写的很垃圾,请大侠们不要怜惜口水,多多指教。
@echo off
@for /f "eol= tokens=1,2 delims= " %%i in (ip.txt) do echo %%i %%j>>tmp.txt
:去点
setlocal ENABLEDELAYEDEXPANSION
set FILENAME=tmp.txt
SET PH=%FILENAME:~0,-1%
set STR1=.
SET STR2=
for /f "tokens=* delims= " %%a in (%FILENAME%) do (
set n=%%a
set n=!n:%STR1%=%STR2%!
echo.!n!>>%PH%
)
DEL %FILENAME%
copy %PH% %FILENAME%
del %PH%
:去掉CD段
@echo :::::由于不考虑C D段iip,所以将每行后面的ip的 B段 进一位,这样会方便很多,而且不会漏掉ip段::::::
@for /f "eol= tokens=1,2,3,4,5,6 delims= " %%a in (tmp.txt) do (
set /a Num=%%f+1
echo %%a %%b %%e !Num! >>tmp1.txt
)
del tmp.txt
:去掉256
@echo ::::因为上面将b段加1,所以如果原来的b段是255就会变成266了,呵呵:::
setlocal ENABLEDELAYEDEXPANSION
set FILENAME=tmp1.txt
SET PH=%FILENAME:~0,-1%
set STR1=256
SET STR2=255
for /f "tokens=* delims= " %%a in (%FILENAME%) do (
set n=%%a
set n=!n:%STR1%=%STR2%!
echo.!n!>>%PH%
)
DEL %FILENAME%
copy %PH% %FILENAME%
del %PH%
endlocal enabledelayedexpansion
@echo :::::::::::::::: ::::::::::::::::::::
for /f "delims=" %%i in (tmp1.txt) do (
if not defined %%i set %%i=A & echo %%i>>1.txt)
:两行合一行
cls
set num=0
setlocal enabledelayedexpansion
for /f "delims=" %%i in (1.txt) do (
set /a num+=1
set str=!str! %%i
if !num! equ 2 echo !str!>>2.txt&& set num=0 & set str=
)
endlocal enabledelayedexpansion
:判断是否存在相同的B段
@for /f "eol= tokens=1,2,3,4,5,6,7,8 delims= " %%1 in (2.txt) do (
if not %%4 LSS %%6 goto 合并B段
)
del 2.txt
del tmp.txt
@for /f "eol= tokens=1,2,3,4 delims= " %%i in (1.txt) do (
echo %%i.%%j.0.0 %%k.%%l.0.0>>ok.txt
)
exit
:合并B段
del 1.txt
@for /f "eol= tokens=1,2,3,4,5,6,7,8 delims= " %%1 in (2.txt) do (
if %%4 GEQ %%6 (
echo %%1 %%2 %%7 %%8 >> 1.txt
) else (
echo %%1 %%2 %%3 %%4 >> 1.txt
echo %%5 %%6 %%7 %%8 >> 1.txt
)
)
del 2.txt
goto 两行合一行
我写的这个代码存在2个很大的问题不知道怎么解决
一
只能在 A 段相同的情况下比较和合并B段。
如果A段不同就会出现这样的错误:
————————————————————
202.103.24.68 202.103.25.0
203.103.103.0 204.105.255.0
————————————————————
会错误的将以上ip段整理成
202.103.0.0 204.106.0.0
二
在比较合并B 段的时候,
代码中 “:两行合一行”这部分 有很大问题,
当总行数为奇数时会把最后一行ip忽略掉,每比较一次都会忽略一行。
以上2个问题请大侠门指点!!
小第万分感激!!
Last edited by cz1314 on 2007-11-13 at 12:02 PM ]
|
|
2007-11-13 11:45 |
|
|
huziivy
初级用户
 
积分 23
发帖 17
注册 2007-11-10
状态 离线
|
|
2007-11-13 13:42 |
|