Скрипт или программа, сравнение 2 файлов

Discussion in 'PHP' started by Bal-lek, 27 Oct 2009.

  1. Bal-lek

    Bal-lek New Member

    Joined:
    25 Jun 2009
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    Нужен скрипт или может программа. Задача такая: есть два файла текстовых, необходимо сравнить их и то, чего не хватает в одном из них, вывести в отдельный файл.
    Пример:
    1-ый файл:
    12345
    121331

    2-ой файл:
    11у2323
    121331
    12345
    56738
    378арв9

    Результат:
    11у2323
    56738
    378арв9


    Т.е. если есть одинаковые, но не в таком порядке как в первом файле, выводить не нужно.
    Как это реализовать, просто далек от php и всего такого... Спасибо
     
    1 person likes this.
  2. Deathdreams

    Deathdreams Elder - Старейшина

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    PHP:

    $n_one 
    = @file_get_contents('веб путь к файлу #1');
    $n_two = @file_get_contents('веб путь к файлу #2');

    $n_one explode("\r\n"$n_one);

    $n_two explode("\r\n"$n_two);

    $out '';
    for(
    $i=0$i <= count($n_one); $i++){

    for(
    $y=0$y <= count($n_two); $y++){

    if(
    trim($n_one[$i]) == trim($n_two[$y])){ continie; }else{

    $out .= $n_two[$y].'\r\n';

    }
    }

    echo 
    'done.\r\nresult:\r\n';
    echo 
    $out;
    вроде так
     
    #2 Deathdreams, 27 Oct 2009
    Last edited: 27 Oct 2009
  3. L I G A

    L I G A Banned

    Joined:
    27 Jul 2008
    Messages:
    482
    Likes Received:
    380
    Reputations:
    49
    Deathdreams c explode() у тебя не выйдет так как "\r\n"
     
    1 person likes this.
  4. Deathdreams

    Deathdreams Elder - Старейшина

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    L I G A
    Спс, исправил.

    Привык уже одинарные ставить.
     
  5. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    PHP:
    <?php
      $file1 
    file ('18_1.txt');
      
    $file2 file ('18_2.txt');
      
    $res array_diff ($file2$file1);
      
    print_r ($res);
    ?>
    вот и весь код =)
     
    1 person likes this.
  6. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Deathdreams, ну и накодил ты... Цикл в цикле...
    Bal-lek, юзай самый простой вариант:
    PHP:
    <?php

    $file1 
    array_map('trim'file('file1.txt'));
    $file2 array_map('trim'file('file2.txt'));
    $diffs array_diff($file2$file1);
    foreach (
    $diffs as $diff)
        echo 
    $diff "<br>\r\n";

    ?>
     
    2 people like this.
  7. Deathdreams

    Deathdreams Elder - Старейшина

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    mailbrush
    То, что первым в голову пришло : )
     
    2 people like this.
  8. Gray_Wolf

    Gray_Wolf Active Member

    Joined:
    7 Mar 2009
    Messages:
    377
    Likes Received:
    135
    Reputations:
    10
    Ну пузырёк вообще часто первым приходит в голову, но лучше от этого отвыкать...
     
  9. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    А теперь представьте себе, что оперативки ~ 64 мб и у вас оба файла по 1Гб. Напишите универсальное решение, самим интересно будет :)
     
    1 person likes this.
  10. Bal-lek

    Bal-lek New Member

    Joined:
    25 Jun 2009
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    ВСЕМ спасибо, ребят, сорри но я вообще нуб в php, как мне теперь организовать вывод результата либо на экран либо в файл?
     
  11. L I G A

    L I G A Banned

    Joined:
    27 Jul 2008
    Messages:
    482
    Likes Received:
    380
    Reputations:
    49
    в коде: mailbrush'a , krypt3r 'a & Deathdreams'a присутствует вывод
     
  12. Bal-lek

    Bal-lek New Member

    Joined:
    25 Jun 2009
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    просто у меня ничего из этого не работает, названия файлов указал свои ес-но, денвер стоит :)
    используя код krypt3r выводит на экран
    Array ( [2] => 2 )

    при использовании кода mailbrush пустой экран и ничего нету в папке
    Спасибо за ответы :)
     
    #12 Bal-lek, 27 Oct 2009
    Last edited: 27 Oct 2009
  13. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Как вариант - считывать по одной строке fgets.
    Надеюсь, ты не открываешь скрипт в браузере? Всмысле напряму, с компа. Сервер юзаешь?
     
  14. Bal-lek

    Bal-lek New Member

    Joined:
    25 Jun 2009
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    ну закинул папку в www на денвере, а вот насчет браузера не понял, я через браузер запускаю скрипты которые есть у меня...
     
  15. L I G A

    L I G A Banned

    Joined:
    27 Jul 2008
    Messages:
    482
    Likes Received:
    380
    Reputations:
    49
    юзает:Array ( [2] => 2 )

    Bal-lek
    в файлах есть что то?
     
  16. Bal-lek

    Bal-lek New Member

    Joined:
    25 Jun 2009
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    да, в первом
    1
    2
    3
    во втором
    3
    2
    4
    1
     
  17. Kusto

    Kusto Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    ясен пень что ничего небудет а где функция открытия файлов fopen() и закрытия после записи в него?- fclose() тебе не готовую программу дали а направление в котором ее до ума довести
    P.S. Прошу прощение- просто не посмотрел внимательно код- думал результат в файл сохраняеться
     
    #17 Kusto, 27 Oct 2009
    Last edited: 27 Oct 2009
  18. Bal-lek

    Bal-lek New Member

    Joined:
    25 Jun 2009
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    Kusto а зачем так нервничать, я никого не заставляю отвечать, и зачем писать сюда
    если я написал в начале темы
    Вы думаете я знаю что это нужно сделать?
    Кто не хочет не отвечайте, никого ен заставляю!!!
     
  19. Kusto

    Kusto Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    абсолютно без нервов))) просто говорю что сырая программа и не к те относилось)))
     
  20. L I G A

    L I G A Banned

    Joined:
    27 Jul 2008
    Messages:
    482
    Likes Received:
    380
    Reputations:
    49
    Кусто не объязательно юзать fopen() ,следственно и fclose(),ему дали готовый код.