去掉文本文档中相同的行

praylgjywjy 2010-04-09 10:39:24
文本文档的每一行都是一个字符串,有几万行这样的数据,里面有的行是重复的,请问:如何去掉重复的行?
每一行的格式如下:
2001:5000::2:5,2001:5000:200:a::2
2001:48d0:101:501::5,2001:48d0:101:501::56
2001:48d0:101:501::56,2001:48d0:4000:46::8
2001:48d0:4000:46::8,2001:468:e00:c02::1
2001:468:e00:c02::1,2001:468:e00:402::1
2001:468:e00:402::1,2001:468:e00:801::2
2001:468:e00:801::2,2001:470:0:72::2
2001:470:0:72::2,2001:504:13::11
2001:48d0:101:501::5,2001:48d0:101:501::56
2001:48d0:101:501::56,2001:48d0:4000:46::8
2001:48d0:4000:46::8,2001:468:e00:c02::1
...全文
191 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
纠结的程序猿 2010-04-10
  • 打赏
  • 举报
回复
用PilotEdit,点“排序”按钮,再点按钮“删除重复的行”
http://topic.csdn.net/u/20100405/17/e86b8de1-3e61-4b6c-bb19-bbfe472b5a25.html
linyongzuo 2010-04-09
  • 打赏
  • 举报
回复
#include <set>
praylgjywjy 2010-04-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 classpatterns 的回复:]
C/C++ code
[/Quote]
有错误啊,'set' was not declared in this scope,你上面的头文件我都加了啊
ShineShineRedStar 2010-04-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 classpatterns 的回复:]

C/C++ code


#include <fstream>
#include <string>
uisng namespace std;
int main()
{
string date;
set<string> s;
set<string>::iterator iter;

ifstream inf("C:\\1.txt");
while (get……
[/Quote]UP.
dskit 2010-04-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 praylgjywjy 的回复:]
引用 3 楼 dskit 的回复:
sed -n ’G; /^\(.*\n\).*/d;h;P’ w

这是什么啊,能说的明白点吗?
[/Quote]

sed 一个命令, windows 下用 msys就可以完成这项工作了
十八道胡同 2010-04-09
  • 打赏
  • 举报
回复
1.可以使用set,自己会负责重复的情况

2.可以用哈希表,自己要判重
wangk 2010-04-09
  • 打赏
  • 举报
回复
……

set是什么楼主你都没明白。


for (iter = s.begin(); iter != s.end(); ++iter)
outf << *iter << endl;


这是将set里的所有元素输出到outf。

判断出现相同的值set已经内部实现了,你直接使用即可。
FingerStyle 2010-04-09
  • 打赏
  • 举报
回复
s.insert();

如果相同的就不插入。

所以s 中的东西没有重复的

for (iter = s.begin(); iter != s.end(); ++iter)
就是把s中的东西 写到文件里
praylgjywjy 2010-04-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 classpatterns 的回复:]
[/Quote]
请问 for (iter = s.begin(); iter != s.end(); ++iter)这句是判断出现相同的行然后就不读是吧?
praylgjywjy 2010-04-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dskit 的回复:]
sed -n ’G; /^\(.*\n\).*/d;h;P’ w
[/Quote]
这是什么啊,能说的明白点吗?
FingerStyle 2010-04-09
  • 打赏
  • 举报
回复


#include <fstream>
#include <string>
uisng namespace std;
int main()
{
string date;
set<string> s;
set<string>::iterator iter;

ifstream inf("C:\\1.txt");
while (getline(inf, date))
{
s.insert(date);
}
inf.close();

ofstream outf;
outf.open("C:\\2.txt", fstream::out | fstream::app);
for (iter = s.begin(); iter != s.end(); ++iter)
{
outf << *iter << endl;
}
outf.close();
}
dskit 2010-04-09
  • 打赏
  • 举报
回复
sed -n ’G; /^\(.*\n\).*/d;h;P’ w
wangk 2010-04-09
  • 打赏
  • 举报
回复
用哈希表,或者导入到数据库进行查询。
FingerStyle 2010-04-09
  • 打赏
  • 举报
回复
给你给思路

set<string> s;

每次读取一行到string str;

s.insert(str);

然后把s里的string写到另一个文件里
linsen_519 2010-04-09
  • 打赏
  • 举报
回复
sed是 linux中 文本处理的命令 在终端中运行~ 十分强大哦 windows 俺不懂

如果是linux你在终端中打 这个命令:
sed -n'G; s/\n/&&/; /^\([-~]*\n\).*\n\1/d; s/\n//; h; P' 文件名称 >> 将结果导入新文件

这是个正则表达式,由于sed无法改变原文件,所以之能将去重复的东西导入新的文件里

如果你想通过一段code来 去重复的话 那方法太多了 相信你做的到

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧