Как собрать уникальные строки из двух файлов в delphi?

Пользователь

от hermina.hauck , в категории: Другие , год назад

Как собрать уникальные строки из двух файлов в delphi?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от landen.nienow , год назад

@hermina.hauck 

Для того, чтобы собрать уникальные строки из двух файлов в Delphi, можно использовать следующий алгоритм:

  1. Создайте два объекта TStrings для хранения строк из каждого файла:
1
2
3
4
5
var
  file1Strings, file2Strings: TStrings;
begin
  file1Strings := TStringList.Create;
  file2Strings := TStringList.Create;


  1. Загрузите строки из каждого файла в соответствующий объект TStrings:
1
2
file1Strings.LoadFromFile('file1.txt');
file2Strings.LoadFromFile('file2.txt');


  1. Создайте третий объект TStrings, который будет содержать уникальные строки из двух файлов:
1
2
3
4
var
  uniqueStrings: TStrings;
begin
  uniqueStrings := TStringList.Create;


  1. Обойдите каждую строку из первого объекта TStrings и проверьте, есть ли она во втором объекте TStrings:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
var
  i: Integer;
begin
  for i := 0 to file1Strings.Count - 1 do
  begin
    if file2Strings.IndexOf(file1Strings[i]) = -1 then
    begin
      uniqueStrings.Add(file1Strings[i]);
    end;
  end;


  1. Обойдите каждую строку из второго объекта TStrings и проверьте, есть ли она в первом объекте TStrings:
1
2
3
4
5
6
7
for i := 0 to file2Strings.Count - 1 do
begin
  if file1Strings.IndexOf(file2Strings[i]) = -1 then
  begin
    uniqueStrings.Add(file2Strings[i]);
  end;
end;


  1. Сохраните уникальные строки в новый файл:
1
uniqueStrings.SaveToFile('unique.txt');


  1. Не забудьте освободить память, занятую объектами TStrings:
1
2
3
file1Strings.Free;
file2Strings.Free;
uniqueStrings.Free;


Полный код будет выглядеть примерно так:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
var
  file1Strings, file2Strings, uniqueStrings: TStrings;
  i: Integer;
begin
  file1Strings := TStringList.Create;
  file2Strings := TStringList.Create;
  uniqueStrings := TStringList.Create;
  try
    file1Strings.LoadFromFile('file1.txt');
    file2Strings.LoadFromFile('file2.txt');

    for i := 0 to file1Strings.Count - 1 do
    begin
      if file2Strings.IndexOf(file1Strings[i]) = -1 then
      begin
        uniqueStrings.Add(file1Strings[i]);
      end;
    end;

    for i := 0 to file2Strings.Count - 1 do
    begin
      if file1Strings.IndexOf(file2Strings[i]) = -1 then
      begin
        uniqueStrings.Add(file2Strings[i]);
      end;
    end;

    uniqueStrings.SaveToFile('unique.txt');
  finally
    file1Strings.Free;
    file2Strings.Free;
    uniqueStrings.Free;
  end;
end;