标题: [文本处理] 批处理去除文本中所有的汉字 [打印本页]
作者: batman 时间: 2012-3-27 08:03 标题: 批处理去除文本中所有的汉字
因昨天群里有位朋友问到这个问题,在帮他解决后感觉大家平常应该会经常遇到这样的问题,所以将我的两段代码给出,大家也可以跟帖给出自己的方法:
1、批处理方法,个人认为还是逐字符保险一些,只是遇到大文本效率会有问题(另外大家想一想为什么代码中的变量延迟要如此处理):- @echo off
- cd.>b.txt
- for /f "delims=" %%a in (a.txt) do (
- set "str=%%a"
- setlocal enabledelayedexpansion
- call :lp
- endlocal
- )
- echo ok
- pause>nul&goto :eof
- :lp
- if /i "!str:~,1!" leq "z" set "var=!var!!str:~,1!"
- set "str=!str:~1!"
- if defined str goto lp
- >>b.txt echo.!var!&set "var="
复制代码
2、vbs方法,顺便说一下查了一下unicode编码表居然\u4e00就是“一”- Dim FSO, vbStr
- Set FSO = CreateObject("Scripting.FileSystemObject")
- vbStr = FSO.OpenTextFile("a.txt").ReadAll()
- FSO.OpenTextFile("b.txt", 2, True).Write RegEx(vbStr)
- MsgBox "ok"
- Set FSO = Nothing
-
- Function RegEx(Str)
- Set RegEx = New RegExp
- RegEx.IgnoreCase = True
- RegEx.Global = True
- RegEx.Pattern = "[\u4e00-\u9fa5]*([^\u4e00-\u9fa5]*)[\u4e00-\u9fa5]*"
- RegEx = RegEx.Replace(str, "$1")
- End Function
复制代码
作者: batman 时间: 2012-3-27 08:31
同时,大家可以想一想如何去除文本中所有的英文字母(这个比较容易些)。。。
作者: cjiabing 时间: 2012-3-27 10:08
简单点用findstr,不过其他特殊符号要考虑
作者: batman 时间: 2012-3-27 10:12
回复 3# cjiabing
如果是汉字和代码混杂的行findstr如何能做到?
作者: plp626 时间: 2012-3-27 13:23
先给给汉字一个确切的定义。。。http://baike.baidu.com/view/25421.htm
思路hex.cmd+ascmap.cmd
作者: caruko 时间: 2012-3-27 14:56
基本上只能逐字判断了...
作者: find 时间: 2012-3-27 15:25
版主V5
作者: 冷玉公子 时间: 2012-3-27 21:06
本帖最后由 冷玉公子 于 2012-3-27 23:06 编辑
- @Echo Off&SetLocal EnableDelayedExpansion
-
- For /F %%A In (Log.txt) Do (
- Set "Value=0"
- Echo 原字符: %%A
- Call :_On %%A
- Echo 编译后: !Var!
- Set "Var="
- )
- Pause>Nul
- Exit
-
- :_On
- Set "Con=%1"
- Set "Var_%Value%=!Con:~%Value%,1!
- If /i "!Var_%Value%!" Leq "Z" Set "Var=!Var!!Var_%Value%!"
- If Not Defined Var_%Value% Goto :Eof
- Set /A "Value+=1"
- Goto _On
复制代码
有个问题就是逐字读取,碰到特殊字符就不行了。
例如:!@#$%^&*()
作者: CrLf 时间: 2012-3-28 00:01
- cmd /u/q/c (for /f "delims=" %%a in (a.txt)do echo ;%%a)|more|findstr /vbc:"[^ -Z]" ";"
复制代码
玩一下,findstr 的思路,手机码字未验证
作者: batman 时间: 2012-3-28 07:34
回复 9# 冷玉公子
兄弟测试了我一楼的代码不?
还有我在括号中写上要你们思考为什么变量延迟处理要如此处理的问题,你真正思考了?
作者: 冷玉公子 时间: 2012-3-28 11:20
回复 11# batman
说实在的写上面的那段代码的时候只看问题,没有看版主的代码和提问啊。
粗心的俺再次犯错了,今天上午仔细回味了下。看看挽救不?
如果不考虑特殊字符,可以这样用。
这次绝对是看了楼主的代码,总结了自己的错误啊。- @Echo Off
- For /F %%A In (Log.txt) Do (
- Echo 原字符: %%A
- Call :_On %%A
- )
- Pause>Nul&Exit
- :_On
- Set "Con=%1"
- :_On_Two
- If /i "%Con:~,1%" Leq "Z" Set "Var=%Var%%Con:~,1%"
- Set "Con=%Con:~1%"
- If Not Defined Con Echo 编译后: %Var%&Set "Var="&Goto :Eof
- Goto _On_Two
复制代码
这个是处理特殊字符,跟楼主的方法一样,只是想表明俺看了,俺理解了。- @Echo Off
- For /F %%A In (Log.txt) Do (
- Echo 原字符: %%A
- Set "Con=%%A"
- SetLocal EnableDelayedExpansion
- Call :_On
- Endlocal
- )
- Pause>Nul&Exit
- :_On
- If /i "!Con:~,1!" Leq "Z" Set "Var=!Var!!Con:~,1!"
- Set "Con=!Con:~1!"
- If Not Defined Con Echo 编译后: !Var!&Set "Var="&Goto :Eof
- Goto _On
复制代码
其实没有深彻的去理解这个原因问题,只是我了解如果在开启《变量延迟》的情况给一个变量赋值的话,某些特殊字符会被屏蔽掉例如:!^
楼主的方法应该是在没有开始《变量延迟》的情况给变量赋值,然后打开《变量延迟》是为了在For里可以使用或者说是读取到这个变量。
下面有个小例子- @Echo Off
- Set "Var=N你H好~!@#$%^&*()a"
- Echo %Var%
- SetLocal EnableDelayedExpansion
- Set "Var=N你H好~!@#$%^&*()a"
- Echo !Var!
- Pause>Nul
复制代码
希望能挽救昨天所犯下的错误啊。
作者: apang 时间: 2012-3-28 13:24
本帖最后由 apang 于 2012-3-28 15:31 编辑
去除文档中的英文字母- @echo off
- for /f "delims=" %%a in (a.txt) do (
- set "str=%%a"
- setlocal enabledelayedexpansion
- for %%b in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
- if defined str set "str=!str:%%b=!"
- )
- echo,!str!
- endlocal
- )
- pause
复制代码
作者: xss 时间: 2012-3-30 17:41
强烈要求楼主解释一下,为什么变量延迟要这样用,这样用的目的是什么,有什么特殊作用?我菜鸟,实在弄不明白。拜托楼主或其它高手给详细讲解一下,不胜感激!
作者: cjiabing 时间: 2012-4-3 12:47
本帖最后由 cjiabing 于 2012-4-3 12:50 编辑
回复 14# xss
比较下:
-
- @echo off
- for /f "tokens=*" %%a in ("it show : i love you !") do (
- set "str=%%a"
- setlocal enabledelayedexpansion
- echo;!str!
- endlocal
- )
- pause
- ::可以对叹号等符号支持。
复制代码
- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=*" %%a in ("it show : "i love you !"") do (
- set "str=%%a"
- echo;!str!
- )
- pause
- ::叹号!会自动消失
复制代码
作者: find 时间: 2012-4-3 13:05
回复 14# xss
http://www.bathome.net/thread-2899-1-1.html
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |