Сравнить 2 txt файла

Тема в разделе "PHP", создана пользователем Юрик, 2 май 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Юрик

    Юрик Постоялец

    Регистр.:
    2 фев 2008
    Сообщения:
    74
    Симпатии:
    2
    Каким образом можно это сделать?
    Пример:
    Есть файл 1.txt, 2.txt
    В файле 1.txt записи:
    Запись1
    Запись2
    Запись3
    Запись4
    В файле 2.txt
    Запись4
    Запись2
    Как вывести разницу? т.е.
    Запись1
    Запись3
     
  2. sms-send

    sms-send Создатель

    Регистр.:
    7 июл 2007
    Сообщения:
    29
    Симпатии:
    9
    PHP:
    print_r(
        
    array_diff(
            
    preg_split('~[\\r\\n]+~',file_get_contents('1.txt'),-1,PREG_SPLIT_NO_EMPTY),
            
    preg_split('~[\\r\\n]+~',file_get_contents('2.txt'),-1,PREG_SPLIT_NO_EMPTY)
        )
    );
     
    Юрик нравится это.
  3. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    считывание фала в массив -- file() ( 2 sms-send если для этого регулярки использовать -- жуть, тогда уж explode() )
    вывод элементов который содержится только в одном из двух массивов -- array_diff()

    вторую функцию вызовешь два раза :
    Код:
    <?php
    $m1=file('1.txt');
    $m2=file('2.txt');
    $a=array_diff($m1,$m2);
    $b=array_diff($m2,$m1);
    $result=array_merge($a,$b);
     
    Юрик нравится это.
  4. sms-send

    sms-send Создатель

    Регистр.:
    7 июл 2007
    Сообщения:
    29
    Симпатии:
    9
    Здесь косяк может быть, если после конечного элемента нет перевода строки либо если используются разные типы переводов (RN, R, N), нужно быть чуть внимательней.
     
  5. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    file() реагирует на символ конца строки, который у тебя будет в любом случае

    а ты проверь =)

    типа перевода всего два -- откуда у тебя третий взялся?
    где ты его встречал ?
     
  6. Jeurey

    Jeurey

    Регистр.:
    13 сен 2006
    Сообщения:
    419
    Симпатии:
    576
    PHP:
    <?php
    exec
    (`diff 1file.txt 2file.txt`, $arr);
    print_r($arr);
    ?>
     
  7. sms-send

    sms-send Создатель

    Регистр.:
    7 июл 2007
    Сообщения:
    29
    Симпатии:
    9
    Он так же дописывает к строке символ возврата каретки и символ перевода строки, если такие имеются.

    Ну проверил ))

    PHP:
    $m1=file('1.txt');
    /*
    Запись1
    Запись2
    Запись3
    Запись4 << нет конечного перевода строки
    */

    $m2=file('2.txt');

    /*
    Запись4
    Запись2 << нет конечного перевода строки
    */

    $a=array_diff($m1,$m2);
    $b=array_diff($m2,$m1);
    $result=array_merge(
    $a,
    $b
    );
    print_r($result);
    /*
    Выводит:

    Array
    (
        [0] => Запись1

        [1] => Запись2

        [2] => Запись3

        [3] => Запись4
        [4] => Запись4

        [5] => Запись2
    )
    */
    0x0D0A - Windows
    0x0A - *nix
    0x0D - Mac OS
     
Статус темы:
Закрыта.