Скрипт поиска замены php

Тема в разделе "Как сделать...", создана пользователем StrikeOFF, 21 фев 2012.

  1. StrikeOFF

    StrikeOFF ♥kan inte lyfta utan lift♥

    Регистр.:
    20 мар 2010
    Сообщения:
    362
    Симпатии:
    200
    Помогите скрипт сделать
    PHP:
    в файле ткст.тхт
    Находим все 2012
    -04-19 18:00:00
    04 делаеем переменной $var1
    19 делаеем переменной $var2
    $var2 присваиваем значение $var2
    +1
        если $var2 становиться больше 30
    (это числа месяцанезнаю как правильно обиграть чтобы дни не пропадали)
    присваиваем $var2 значение 01
      присваиваем $var1 значение $var1
    +1}
    заменяем 2012-04-19 18:00:00 на '2012-'.'$var1'.'-'.'$var2'.' 18:00:01';
    ищем следующий
            2012
    -04-19 18:00:00 повторяем функцию выше пока предмет поиска не исчезнет
     
  2. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    регулярки. Хотя я думаю задача стоит чтобы не просто 1 день и 1 секунду прибавить, можно сделать любую дату. Но раз ТЗ есть
    PHP:
    function replaceDate($m){
     
    $time = @mktime( (int)$m[4], (int)$m[5],(int)$m[6], (int)$m[2],(int)$m[3],(int)$m[1]);
    // теперь мы можен генерировать любую дату. Напр прибавить не просто 1 день и 1 час а вообще случайное число
    // но пусть это будет 1 день и 1 секунда
    $time += 60*60*24 1;
     
    return 
    date("Y-m-d H:i:s"$time);
     
    }
    echo 
    preg_replace_callback('~(\d{4})-(\d{2})-(\d{2}) (\d{2}:((\d{2}:((\d{2})~''replaceDate'$e);
     
  3. StrikeOFF

    StrikeOFF ♥kan inte lyfta utan lift♥

    Регистр.:
    20 мар 2010
    Сообщения:
    362
    Симпатии:
    200
    Я нижнюю подправил до такого вида, ато при компиляции ошибку выдавало. Но все же я не приложу ума как его использовать.:oops:
    PHP:
    echo preg_replace_callback('~(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})~''replaceDate'$e);
    Я просто парсером привожу документ в вид когда остаеть пройтись и изменить одну переменную, что бы раз в день(но естественно лучше в определённый период) Джумла постила новость.
     
  4. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    да, я вначале запостил без тегов кода и он скобки попортил)

    вместо $e ты передаёшь содержимое файла. к примеру
    $new_content = preg_replace_callback('~(\d{4})-(\d{2})-(\d{2}) (\d{2}:((\d{2}:((\d{2})~', 'replaceDate', file_get_contents('txtfile.txt'));
    $new_content - это уже с изменёнными датами текст
     
    StrikeOFF нравится это.
  5. StrikeOFF

    StrikeOFF ♥kan inte lyfta utan lift♥

    Регистр.:
    20 мар 2010
    Сообщения:
    362
    Симпатии:
    200
    PHP:
    <?php
     
    $file 
    file('txtfile.txt');
    $sitename 'http://mainpage.com';
     
    function 
    when_find($matches)
      {
        return 
    $matches[1].($matches[2]+1);
      }
    preg_replace_callback(
        
    '/$file/',
        
    "when_find",
        
    $sitename);
     
    ?>
    Есть папка с разными файлами. Корень сайта. Нужно чтобы скрипт брал из txtfile.txt строки и производил поиск по всей папке(она в один уровень) Если находит совпадение - меняет на $sitename. Я тут написал кое-что. оно компилиться но я не делает что я хочу, тут по идее еще надо указать ему правильно на папку и может быть я первую переменную в preg_replace_callback не так задал..
     
  6. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    PHP:
    '/$file/'
    Этот кусок на мысли не наводит?
     
  7. StrikeOFF

    StrikeOFF ♥kan inte lyfta utan lift♥

    Регистр.:
    20 мар 2010
    Сообщения:
    362
    Симпатии:
    200
    Чем его заставить искать в нужной мне папке по всем файлам?
    Наводит не то что я ищу "$file"
     
  8. scripterz

    scripterz Создатель

    Регистр.:
    20 апр 2008
    Сообщения:
    19
    Симпатии:
    0
    Зачем экранируете?
     
  9. StrikeOFF

    StrikeOFF ♥kan inte lyfta utan lift♥

    Регистр.:
    20 мар 2010
    Сообщения:
    362
    Симпатии:
    200
    PHP:
    <?php
     
    $file 
    file('txtfile.txt');
    $sitename "http://mainpage.com";
     
    function 
    when_find($matches)
      {
        return 
    $matches[1].($matches[2]+1);
      }
    preg_replace_callback(
        
    $file,
        
    "when_find",
        
    $sitename);
     
    ?>
    Ну ясно, я убрал экран, но ловлю ошибку
    Warning: preg_replace_callback() [function.preg-replace-callback]: Delimiter must not be alphanumeric or backslash in \home\site.ru\www\index.php on line 13
    Я так понимаю что его не устраивают разделители в файле txtfile.txt
    Попробовал добавить \n в конец строк в файле, не помогло.
     
  10. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Вообще почитай документацию.
    PHP:
    preg_replace_callback(
        
    "/".$file."/",
        
    "when_find",
        
    $sitename);
     
    StrikeOFF нравится это.