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

[文本处理] [已解决]批处理怎样提取带汉字的行?

hnzzxf
将来时的将来时
Yahoho点点
番茄酱林林
不久的忧郁
helei30
chl6595303
zenghuanheng
青萝卜
138112
神经病马甲2010
考的毛也焦了的猴
chrischiong
陈沉43晨尘
热衷的ghh旁观者
蝴蝶点点
ivy娃娃321

如上含有名称的文本,需要删除helei30,hnzzxf,138112这类纯字母汉字的,留下 Yahoho点点,神经病马甲2010,青萝卜,有汉字的。
1

评分人数

    • batman: 感谢给帖子标题标注[已解决]字样PB + 2

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

TOP

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

评分人数

    • batman: 乐于助人技术 + 1 PB + 2
---学无止境---

TOP

10# zm900612


注意了,楼主要求的是含有汉字的行,假如我的行为" 。。。。",这也是宽字节是,但不含有汉字。
我觉得用SED的正则比较合适,或者VBS的正则。如CUer的那个代码。
---学无止境---

TOP

8# Hello123World


findstr 的字符顺序里,空格最小,Z是单字符里最大的,其余都是宽字符,所以用 [^ -Z] 这个集合就能找到含有宽字符的行

TOP

5# jzsgyml

不好意思是我多写了个空格,第16句要改
  1. if !var_! gtr Z set b=2 & goto:eof
  2. 改成
  3. if !var_! gtr Z set b=2& goto:eof
复制代码
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

4f是什么意思,没有正确输出。

TOP

  1. findstr   "[^A-Z][^a-z][^0-9]" 1.txt >2.txt
复制代码
1

评分人数

    • batman: 乐于助人技术 + 1 PB + 2

TOP

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

评分人数

    • batman: 乐于助人技术 + 1 PB + 2

TOP

3# mxxcgzxxx


三楼思路很对,但是运行没反应,没有输出文档

TOP

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

评分人数

TOP

本帖最后由 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
复制代码
1

评分人数

    • batman: 乐于助人技术 + 1 PB + 2
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

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

评分人数

    • batman: 乐于助人技术 + 1 PB + 2

TOP

返回列表