порезать строку на мелкие

Тема в разделе "PHP", создана пользователем phillip, 8 июн 2010.

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

    phillip

    Регистр.:
    4 сен 2007
    Сообщения:
    413
    Симпатии:
    15
    есть набор строк. каждую строку надо проверить. Если она более 600 символов, то поделить ее на отрезки каждый по 600, и последний- обрывок. Ну вообщем если длинная строка- сделать кучу коротких, по 600 каждая. Подскажите как :thenks:
     
  2. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    и у вас нет никаких идей ка это сделать? ... это ж банальная работа со строками .. ее прям влоб можно сделать

    PHP:
    $st "123456789r";
    print_r(stt($st3));

    function 
    stt($string$max){
        
    $arr = array();
        
        for(
    $i=0$i strlen($string)/$max$i++){
            
    $arr[] = substr($string$i*$max$max);
        }
        return 
    $arr;
    }
     
    phillip нравится это.
  3. Rinn

    Rinn Постоялец

    Регистр.:
    25 авг 2009
    Сообщения:
    105
    Симпатии:
    25
    PHP:
    $str "оченьдлиннаястрокаq";
    while (
    strlen($str)>=600) {
        
    $str_new_a substr($str0600);
        
    $str_new[] = $str_new_a;
        
    $str str_replace($str_new_a''$str); 
    }
    $str_new[] = $str;
    print_r($str_new);
     
    phillip нравится это.
  4. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102

    PHP:
    $str "$str = str_replace($str_new_a, '', $str)";
    не совсем корректно, потому что если встретится несколько одинаковых субстрок, скрипт порежет все в одну
     
  5. verissimo

    verissimo

    Регистр.:
    26 сен 2006
    Сообщения:
    438
    Симпатии:
    139
    У меня немного более сложная задача. Мне надо разбить текст на куски определенного размера, но так, чтобы все куски обязательно заканчивались разделителем (разделитель - строка из нескольких минусов), присутствующим в тексте. Причем если кусок текста меньше или равен заданному размеру, но не оканчивается на разделитель, то скрипт должен присоединить остаток текста до ближайшего разделителя. Как это реализовать?
     
  6. Inviseble_Demon

    Inviseble_Demon

    Регистр.:
    11 дек 2008
    Сообщения:
    482
    Симпатии:
    350
    Если я правельно понял то алгоритм примерно такой

    разбеваем строку на строки по разделителю.
    Проверяем длину каждой строки.
    Если строка >= устоновленной длины то обрезаем до требуемой а обрезаное присоеденяем в начало следующей строки.
    В ином случае не трогаем строку.

    Добавлено через 4 минуты
    не.... читал раз 17 так и не понял )))
    Если все ещё актуально прикрепите пример и то что должно быть в итоге.
    Думаю тогда будит понятно.
     
  7. verissimo

    verissimo

    Регистр.:
    26 сен 2006
    Сообщения:
    438
    Симпатии:
    139
    К примеру есть такой текстовый файл (разделитель - строка минусов)

    -----------------------

    Описание товара 1 (300 знаков)

    -----------------------

    Описание товара 2 (500 знаков)

    -----------------------

    Описание товара 3 (1200 знаков)

    -----------------------

    Описание товара 4 (300 знаков)

    -----------------------

    Надо получить из него несколько файлов в которых было бы одно или несколько описаний товара, но так, чтобы 1) описания в одном файле были полные и части описаний в другой файл не переходили, 2) размер всех описаний не должен превышать какое-то число, скажем 1000 знаков, 3) если попадается описание равное или превышающее лимит, то такое описание пишется в отдельный файл. Выше это описание "Описание товара 3 (1200 знаков)".

    В вышеприведенном примере файл надо разбить на три файла при лимите в 1000 знаков:

    1-ый файл

    Описание товара 1 (300 знаков) + Описание товара 2 (500 знаков)

    2-ый файл

    Описание товара 3 (1200 знаков)

    3-ий файл

    Описание товара 4 (300 знаков)
     
  8. Offi

    Offi Постоялец

    Регистр.:
    13 июн 2008
    Сообщения:
    76
    Симпатии:
    15
    может стоит regexp-ом? проверяем на соответствие шаблону с разделителем "-----------------------", а дальше по алгоритму Inviseble_Demon!
     
  9. Inviseble_Demon

    Inviseble_Demon

    Регистр.:
    11 дек 2008
    Сообщения:
    482
    Симпатии:
    350
    PHP:
    <?php

    $start_file
    ='data.txt'// Имя файла с данными для работы.
    $sep='-----------------------'// Разделитель.
    $maxlen='1000'// Максимальная длина строки.
    $out_dir='test'// Имя папки в которую помещяются новые файлы.

    $file=file_get_contents($start_file);
    $file=explode($sep$file);
    $file=array_map('trim'$file);
    $count=count($file);
    $new_file_name=0;

    for (
    $i=0$i<$count$i++)
    {
        if (
    $file[$i]!='')
        {
            if (
    strlen($file[$i])>=$maxlen)
            {
                
    file_put_contents('./'.$out_dir.'/'.$new_file_name.'.txt'$file[$i]);
                
    $new_file_name++;
            }
            else
            {
                if (
    $count!=$i+1)
                {
                    if (
    strlen($file[$i].$file[$i+1])<=$maxlen)
                    {
                        
    $file[$i+1]=$file[$i].''.$file[$i+1];
                    }
                    else
                    {
                        
    file_put_contents('./'.$out_dir.'/'.$new_file_name.'.txt'$file[$i]);
                        
    $new_file_name++;
                    }
                }
                else
                {
                    
    file_put_contents('./'.$out_dir.'/'.$new_file_name.'.txt'$file[$i]);
                    
    $new_file_name++;
                }
            }
        }
    }


    ?>
    Код файл на котором тестировал и итог прикрепляю к посту.
     

    Вложения:

    • parser.rar
      Размер файла:
      1 КБ
      Просмотров:
      2
    verissimo нравится это.
Статус темы:
Закрыта.