Board logo

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

作者: jackerloo2009    时间: 2010-5-23 19:43     标题: [已解决]批处理怎样只在汉字和汉字之间插入符号?

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

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

代码如下,希望大家有更好的思路发表一下,有助于学习和提升
  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 编辑 ]
作者: Seter    时间: 2010-5-23 20:04

每行的要求如何?能否给出一个样例?
作者: terse    时间: 2010-5-23 21:40

直接在FOR 里 用2分法直接计算每行字符 然后判断是否大于Z
作者: jackerloo2009    时间: 2010-5-23 21:49     标题: 回复 3楼 的帖子

我比较喜欢用代码讲话的人
作者: terse    时间: 2010-5-23 21:51

  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
复制代码

作者: jackerloo2009    时间: 2010-5-23 22:00     标题: 回复 5楼 的帖子

呵呵,比我的简洁精炼多了,只是再加入保留原文本空行,是否会增加难度?或者除此之外是否还有其他更好的思路?
作者: sgaizxt001    时间: 2010-5-23 23:30

我晕,楼主,我测试了一下你的代码就把我桌面上的文本包括子文件夹的文本也都删了,那是非常重要的啊文件啊。这下我完玩了
作者: jackerloo2009    时间: 2010-5-23 23:58     标题: 回复 7楼 的帖子

。。。。
下个恢复软件吧
作者: jackerloo2009    时间: 2010-5-24 00:06     标题: 回复 7楼 的帖子

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

你有没有推荐一下的?我用FinalData-v2.01找不出来
作者: jackerloo2009    时间: 2010-5-24 00:19     标题: 回复 10楼 的帖子

EasyRecovery Professional 6.12.02 汉化版
作者: yangfengoo    时间: 2010-5-24 00:24

  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!
复制代码

作者: jackerloo2009    时间: 2010-5-24 07:37     标题: 回复 12楼 的帖子

昏倒,怎么评不上分啊,回头一定补上




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2