Как сравнить данные в 2 файла в Perl? - PullRequest
2 голосов
/ 14 июля 2010

Например:

Файл 1:

Apple
Orange
grapes

Файл 2:

Orange
grapes
Apple 

Я пытаюсь проверить, имеют ли оба файла одинаковые данные в разныхпорядок.

Как это сделать без использования какого-либо внешнего модуля?

Ответы [ 5 ]

4 голосов
/ 14 июля 2010
use strict;
use warnings;

# $d{LINE} = TALLY
my ($n, %d) = (1);
while (<>){
    $d{$_} += $n;
    $n *= -1 if eof;
}

# Now get whatever kind of lines you are interested in.
my @same_in_both_files = grep { $d{$_} == 0 } keys %d;
my @surplus_in_file1   = grep { $d{$_} >  0 } keys %d;
my @surplus_in_file2   = grep { $d{$_} <  0 } keys %d;

# Or just get a true-false verdict.
my $files_differ = 1 if grep $_, values %d;
4 голосов
/ 14 июля 2010

Это простой вопрос чтения каждой строки двух файлов в хеш, а затем сравнения содержимого двух хешей. По сути, это упражнение для начинающих программистов.

3 голосов
/ 14 июля 2010

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

3 голосов
/ 14 июля 2010

Если вы хотите использовать perl, чтобы найти разницу между двумя файлами, вы можете попробовать Text :: Diff CPAN модуль.

2 голосов
/ 14 июля 2010

Вот простой способ сделать то, что вы хотите в Perl:

В pfile1:

Apple
Orange
grapes

В pfile2:

Orange
grapes
Apple

скрипт perl:

#!/usr/bin/env perl

open (FILE1, "pfile1") || die ("Can't open file pfile1 for reading");
open (FILE2, "pfile2") || die ("Can't open file pfile2 for reading");

my @file1 = <FILE1>;
my @file2 = <FILE2>;

@sorted_file1 = sort @file1;
@sorted_file2 = sort @file2;

die("Your Files are different\n")
  unless ($#sorted_file1 == $#sorted_file2);

for my $item (0 .. $#sorted_file1) {
  if ($sorted_file1[$item] ne $sorted_file2[$item]) {
    die("Your Files are different\n");
  }
}
print "Your Files are the same\n";

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

Затем вы получите сообщение о том, что файлы одинаковы ... или нет.

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