![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-29 07:11 |
共 47,816 主题排行 / 349,916 发帖 / 今日 2 篇 / 48,265 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 如何筛选文本文件中符合字符数要求的行? |
| 可打印版本 4,106 / 19 |
| 第1楼 jtyuer | 发表于 2006-08-14 19:49 |
| 初级用户 发帖 29 积分 73 | |
|
如何筛选文本文件中符合字符数要求的行? 有一个文本文件,有N行,每一行字符数3、4、5、6、……不等,要求筛选出字符数为4的行,如何做到?
希望各位老大赐教,谢谢! |
|
| 第2楼 namejm | 发表于 2006-08-14 20:08 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
请问你的文本中每行的字符有什么规律吗?比如说,是纯字母?纯数字?数字+字母?有无空格?……
如果方便的话,贴一段文本出来,再详细解释一下。 |
|
| 第3楼 jtyuer | 发表于 2006-08-14 20:50 |
| 初级用户 发帖 29 积分 73 | |
|
感谢老大关心,以下是文本文件的内容,都是字母,没有空格,请老大研究一下
ACEC ACES ASUC ASUS BENC BENS boot COMC COMS DELC DELS DOS FOUC FOUS FUJC FUJS HEDC HEDS HPPC HPPS IBMC IBMS LEGC LEGS LENC LENS SAMC SAMS SIEC SIES SONC SONS TCLC TCLS TONC TONS TOSC TOSS VAIC VAIS VOLC VOLS WinXP |
|
| 第4楼 3742668 | 发表于 2006-08-14 21:56 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
Well,利用findstr /x以及正则表达式,问题可以变得很简单:
参数1:文本文件名 参数2:要显示的行的字符数(可省) 例如要打印a.txt中的字符数为4的行: print.bat a.txt 4 或者直接把要处理的文件拖放到脚本文件上,然后按提示操作。 |
|
| 第5楼 namejm | 发表于 2006-08-15 01:05 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
我也拼凑了一段代码出来,比3742668版主的稍显罗嗦。
|
|
| 第6楼 jtyuer | 发表于 2006-08-15 14:22 |
| 初级用户 发帖 29 积分 73 | |
|
谢谢两位老大的帮助,试了一下,两个都通过了,不过还是3742668的简练、运行效率高一些
|
|
| 第7楼 namejm | 发表于 2006-08-15 15:31 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
我的那段代码是把所有的字符都拉出来一个一个地解析,无论该行字符是否超过4个,是全文解析,所以效率上不去;而3742668版主的代码只打印完全匹配的行,会跳过很多内容,所以效率高得多。
令我感到有些难以理解的是:3742668版主的for /l %%i in (1,1,%var%) do set str=!str!.这一句,为什么最后要有一个.号呢?str之前并没有赋值,指代的又是什么呢? |
|
| 第8楼 bagpipe | 发表于 2006-08-15 15:50 |
| 银牌会员 发帖 425 积分 1,144 来自 北京 | |
|
WELL,那我也就来一个吧,一句就足够了
findstr /x "^[a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z]$" test.txt |
|
| 第9楼 bagpipe | 发表于 2006-08-15 16:24 |
| 银牌会员 发帖 425 积分 1,144 来自 北京 | |
|
其实3742668版主的搜索正是用到了正则表达式.的作用
findstr /x .... test.txt 试试,呵呵,是一样的效果,只不过3742668版主在这里只是为了通用性,比如搜索5个6个字符或者更多,可以随时改变 |
|
| 第10楼 namejm | 发表于 2006-08-15 21:52 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
bagpipe又开始出精简代码了,厉害厉害。三段代码,只有我的又长又低效,看来还得潜水。
|
|
| 第11楼 3742668 | 发表于 2006-08-16 00:02 |
| 荣誉版主 发帖 718 积分 2,013 | |
三段代码,只有我的又长又低效,看来还得潜水。 不同的方法自然代码不同,相对来说你的代码在扩展性上还是有一定的优势的。其实一开始看到标题,首先想到的方法就是和你一样的方法,考虑到效率方面的问题,然后又有了下面的代码: 然后再进一步地考虑效率以及容错方面的提升,最终还是选择了findstr /x ....的方法,然后稍微对功能进行了一点扩展,最后就形成了4F的代码。 |
|
| 第12楼 mornsmile | 发表于 2006-08-16 07:15 |
| 初级用户 发帖 23 积分 147 | |
|
看到楼上的签名才发现
%windir%\Help\ntcmds.chm这个宝 |
|
| 第13楼 namejm | 发表于 2006-08-16 10:18 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
11楼的代码通过插入字符的方式来判断,并且适合于行中带空格的情况,高,实在是高。
|
|
| 第14楼 bd123456789 | 发表于 2007-07-06 16:49 |
| 中级用户 发帖 216 积分 360 | |
Originally posted by 3742668 at 2006-8-14 09:56 PM: |
|
| 第15楼 bjsh | 发表于 2007-07-06 22:22 |
| 银牌会员 发帖 621 积分 2,000 | |
|
findstr "^....$" test.txt 不就行了
|
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |