склеивание на рнр нужна помощь

Discussion in 'PHP' started by bafoed, 10 Sep 2010.

  1. bafoed

    bafoed Member

    Joined:
    14 Jul 2009
    Messages:
    88
    Likes Received:
    12
    Reputations:
    10
    вообщем, нужен скрипт типа:

    начальный файл \ конечный файл.

    1 вида:
    PHP:

    |qwe|grab|asdasd|ololo|qwe rewqq
    |t6r6|43w4sd|ajd|77olo|ara|arr arr2

    а второй
    PHP:
    |arr|arr2|qwsxx|1wsfg|qsxc
    |qwe|rewqq|ggtyft|tr5t4|665654

    Так вот, нужно чтобы в конце был вариант

    PHP:
    |qwe|grab|asdasd|ololo|qwe rewqq|qwe|rewqq|ggtyft|tr5t4|665654
    |t6r6|43w4sd|ajd|77olo|ara|arr arr2|arr|arr2|qwsxx|1wsfg|qsxc
    т.е не просто соединение строк 1 к 1, вторая ко второй, а их сортировка на одинаковость конца первого и начала второго
     
  2. Dark_cracker

    Dark_cracker Member

    Joined:
    29 May 2009
    Messages:
    73
    Likes Received:
    8
    Reputations:
    1
    про сортировку не понял но соединить можно так
    PHP:
    $file=file("file.txt");// файл один
    $file1=file("file2.txt");// второй файл
    for($i=0;$i<count($file);$i++)
    {
    $save .=rtrim($file[$i]).$file1[$i];
    }
    file_put_contents("save.txt",$save);
    если в первом файле будет строк меньше чем во втором тогда не допишеться остальное со второго файла
     
  3. php_casper

    php_casper New Member

    Joined:
    6 Jun 2010
    Messages:
    64
    Likes Received:
    1
    Reputations:
    1
    открытие файлов, присвоить их значения в переменки, склеить, записать, закрыть.
     
  4. bafoed

    bafoed Member

    Joined:
    14 Jul 2009
    Messages:
    88
    Likes Received:
    12
    Reputations:
    10
    Dark_cracker дело в том и есть, что нужна сортировка
    php_casper да я понимаю) прошу помощи поэтому)
     
  5. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    bafoed потрудитесь объяснить, что имеется ввиду под сортировкой. И смотрите тут: http://php.net/usort
     
    _________________________
  6. bafoed

    bafoed Member

    Joined:
    14 Jul 2009
    Messages:
    88
    Likes Received:
    12
    Reputations:
    10
    попробую еще раз..

    Вот допустим файл 1.тхт

    Code:
    |VISA|100500|USA|+5665445|633|John Micke|
    |VISA|123456|AUS|+1234556|777|Arnold Mass|
    А вот файл 2.txt
    Code:
    |Arnold|Mass|qwe@qwe.com|AL|
    |John|Micke|123@123.us|US|
    
    А теперь такой должен быть резултат:
    Code:
    |VISA|100500|USA|+5665445|633|John Micke| John|Micke|123@123.us|US|
    |VISA|123456|AUS|+1234556|777|Arnold Mass|Arnold|Mass|qwe@qwe.com|AL|
    Т.е не простое склеивание строк, а чтобы имена совпадали, в каком бы порядке они не шли в обоих текстовиках. Надеюсь, я понятно обьяснил.
     
  7. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    bafoed Для _небольших_ файлов и если в 1.txt нет строк с одинаковыми именем и фамилией:
    PHP:
    $f1 file_get_contents('1.txt');
    $f2 file('2.txt');

    preg_match_all('~^.*?\|([^\|]+)\|\s*$~msi'$f1$data);
    $arr array_combine($data[1], $data[0]);

    foreach(
    $f2 as $row)
    {
        
    $tmp explode('|'$row);
        
    $tmp_name trim($tmp[1]).' '.trim($tmp[2]);
        if (
    in_array($tmp_name$data[1]))
            echo 
    trim($row).substr($arr[$tmp_name],1)."\r\n";
    }
    На самом деле условий работоспособности - целый ворох, и потому я бы советовал загнать все это в БД и работать уже с ней
     
    _________________________
  8. bafoed

    bafoed Member

    Joined:
    14 Jul 2009
    Messages:
    88
    Likes Received:
    12
    Reputations:
    10
    спасибо, попробую. Пишу просто парсер на РНР, а не сайт)

    ____
    на выходе получается бред вида:
    PHP:
    |Arnold|Mass|qwe@qwe.com|AL|VISA|123456|AUS|+1234556|777|Arnold Mass|
    |
    John|Micke|123@123.us|US|VISA|100500|USA|+5665445|633|John Micke|
     
    #8 bafoed, 11 Sep 2010
    Last edited: 11 Sep 2010
  9. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    2,041
    Likes Received:
    933
    Reputations:
    199
    PHP:
    <?php
    $f1 
    file('1.txt');
    $f2 file_get_contents('2.txt'); 

    foreach (
    $f1 as $str) {
        
        
    $cc explode('|',$str);
        list(
    $name1,$name2) = explode(' '$cc[5]);
        
    $name1 trim($name1);
        
    $name2 trim($name2);
        
    $pattern "#$name1\|$name2\|.*#i";
        
        
        
    $str2 find_cc($pattern);
        if(
    $str2){
            echo 
    trim($str).' '.$str2.'<br>';
            
        } else {
            echo 
    'Данные по имени '.$name1.' '.$name2.' не были найдены в файле 2.txt <br>';
        }
        
    }


    function 
    find_cc($pattern){
        global 
    $f2;
        if(
    preg_match($pattern,$f2,$m)){
            return 
    trim($m[0]);
        } else {
            return 
    false;
        }
    }
    ?>
    Результат:
    Подходит такой вариант?
     
    _________________________
    2 people like this.
  10. bafoed

    bafoed Member

    Joined:
    14 Jul 2009
    Messages:
    88
    Likes Received:
    12
    Reputations:
    10
    Спасибо, если будет работать то в самую точку