[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理怎样只在汉字和汉字之间插入符号?

前几天有人问我一个问题,要求只在汉字和汉字之间插入符号,思索后写出代码,发现效率很低,生成临时文件很多

还有个问题未能完全解决,就是关于空行的原样保留问题

代码如下,希望大家有更好的思路发表一下,有助于学习和提升
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in (yangben.txt) do (
  4. set "e=%%a"
  5. set /a num+=1
  6. call :aa
  7.                                     )
  8. for /l %%o in (1,1,!num!) do for /f "delims=" %%p in (%%o.txt) do (
  9. set "v=%%p"
  10. if "!v:~0,1!" neq "#" (
  11. set "v=!v:~0,1!"
  12. >>%%o%%o.txt set/p <nul "=!v!") else (
  13. set "v=!v:~0,2!"
  14. >>%%o%%o.txt set/p <nul "=!v!")
  15. )
  16. for /l %%o in (1,1,!num!) do for /f "delims=" %%p in (%%o%%o.txt) do (>>return.txt echo %%p)
  17. for /r %%a in (*.txt) do if "%%~nxa" neq "yangben.txt" if "%%~nxa" neq "return.txt" del "%%a"
  18. goto :eof
  19. :aa
  20. for /l %%b in (0,1,100) do (
  21. set "d=!e:~%%b,1!"
  22. if "!d!" neq "" (
  23. if "%%b"=="0" (
  24. if "!d!" gtr "Z" (
  25. >>!num!.txt echo.!d!
  26. set /a m=%%b+1
  27. call set "f=%%e:~!m!,1%%"
  28. if "!f!" gtr "Z" (>>!num!.txt echo.#!f!) else (>>!num!.txt echo.!f!)
  29.                   ) else (
  30. >>!num!.txt echo.!d!
  31. set /a m=%%b+1
  32. call set "f=%%e:~!m!,1%%"
  33. >>!num!.txt echo.!f!
  34.                          )
  35.                 ) else (
  36. if "!d!" gtr "Z" (
  37. set /a m=%%b+1
  38. call set "f=%%e:~!m!,1%%"
  39. if "!f!" gtr "Z" (>>!num!.txt echo.#!f!) else (>>!num!.txt echo.!f!)
  40.                   ) else (
  41. set /a m=%%b+1
  42. call set "f=%%e:~!m!,1%%"
  43. >>!num!.txt echo.!f!         )
  44.                        )
  45.                   ) else (goto cc)
  46.                              )
  47. :cc
  48. goto :eof
复制代码
不好意思忘了发样本了,其实自己随便写个也可以,因为本身提问的人就是随便举的例子,现把样本发出

yangben.txt
  1. 中华人民 共和bcdf国
  2. 中华 人民,共和。国
  3. 中华aa人民 共和国, 中华abc人民 共和国.
  4. 开始菜单为何无法重起和关机_电脑网络_奇虎网
  5. 首先谈谈Windows系统自动关机的条件。在Win98及更高版本的系统中都支持自动关机,即不通过电源的物理开关实现关机。自动关机是通过操作系统支持的ACPI(Advanced Configurat
  6. www.qihoo.com/q/computer/3593321.html 2010-4-25 - 百度快照
  7. Vista开始菜单中的关机和重启没了怎么办_滚动新闻_科技时代_新浪网
  8. 开始菜单怎么没有关机和重启了!咋办? 解决方案如下: 1)运行regedit。 2)依次展开注册表:HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ ...
  9. tech.sina.com.cn/other/2007-09-17/0810174 ... 2010-3-30 - 百度快照
复制代码
  1. 严重警告:
  2. 因为生成临时文件,所以本代码用了del,请测试人员注意建立单独文件夹测试!!
复制代码
【】

[ 本帖最后由 jackerloo2009 于 2010-5-24 18:28 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2
学海无涯

每行的要求如何?能否给出一个样例?
OrzDEF

TOP

直接在FOR 里 用2分法直接计算每行字符 然后判断是否大于Z

TOP

回复 3楼 的帖子

我比较喜欢用代码讲话的人
学海无涯

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (yangben.txt) do (
  3.     set "s=%%a"
  4.     set/ax=8190,i=0
  5.     for /l %%? in (1 1 14) do (
  6.         set /a "n=(x+i)/2"
  7.         for %%b in ("!n!") do if [!s:~%%~b!]==[] (set/ax=n)else set/ai=n
  8.    )
  9.         for /l %%i in (0,1,!n!) do (
  10.         set /a "i=%%i+1"
  11.         for %%j in ("!i!") do (
  12.         if "!s:~%%i,1!" gtr "Z" (
  13.         if "!s:~%%~j,1!" gtr "Z" (set /p=!s:~%%i,1!#<nul) else set /p=!s:~%%i,1!<nul
  14.       ) else set /p=!s:~%%i,1!<nul
  15.    )
  16. )
  17. echo;
  18. )
  19. pause
复制代码
1

评分人数

TOP

回复 5楼 的帖子

呵呵,比我的简洁精炼多了,只是再加入保留原文本空行,是否会增加难度?或者除此之外是否还有其他更好的思路?
学海无涯

TOP

我晕,楼主,我测试了一下你的代码就把我桌面上的文本包括子文件夹的文本也都删了,那是非常重要的啊文件啊。这下我完玩了
努力学习,努力挣分

TOP

回复 7楼 的帖子

。。。。
下个恢复软件吧
学海无涯

TOP

回复 7楼 的帖子

以前做网管的时候曾经用过硬盘数据恢复软件,当时是一个带着女儿来查看英文资料的,全在手机内存卡上,不小心全部删除了,当时网吧系统没有回收站,也无法还原回收站,所以我就抱着测试的心情下了一个,100%好用,最好别重启机器赶紧抢救,应该没有什么问题的
学海无涯

TOP

你有没有推荐一下的?我用FinalData-v2.01找不出来
努力学习,努力挣分

TOP

回复 10楼 的帖子

EasyRecovery Professional 6.12.02 汉化版
学海无涯

TOP

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=:" %%a in ('findstr /n .* test.txt') do if "%%b"=="" (echo.) else (set a=%%b&call :s)
  3. pause&exit
  4. :s
  5. set bb=&set b1=
  6. :ss
  7. set bb=!bb!!b1!
  8. set b1=!a:~0,1!
  9. set b2=!a:~1,1!
  10. if !b1! gtr Z if !b2! gtr Z set b1=!a:~0,1!#
  11. set a=!a:~1!
  12. if not "!b1!"=="~0,1" goto ss
  13. echo.!bb!
复制代码
1

评分人数

TOP

回复 12楼 的帖子

昏倒,怎么评不上分啊,回头一定补上
学海无涯

TOP

返回列表