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

Статус
В этой теме нельзя размещать новые ответы.

phillip

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

PHP:
$st = "123456789r";
print_r(stt($st, 3));

function stt($string, $max){
	$arr = array();
	
	for($i=0; $i < strlen($string)/$max; $i++){
		$arr[] = substr($string, $i*$max, $max);
	}
	return $arr;
}
 
PHP:
$str = "оченьдлиннаястрокаq";
while (strlen($str)>=600) {
	$str_new_a = substr($str, 0, 600);
	$str_new[] = $str_new_a;
	$str = str_replace($str_new_a, '', $str); 
}
$str_new[] = $str;
print_r($str_new);
 
PHP:
$str = "оченьдлиннаястрокаq";
while (strlen($str)>=600) {
	$str_new_a = substr($str, 0, 600);
	$str_new[] = $str_new_a;
	$str = str_replace($str_new_a, '', $str); 
}
$str_new[] = $str;
print_r($str_new);


PHP:
$str = "$str = str_replace($str_new_a, '', $str)";
не совсем корректно, потому что если встретится несколько одинаковых субстрок, скрипт порежет все в одну
 
У меня немного более сложная задача. Мне надо разбить текст на куски определенного размера, но так, чтобы все куски обязательно заканчивались разделителем (разделитель - строка из нескольких минусов), присутствующим в тексте. Причем если кусок текста меньше или равен заданному размеру, но не оканчивается на разделитель, то скрипт должен присоединить остаток текста до ближайшего разделителя. Как это реализовать?
 
Если я правельно понял то алгоритм примерно такой

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

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

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

Описание товара 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 знаков)
 
может стоит regexp-ом? проверяем на соответствие шаблону с разделителем "-----------------------", а дальше по алгоритму Inviseble_Demon!
 
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 KB · Просмотры: 2
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху