сравнивая два файла - PullRequest
1 голос
/ 20 мая 2011

у меня два файла

file1 содержимое, как показано ниже

=============================================== ====

OUTPUT1:---------
    orange
    india
    US

xx

OUTPUT2:---------

    orange-1
    india-1
    US-1
xx

=============================================== ====

Файл file2, как показано ниже

OUTPUT1:---------
    orange
    india
    US

xx

OUTPUT2:---------
    orange-1
    india-1
    US-2
xx

=============================================== ====

Я хочу разницу в два, как показано ниже

-----------------------
OUTPUT1: No evolution
----------------------
OUTPUT2: Evolution found
Before:US-1
After:US-2
----------------------

Можно ли написать скрипт на Perl с указанным выше требованием

любая помощь будет высоко ценится

Ответы [ 3 ]

5 голосов
/ 20 мая 2011

Нет Perl, но что-то более удивительное: diff!

Сравнивает файлы:

[blender@arch Desktop]$ diff file1.txt file2.txt 
11c11
<     US-1
---
>     US-2

11c11 говорит, что измененный текст начинается со строки 11, символ 11

1 голос
/ 20 мая 2011

Алгоритм :: Diff должен сделать эту работу. Он работает с массивами (т. Е. Вы можете анализировать любой формат ввода, который вам нравится) и генерирует вывод, похожий на diff.

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

0 голосов
/ 20 мая 2011

Возможно, в Perl, это довольно мощный язык.

Степень сложности зависит от предположений, которые мы можем сделать относительно данных. Это отсортировано? Насколько большие файлы.

Если данные не отсортированы, а файлы слишком велики для того, чтобы их можно было хранить целиком в памяти, вам может потребоваться применить конвейерный подход, сначала сортировку, а затем «дифференцирование», и в этом случае, если у вас есть доступ к инструментам наследования Unix такие как diff и sort, вам может даже не понадобиться Perl.

Если вы хотите использовать Perl, я бы посоветовал рассмотреть проблему поэтапно:

  1. Определение «записей», которые занимают несколько строк. Напишите код для использования одного файла и создайте представление каждой записи.
  2. Решить проблему сортировки, если необходимо создать промежуточный файл, содержащий отсортированные записи.
  3. Выполните различие между двумя отсортированными файлами, если вы можете создать хеш из одного целого файла в памяти, это легко, в противном случае вам нужно извлекать записи из одного файла или другого, в зависимости от того, какой из них имеет «следующую» запись .
  4. Определив изменения, распечатайте детали в нужном формате
...