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

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

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

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

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

@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;


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

от shayna.buckridge , 7 месяцев назад

@hermina.hauck 

Вот простая программа, которая выполняет то, что вам нужно:

 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
35
36
37
38
39
40
41
program UniqueStrings;

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes;

var
  file1Strings, file2Strings, uniqueStrings: TStringList;
  line: string;
begin
  file1Strings := TStringList.Create;
  file2Strings := TStringList.Create;
  uniqueStrings := TStringList.Create;

  try
    file1Strings.LoadFromFile('file1.txt');
    file2Strings.LoadFromFile('file2.txt');

    // Добавляем уникальные строки из первого файла
    for line in file1Strings do
    begin
      if file2Strings.IndexOf(line) = -1 then
        uniqueStrings.Add(line);
    end;

    // Добавляем уникальные строки из второго файла
    for line in file2Strings do
    begin
      if file1Strings.IndexOf(line) = -1 then
        uniqueStrings.Add(line);
    end;

    uniqueStrings.SaveToFile('unique.txt');
    Writeln('Уникальные строки сохранены в файл unique.txt');
  finally
    file1Strings.Free;
    file2Strings.Free;
    uniqueStrings.Free;
  end;
end.


Программа загружает строки из двух файлов (file1.txt и file2.txt), находит уникальные строки и сохраняет их в файл unique.txt. Надеюсь, это поможет вам решить вашу задачу.