Эффективный способ сравнить три текстовых файла в vb.net - PullRequest
1 голос
/ 18 апреля 2011

У меня есть программа vb.net, в которой я должен сравнить три текстовых файла (два против одного) и убедиться, что они все одинаковые.Даже если есть одно изменение, я должен знать, где это изменение, какой текстовый файл и какая строка.Формат текстового файла такой:

timestamp|ab|someval
timestamp|ab|someval1
timestamp|bc|someval2
timestamp|bc|someval2

Все текстовые файлы имеют одинаковый формат, но значения могут быть в другом порядке.Например,

text1.txt

ts|av|2
ts|ab|3
ts|av|4

text2.txt

ts|av|4
ts|ab|3
ts|av|2

Это не должно давать сбой, поскольку они имеют одинаковые значения.Может кто-нибудь сказать мне, как я могу пойти по этому поводу?

1 Ответ

1 голос
/ 18 апреля 2011

Таким образом, у вас есть три различных сочетания одних и тех же предметов.Таким образом, если бы текстовые файлы были файлами целых чисел, то эти три считались бы идентичными:

1,2,3 3,2,1 2,1,3

, но 1,2,4 не было бы.

Если файл достаточно мал, чтобы поместиться в память, вы можете использовать простой HashSet(of String) (надеюсь, я правильно понял синтаксис VB).Обратите внимание, что вам нужно только сохранить содержимое ОДНОГО файла в памяти.Остальные читаются построчно.

Для первого файла прочитайте каждую строку в объект (или, возможно, просто сохраните его в виде строки) и добавьте его в HashSet.Теперь для каждого из двух других файлов (при условии, что hashSet называется file1Data):

int lineNum = 0;
foreach (var line in File.ReadLines(filename))
{
    ++lineNum;
    if (!file1Data.Contains(line))
    {
        // error here
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...