标题: [文本处理] [已解决]批处理怎样提取带汉字的行? [打印本页]
作者: jzsgyml 时间: 2011-7-14 05:00 标题: [已解决]批处理怎样提取带汉字的行?
hnzzxf
将来时的将来时
Yahoho点点
番茄酱林林
不久的忧郁
helei30
chl6595303
zenghuanheng
青萝卜
138112
神经病马甲2010
考的毛也焦了的猴
chrischiong
陈沉43晨尘
热衷的ghh旁观者
蝴蝶点点
ivy娃娃321
如上含有名称的文本,需要删除helei30,hnzzxf,138112这类纯字母汉字的,留下 Yahoho点点,神经病马甲2010,青萝卜,有汉字的。
作者: lvsehuaxue 时间: 2011-7-14 06:06
- findstr "[^a-z0-9]" a.txt
- pause
复制代码
作者: mxxcgzxxx 时间: 2011-7-14 07:56
本帖最后由 mxxcgzxxx 于 2011-7-14 13:57 编辑
2# lvsehuaxue
符号也会被排除在外,还是计算字节好用,双字节为汉字
试下这个程序。但中文符号也会被认为中文,一行200字,如果想多点字就改FOR/L中的数字,但不要超过3000- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%1 in (a.txt) do (
- set b=1
- call :test "%%1"
- if !b!==2 echo %%1
- )
- pause>nul
- goto :eof
-
- :test
- set "var=%~1"
- for /l %%i in (0 1 200) do (
- set "var_=!var:~%%i,1!"
- if "!var_!"=="" goto :eof
- if !var_! gtr Z set b=2& goto:eof
- )
- goto :eof
复制代码
作者: CrLf 时间: 2011-7-14 08:41
本帖最后由 zm900612 于 2011-7-14 13:57 编辑
- findstr /rc:"[^ -Z]" a.txt>b.txt
复制代码
作者: jzsgyml 时间: 2011-7-14 09:45
3# mxxcgzxxx
三楼思路很对,但是运行没反应,没有输出文档
作者: CUer 时间: 2011-7-14 10:11
- sed -n "/[\x21-\x7E][\x80-\xFF]\|[\x80-\xFF][\x21-\x7E]/p" a.txt >b.txt
复制代码
作者: Hello123World 时间: 2011-7-14 13:11
- findstr "[^A-Z][^a-z][^0-9]" 1.txt >2.txt
复制代码
作者: Hello123World 时间: 2011-7-14 13:13
4f是什么意思,没有正确输出。
作者: mxxcgzxxx 时间: 2011-7-14 13:57
5# jzsgyml
不好意思是我多写了个空格,第16句要改- if !var_! gtr Z set b=2 & goto:eof
- 改成
- if !var_! gtr Z set b=2& goto:eof
复制代码
作者: CrLf 时间: 2011-7-14 14:03
8# Hello123World
findstr 的字符顺序里,空格最小,Z是单字符里最大的,其余都是宽字符,所以用 [^ -Z] 这个集合就能找到含有宽字符的行
作者: broly 时间: 2011-7-14 14:46
10# zm900612
注意了,楼主要求的是含有汉字的行,假如我的行为" 。。。。",这也是宽字节是,但不含有汉字。
我觉得用SED的正则比较合适,或者VBS的正则。如CUer的那个代码。
作者: broly 时间: 2011-7-14 15:15
用VBS写了一个- Const ForReading = 1
- Dim re,fso,f,strLine,strOut
-
- Set fso = CreateObject("Scripting.FileSystemObject")
- Set f = fso.OpenTextFile("1.txt", ForReading ,False) '文本保存在1.TXT
- Set re = New RegExp
-
- re.Pattern = ".*[\u4e00-\u9fa5]+.*"
-
- While Not f.AtEndOfLine
- strLine = f.ReadLine
- If re.Test(strLine) Then
- strOut = strOut & strLine & vbCrLf
- End If
- Wend
-
- Set f = fso.CreateTextFile("2.txt", True)
- f.Write strOut
-
- Msgbox "保存为2.txt"
-
- Set fso = Nothing
- Set f = Nothing
- Set re = Nothing
复制代码
作者: jzsgyml 时间: 2011-7-14 17:21
以上均可用,谢谢大家,不同的方法,达到同样的目的!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |