![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 19:31 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 怎么去除TXT文件中重复的行 |
| 可打印版本 7,804 / 22 |
| 第1楼 a9319751 | 发表于 2006-02-04 18:53 |
| 中级用户 发帖 170 积分 439 | |
|
怎么去除TXT文件中重复的行 如题,可以用DOS命令实现吗?
FC ? |
|
| 第2楼 a9319751 | 发表于 2006-02-04 19:06 |
| 中级用户 发帖 170 积分 439 | |
|
怎么删除TXT中相同的行
|
|
| 第3楼 a9319751 | 发表于 2006-02-04 20:10 |
| 中级用户 发帖 170 积分 439 | |
|
Const adOpenStatic = 3
Const adLockOptimistic = 3 Const adCmdText = &H0001 Set objConnection = CreateObject("ADODB.Connection") Set objRecordSet = CreateObject("ADODB.Recordset") strPathToTextFile = "C:\Scripts\" strFile = "Test.txt" objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & strPathtoTextFile & ";" & _ "Extended Properties=""text;HDR=NO;FMT=Delimited""" objRecordSet.Open "Select DISTINCT * FROM " & strFile, _ objConnection, adOpenStatic, adLockOptimistic, adCmdText Do Until objRecordSet.EOF Wscript.Echo objRecordSet.Fields.Item(0).Value objRecordSet.MoveNext Loop |
|
| 第4楼 namejm | 发表于 2006-09-05 08:42 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
请问楼主,你要删除所有的重复行还是对重复了N次的行只保留其中的一行?删除之后,不同行的相对位置还要保持不变吗?
|
|
| 第5楼 vkill | 发表于 2006-09-06 03:13 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
假如你的文件是 a.txt
cd.>a_temp.txt for /f "tokens=1 delims=," %%i in (a.txt) do (find a_temp.txt "%%i" && echo.>nul||echo %%i>>a_temp.txt) 生成新文件a_temp.txt 文件就是了,我在改一个东西的时候想到用的 [ Last edited by he200377 on 2006-9-6 at 03:15 ] |
|
| 第6楼 namejm | 发表于 2006-09-06 04:30 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
Re he200377:
事情没那么简单,你这个代码还有很多缺陷: 1、当后面有N行内容与第一行相同时,第一行的内容并不能被过滤掉; 2、当把一个文件的内容复制一次再接在原来的行后的话,输出的内容为复制之前的内容。也就是说,当文件内所有行都有重复N次的时候,还会打印1/N行的内容; 3、delims=, 这个分隔符有何依据?只用find而不用findstr的正则表达式,会把很多行中含有 %%i 字符串的行过滤掉; 4、echo %%i>>a_temp.txt这一句中会把原文件里行首的所有空格都去掉,也就是说不能保留原行的格式; 要实现过滤重复行的操作,还有很多情况是需要考虑的,并且,由于CMD对某些字符敏感,无论代码编写得如何完美,还是不能在所有场合中都适用。 最近也在思考这个问题该如何处理,也和论坛上的一些朋友探讨过,目前已经有了比较成熟的方案,正在除错的测试过程中。如果楼主能回答我在4楼提出的问题,那么,对我现在这个代码的完善就有了更好的帮助了。 [ Last edited by namejm on 2006-9-6 at 04:53 ] |
|
| 第7楼 vkill | 发表于 2006-09-06 04:42 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
Re namejm
1、当后面有N行内容与第一行相同时,第一行的内容并不能被过滤掉; #可以的啊 2、当把一个文件的内容复制一次再接在原来的行后的话,输出的内容为复制之前电脑内容。也就是说,当文件内所有行都有重复N次的时候,还会打印1/N行的内容; #不明白 3、delims=, 这个分隔符有何依据?只用find而不用findstr的正则表达式,会把很多行中含有%%i字符串的行过滤掉; #这到是,没有想到,应该用findstr /v ,delims=,这里可以看情况改改,我直接复制过来也没有看 4、echo %%i>>a_temp.txt这一句中会把原文件里行首的所有空格都去掉,也就是说不能保留原行的格式; #这确实不能保留原行的格式 |
|
| 第8楼 namejm | 发表于 2006-09-06 04:51 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
Re he200377『第 8 楼』:
1、当你构造如a.txt所示的文本来测试就知道不可以了; 2、用如b.txt所示的文本测试一下就明白了。 a.txt b.txt |
|
| 第9楼 willsort | 发表于 2006-09-09 11:15 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
───────────────── 版务记录 ───────────────── 执行:Will Sort 操作:移动主题:自 DOS疑難解答 & 問題討論(解答室) 说明:按照新的版区分划方案,本主题更适合于发表在此版区 ───────────────── 版务记录 ───────────────── [ Last edited by willsort on 2006-9-13 at 23:21 ] |
|
| 第10楼 namejm | 发表于 2006-09-13 11:23 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
如果楼主是要把所有相同内容的行都删掉的话,可以用如下代码(本来想把各个功能都完善一下的,现在只做了个半成品):
|
|
| 第11楼 a9319751 | 发表于 2006-09-13 11:40 |
| 中级用户 发帖 170 积分 439 | |
|
to:willsort
我冤枉啊,斑竹大人,我是半年前发贴求救的,半年前还没这个板块的,我不是故意发错地方的。 |
|
| 第12楼 a9319751 | 发表于 2006-09-13 11:43 |
| 中级用户 发帖 170 积分 439 | |
|
to:namejm
谢谢你半年后还能帮我找到这个帖子,并且帮我写出脚本,测试中 我打算半一个文本A.TXT中重复的行删除后,得到B.TXT A CHINA DOS DOS cn dos BBS CHINA B CHINA DOS cn dos BBS [ Last edited by a9319751 on 2006-9-13 at 11:56 ] |
|
| 第13楼 a9319751 | 发表于 2006-09-13 11:52 |
| 中级用户 发帖 170 积分 439 | |
Originally posted by he200377 at 2006-9-6 03:13: 谢谢你的回复,测试不错,但是未测试特殊字符 [ Last edited by a9319751 on 2006-9-13 at 11:59 ] |
|
| 第14楼 namejm | 发表于 2006-09-13 12:01 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
如果楼主只是想把重复N次的行打印一次,并且无须保持行的相对位置不变的话,可以参考bagpipe曾经写过的一段代码:
排序,过滤相同行(简单批处理) [ Last edited by namejm on 2006-9-13 at 12:03 ] |
|
| 第15楼 willsort | 发表于 2006-09-13 23:25 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re a9319751『第 11 楼』:
很抱歉,我的操作失误给你带来了负面影响,对此我郑重表示道歉! 现已对原处理方式作出纠正,望周知。 |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |