15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Сравнение двух файлов

Автор: James Aguirre

Изначально требовалось сравненить два больших архива. Оказывается на Перле это делается очень просто. Совместимость: Perl 5 (все версии)
    #################################################
    # Файл: readAndCompare.pl 
    # 
    # Резюме: Данный скрипт был написан как замена
    # для команды DOS сравнения файлов, и эквивалентен 
    # fc /b (BINARY) <FILE> <FILE>
    # пробелы не игнорируются 
    #################################################
    !#usr/bin/perl
    # скрипт из командной строки запрашивает пути к сравниваемым файлам 
    print "Enter Path to Production file.\n";
    chomp($pPath=<STDIN>);
    ##### DEBUG #####
    #print "Path Given was $pPath\n";
    print "Enter Path to Versioned file.\n";
    chomp($vPath=<STDIN>);
    # Проверяем, чтобы пути к файлам не были одинаковыми.
    if($pPath eq $vPath)
    {
    print "Бессмыслено сравнивать один и тот же файл\n";
    exit;
    }
    ##### DEBUG #####
    #print "Path Given was $vPath\n";
    # Открываем первый файл.
    open(PROD, "< $pPath") or die "Can't read the production file";
    
    # записываем в scalar
    while(<PROD>)
    {
    	 $pHandle .=$_
    }
    # Закрываем файл
    close(PROD) or die "Can't close the production file.";	 
    	 
    # Открываем второй файл только для чтения.
    open(VERS, "< $vPath") or die "Can't read the versioned file";
    # записываем в scalar
    while(<VERS>)
    {
    	 $vHandle .=$_
    }
    # Закрываем файл
    close(VERS) or die "Can't close the versioned file.";
    # Сравниваем два скаляра 
    ###### Внимание: это бинарное сравнение. 
    if($vHandle ne $pHandle)
    	{
    print "Первый файл отличается от второго .\n";
    	}
    else
    {
    # Какое-нибудь умное сообщение :) 
    exit;
    }