[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
用sort 排序一次后,只需比较第一条和最后一条记录即可得出前缀了。

=========================
set /p one=<a.txt
...测串长
for /f "delims=" %%a in (a.txt) do (set str=%%a
set f1=!str:~1,1!
set f2=!str:~2,1!
set f3=!str:~3,1!

...根据串长动态生成行数,变%var1%代替代码行
set r1=!str:~-1!
set r2=!str:~-2!
set r3=!str:~-3!

...
)

最后再与第一条记录的比较就可以得到前后缀了。

TOP

做出来了

  1. @echo off
  2. set $=!
  3. setlocal enabledelayedexpansion
  4. (for /l %%i in (1,1,100) do echo 219%%i17)>%~n0.txt
  5. set /p var=<%~n0.txt
  6. set com=
  7. set bom=
  8. for /l %%a in (0,1,32) do (
  9.         set "bom=!bom!&set #b%%a!$!str:~-%%a,1!$!=!$!str:~-%%a,1!$!"
  10.         if "!var:~%%a,1!"=="" goto :scok
  11.         set "com=!com!&set #c%%a!$!str:~%%a,1!$!=!$!str:~%%a,1!$!"
  12. )
  13. :scok
  14. set com=!com:~1!
  15. set bom=!bom:~1!
  16. set "bom=!bom:*&=!"
  17. for /f %%i in (%~n0.txt) do (set str=%%i
  18. %com%
  19. %bom%
  20. )
  21. set var=
  22. set tou=
  23. for /f "tokens=1,2 delims==" %%a in ('set #c') do (set str=%%a
  24.         if "!str:~2,1!"=="!var!" goto :oktou
  25.         set tou=!tou!%%b
  26.         set var=!str:~2,1!
  27. )
  28. :oktou
  29. set wei=
  30. set var=
  31. for /f "tokens=1,2 delims==" %%a in ('set #b') do (set str=%%a
  32.         if "!str:~2,1!"=="!var!" goto :okwei
  33.         set wei=%%b!wei!
  34.         set var=!str:~2,1!
  35. )
  36. :okwei
  37. echo %tou:~,-1%     %wei:~1%
  38. pause
复制代码

[ 本帖最后由 netbenton 于 2009-4-22 18:25 编辑 ]

TOP

回版主:
不好意思,偶知道怎么加code,只是回贴时,粘贴后就马上点发表了,没注意,谢谢提醒。
以后一定注意。



偶在22楼是没有表达得清楚,并且有很大错误,不好意思。

其实是想说:
方法一,sort后可以对比前后行仅仅得出前缀。后缀没有解决。(发现确实不行)
方法二,(24楼代码)则可以分别得出前、后缀,并且速度还可以。(可行,但与22楼表达的有点不同)


完整代码如下(文本文件名与批处理文件名关联了,1000行记录3秒内完成替换):

  1. @echo off
  2. set $=!
  3. setlocal enabledelayedexpansion
  4. (for /l %%i in (1,1,1000) do echo 219%%i17)>%~n0.txt
  5. set /p var=<%~n0.txt
  6. set com=
  7. set bom=
  8. for /l %%a in (0,1,32) do (
  9. set "bom=!bom!&set #b%%a!$!str:~-%%a,1!$!=!$!str:~-%%a,1!$!"
  10. if "!var:~%%a,1!"=="" goto :scok
  11. set "com=!com!&set #c%%a!$!str:~%%a,1!$!=!$!str:~%%a,1!$!"
  12. )
  13. :scok
  14. set com=!com:~1!
  15. set bom=!bom:~1!
  16. set "bom=!bom:*&=!"
  17. for /f %%i in (%~n0.txt) do (set str=%%i
  18. %com%
  19. %bom%
  20. )
  21. set var=
  22. set tou=
  23. for /f "tokens=1,2 delims==" %%a in ('set #c') do (set str=%%a
  24. if "!str:~2,1!"=="!var!" goto :oktou
  25. set tou=!tou!%%b
  26. set var=!str:~2,1!
  27. )
  28. :oktou
  29. set wei=
  30. set var=
  31. for /f "tokens=1,2 delims==" %%a in ('set #b') do (set str=%%a
  32. if "!str:~2,1!"=="!var!" goto :okwei
  33. set wei=%%b!wei!
  34. set var=!str:~2,1!
  35. )
  36. :okwei
  37. set tou=%tou:~,-1%&set wei=%wei:~1%
  38. ::前面的找前后缀,后面的进行替换
  39. (for /f %%i in (%~n0.txt) do (set str=#%%i#
  40. set str=!str:#%tou%=!
  41. echo !str:%wei%#=!
  42. ))>%~n0dest.txt
  43. start %~n0dest.txt
  44. pause
复制代码

[ 本帖最后由 netbenton 于 2009-4-22 19:03 编辑 ]

TOP

根据第一行的长度,取得动态代码行:

内容为:set  #c0!str:~0,1!=!str:~0,1!&set  #c1!str:~1,1!=!str:~1,1!  ...

%com%=从串首开始
%bom%=从串尾开始

变量定义规则:  #c+列号+字符=字符

这样会根据各列字符,动态定义变量,如果同一列有不同字符,则会定义多个变量,否则只有一个

for +set 最后判断同一列是否有二个以上变量,即可知道是否为前/后缀结束

[ 本帖最后由 netbenton 于 2009-4-22 22:43 编辑 ]

TOP

返回列表