Board logo

标题: [文本处理] [已解决]批处理怎样提取带汉字的行? [打印本页]

作者: 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

  1. findstr "[^a-z0-9]" a.txt
  2. pause
复制代码

作者: mxxcgzxxx    时间: 2011-7-14 07:56

本帖最后由 mxxcgzxxx 于 2011-7-14 13:57 编辑

2# lvsehuaxue


符号也会被排除在外,还是计算字节好用,双字节为汉字
试下这个程序。但中文符号也会被认为中文,一行200字,如果想多点字就改FOR/L中的数字,但不要超过3000
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f  "delims=" %%1 in (a.txt) do (
  4.            set b=1
  5.            call :test "%%1"
  6.            if !b!==2 echo %%1
  7.            )
  8. pause>nul
  9. goto :eof
  10. :test
  11. set "var=%~1"
  12. for /l %%i in (0 1 200) do (
  13.    set "var_=!var:~%%i,1!"
  14.    if "!var_!"=="" goto :eof
  15.    if !var_! gtr Z set b=2& goto:eof
  16.    )
  17. goto :eof
复制代码

作者: CrLf    时间: 2011-7-14 08:41

本帖最后由 zm900612 于 2011-7-14 13:57 编辑
  1. findstr /rc:"[^ -Z]" a.txt>b.txt
复制代码

作者: jzsgyml    时间: 2011-7-14 09:45

3# mxxcgzxxx


三楼思路很对,但是运行没反应,没有输出文档
作者: CUer    时间: 2011-7-14 10:11

  1. sed -n "/[\x21-\x7E][\x80-\xFF]\|[\x80-\xFF][\x21-\x7E]/p" a.txt >b.txt
复制代码

作者: Hello123World    时间: 2011-7-14 13:11

  1. 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句要改
  1. if !var_! gtr Z set b=2 & goto:eof
  2. 改成
  3. 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写了一个
  1. Const ForReading = 1
  2. Dim re,fso,f,strLine,strOut
  3. Set fso = CreateObject("Scripting.FileSystemObject")
  4. Set f = fso.OpenTextFile("1.txt", ForReading ,False)   '文本保存在1.TXT
  5. Set re = New RegExp
  6. re.Pattern = ".*[\u4e00-\u9fa5]+.*"
  7. While Not f.AtEndOfLine
  8.   strLine = f.ReadLine
  9.   If re.Test(strLine) Then
  10.     strOut = strOut & strLine & vbCrLf
  11.   End If
  12. Wend
  13. Set f = fso.CreateTextFile("2.txt", True)
  14. f.Write strOut
  15. Msgbox "保存为2.txt"
  16. Set fso = Nothing
  17. Set f = Nothing
  18. Set re = Nothing
复制代码

作者: jzsgyml    时间: 2011-7-14 17:21

以上均可用,谢谢大家,不同的方法,达到同样的目的!




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