VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 766|回复: 8

关于TXT查找并删除重复数据的问题.大家帮我看看

[复制链接]

4

主题

19

帖子

17.00

积分

新手上路

Rank: 1

积分
17.00
发表于 2020-1-22 20:40:01 | 显示全部楼层 |阅读模式

文本内容如下
aaaa
bbbb
ccc
ddd
aaaa
eee
fff
gggg

怎么样来删除重复的呢~~头疼~
回复

使用道具 举报

0

主题

40

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-2-5 08:30:02 | 显示全部楼层
procedure TForm1.Button1Click(Sender: TObject);
var
  s: TStringList;
  I: Integer;
begin
  s := TStringList.Create;
....
  s.Sort;
  for i := s.Count - 1 downto 1 do
    if s[i] = s[i - 1] then
      s.Delete(i);
    ...
end;
回复

使用道具 举报

4

主题

19

帖子

17.00

积分

新手上路

Rank: 1

积分
17.00
 楼主| 发表于 2020-2-7 20:45:01 | 显示全部楼层
我着这写了,但是问题还是没有解决哦~~aaaa还是没有被删除~~

Lists:=TStringList.Create;
Lists.LoadFromFile(opendialog1.FileName);
progressbar1.Max:=lists.Count-1;
for i:= lists.Count-1 downto 1 do
begin
    if lists[i]=lists[i-1] then
    begin
      lists.Delete(i);
    lists.SaveToFile(opendialog1.FileName);
    end;
end;
回复

使用道具 举报

0

主题

40

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-2-7 22:15:01 | 显示全部楼层
是你太粗心,抄错了

Lists:=TStringList.Create;
Lists.LoadFromFile(opendialog1.FileName);
Lists.Sort;
progressbar1.Max:=lists.Count-1;
for i:= lists.Count-1 downto 1 do
begin
    if lists[i]=lists[i-1] then
    begin
      lists.Delete(i);

    end;
end;
lists.SaveToFile(opendialog1.FileName);
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-15 15:15:01 | 显示全部楼层
你们的算法有问题吧,总是用第N条字串与第N-1条字串相比较,如果不是相邻的就没法比了嘛.
应该用每一个和其中的任何一条相比较才行吧.
如用第一个和第二个到最后一个比较
再用第二个和第三个到最后一个比较
再用第三个和第四个到最后一个比较
...
这样才能全部比较到啊
回复

使用道具 举报

0

主题

3

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-17 11:15:01 | 显示全部楼层
if s[i] = s[i - 1] then
      s.Delete(i);

有问题
回复

使用道具 举报

0

主题

3

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-17 11:30:02 | 显示全部楼层
最简单的方法:
打开UltraEdit-文件-排序-高级排序/选项-选中【删除重复项】
回复

使用道具 举报

0

主题

3

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-17 11:45:01 | 显示全部楼层
sorry没看见s.sort
但即便如此也不推荐在i从s的count循环中对s进行删除

其实也可以这样写
procedure TForm1.Button1Click(Sender: TObject);
var
  s,b: TStringList;
  I: Integer;
begin
  s := TStringList.Create;
  b := TStringList.Create;

....
  for i := s.Count - 1 downto 1 do
    if b.IndexOf(s[i])<0 then
      b.Add(s[i]);
    ...
b.SaveToFile
b.free;
s.free;
end;
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-17 12:30:01 | 显示全部楼层
简单问题复杂化了

s := TStringList.Create;
s.Duplicates := dupIgnore;
s.Sorted := True;
try
s.LoadFromFile(XXXX);
finally
Freeandnil(s);
end;

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表