中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: 怎么去除TXT文件中重复的行 上一主题 | 下一主题
a9319751
中级用户





积分 439
发帖 170
注册 2006-1-9
状态 离线
『第 16 楼』:  



  Quote:
Originally posted by willsort at 2006-9-13 23:25:
Re a9319751『第 11 楼』:

      很抱歉,我的操作失误给你带来了负面影响,对此我郑重表示道歉!

      现已对原处理方式作出纠正,望周知。

willsort斑竹这么客气啊

2006-9-13 23:58
查看资料  发送邮件  发短消息 网志  OICQ (5040366)  编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 17 楼』:  



  Quote:
Originally posted by namejm at 2006-9-13 12:01:
  如果楼主只是想把重复N次的行打印一次,并且无须保持行的相对位置不变的话,可以参考bagpipe曾经写过的一段代码:

  [url=http://www.cn-dos.net ...

写的很好

2006-9-14 00:20
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 18 楼』:  

俺觉得要是想挑出唯一的电子邮件地址,在数千个行里,每行一个邮件地址。
或是,要挑出数千行里必须唯一的电话号码,
那么,其实可以象开玩笑的这么玩好玩~:)
@echo off

REM        却掉重复的行,按原顺序只留唯一
REM        用于挑出唯一命令、用于在让搜索到的电子邮件地址的唯一不重复性
REM        如果是含有批处理禁忌的特殊符号就算了,它就适合于上面功能。

REM        ==============  S.bat  ======================
REM          请将需要唯一不重复行的数据存成  dat.txt 文件名即可
REM         以防止万一,自己建立的目录你自己删吧~:)




md redtek
for /f "tokens=*" %%a in (dat.txt) do (
        md redtek\^"%%a^"
)

dir /b /od redtek\ > Ok.txt
Notepad.exe  Ok.txt
这个是要挑出唯一性的模拟内容,可以存成 Dat.txt 文件与上面方法一试:)
dos
china
bat
redtek@sweetmeet.com
dos
china
bat
Redtek@sweetmeet.com
dos
china
bat
com
mco
comm
comm on
redtek@sweetmeet.com
on commm
com on mmn
comm ono
bta
bat b
2006
2006 12
2006.12.2006
[code]
其实,谁让DOS建目录的时候不能建重名的目录名啊,哈哈……
那规则既然被定好了,我们就利用DOS建目录不能重名,
所以,有重名的系统自然会提示说什么什么,

但是!!它是建不上一个重名的目录的,哈哈……
所以,DIR加参数只列文件名,然后按照我建立目录的时间来排序,
当然就是具有唯一性了。

不好意思,这是个开玩笑的玩法,不能用在别的有用的地方,权当大家笑笑开开心~:)

[ Last edited by redtek on 2006-9-26 at 07:31 ]

2006-9-26 07:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 19 楼』:  

  楼上的方法虽然巧妙,但是却有很大的局限性:

  首先,文件名的长度有限制,在XP的NTFS格式的分区中,最长的路径不能超过256个字符,除掉盘符、冒号和斜杠,只剩下最多253个字符的长度能做文件名,所以,当某行的字符数超过253的时候,你的代码就会出错;

  其次,文件名中不能再出现冒号及一些特殊字符,如果文本中正好出现这些字符的话,代码同样会出错;当然,前面的那些代码同样不能处理敏感字符,但是至少还是可以处理冒号的;

  最后,你创建了那么多的文件夹,临时文件的数量够吓人的,呵呵,最后还要删除它,给人的感觉很不爽啊。

  当然,你说过了,这个只是弄来玩玩的,我们也就当做是在做智力体操,拓展思维,博众人一笑吧^_^

[ Last edited by namejm on 2006-9-26 at 13:17 ]



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-26 13:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 20 楼』:  

多谢namejm指点,哈哈~:)

2006-9-26 20:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
a9319751
中级用户





积分 439
发帖 170
注册 2006-1-9
状态 离线
『第 21 楼』:  

其实当初我想用这个处理QQ聊天的记录,中间可能有很多重复的,我想把多余的部分删掉,剩下按顺序排列



bat c c++
2006-12-22 08:09
查看资料  发送邮件  发短消息 网志  OICQ (5040366)  编辑帖子  回复  引用回复
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『第 22 楼』:  

'功能:删除某个文件中内容相同的行,但保留内容相同的最上面的一行。
'弊端:效率太低。处理文件不要太大,请测试后使用。
'使用方法:将下面的内容复制到记事本另存为a.vbs之后把要处理的文件拖放到a.vbs上面即可。
starttime=timer
on error resume next
set fso=createobject("scripting.filesystemobject")
set fd=fso.getfile(Wscript.Arguments(0))
set file=fso.opentextfile(Wscript.Arguments(0),1)
Do while not(file.AtEndOfStream)
        n = n + 1
tmp = file.readline
        ReDim Preserve temp(n-1)
        temp(n-1)= tmp
loop
file.Close
For x=0 to n-1
        For y= 1 to n-1
                If x <> y Then
                        If temp(x) =temp (y) And x < y Then
                                temp(y)="{059F6FBC-10FB-4FBC-BCF7-DB362A3DB1DB}"
                        End If
                End If
        Next
Next

For x=0 to n-1
if temp(x)<>"{059F6FBC-10FB-4FBC-BCF7-DB362A3DB1DB}" then S= S & temp(x) & vbcrlf
Next
Set file = fso.OpenTextFile(Wscript.Arguments(0), 2, True)
file.write S
file.Close
endtime=timer
yongshi=cdbl(endtime-starttime)
msgbox "已经将" & fd.name & "文件里相同行的内容删除,用时" & Round(yongshi,2) & "妙。" & vbcrlf & "(保留了相同行内容的最上面的一行!)" ,48+4096,"操作完成"
set fso=nothing
set fd=nothing
set file=nothing
[ Last edited by jmz573515 on 2006-12-26 at 09:44 AM ]

2006-12-25 11:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ldlcau
新手上路





积分 10
发帖 4
注册 2007-3-7
状态 离线
『第 23 楼』:  

@echo off
setlocal
if (%1)==() goto end
REM sort/r <%1 >tmp.txt 逆序
sort <%1 >tmp.txt
set "a="&(set b=)
type nul>sss.txt
for /f "delims=" %%a in (tmp.txt) do call :hehe "%%a"

del tmp.txt
set "a="&(set b=)
echo 完成
goto :eof

:hehe
set a=%b%
set b=%~1
if not "%a%"=="%b%" echo %b% >>sss.txt
goto :eof


:end
echo 对不起,参数错误!!!

请教下怎么按每行的字符数排列

2007-4-10 05:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: