Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбивка текста на php 
:(
    Опции темы
library
Дата 3.9.2009, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 28.3.2008

Репутация: нет
Всего: нет



Здравствуйте, Ув. форумчане. Помогите, пожалуйста, придумать алгоритм.

Есть большой текст, нужно его разбить на куски, скажем, по 3000 символов, но так что бы не обрываться посредине слова, а заканчивать абзац до конца, и между кусками вставлять определённые строки. Вот с первой частью проблемы.

Это сообщение отредактировал(а) library - 3.9.2009, 15:30
PM MAIL   Вверх
icewind
Дата 3.9.2009, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

Репутация: 20
Всего: 20



html текст? 
Цитата(library @  3.9.2009,  14:51 Найти цитируемый пост)
заканчивать абзац до конца

А если он только начался и там еще 50 предложений?


--------------------
user posted image
PM MAIL Skype   Вверх
library
Дата 3.9.2009, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 28.3.2008

Репутация: нет
Всего: нет



тогда в меньшую сторону, но не менее 2000 символов, а если не получается то уж доконца 50 предложений

текст не html

Это сообщение отредактировал(а) library - 3.9.2009, 15:05
PM MAIL   Вверх
icewind
Дата 3.9.2009, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

Репутация: 20
Всего: 20



А в каком формате? Определять начало нового абзаца нужно при появлении символа табуляции?


--------------------
user posted image
PM MAIL Skype   Вверх
Ипатьев
Дата 3.9.2009, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Цитата(library @  3.9.2009,  14:51 Найти цитируемый пост)
Разбивка текста на php

прежде, чем переходить к реализации на каком-либо языке, сначала надо составить алгоритм.
в частности, формализовать используемые понятия - абзац, слово, символ.
ведь программу придется объяснять языку программирования, а он не знает, что такое абзац.



PM MAIL   Вверх
Kallisto
Дата 3.9.2009, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 163
Регистрация: 20.4.2007

Репутация: -3
Всего: -1



wordwrap не подходит?

Добавлено через 30 секунд
http://ua2.php.net/manual/en/function.wordwrap.php
PM MAIL   Вверх
NewDima
Дата 3.9.2009, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



Kallisto, прочитайте сначала вопрос.
Ипатьев правильно говорит, сначала нужно конкретизировать все понятия, чтобы было по чем алгоритм строить
PM ICQ   Вверх
library
Дата 3.9.2009, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 28.3.2008

Репутация: нет
Всего: нет



Текст - книга состаящая из абзацев.

Абзац - некоторое количество предложений, разделённых строчкой или несколькими 

Слово, символ - думаю понятно.
PM MAIL   Вверх
Ипатьев
Дата 3.9.2009, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



ну, если не обращать внимание отсутствие определения "предложения", то теперь информации достаточно.
если задача сводится к разбивке по 1+ пустых строк, то она решается достаточно просто.

а "определенные строки" между кусками - это реклама?
PM MAIL   Вверх
library
Дата 3.9.2009, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 28.3.2008

Репутация: нет
Всего: нет



Цитата(Ипатьев @ 3.9.2009,  15:32)
а "определенные строки" между кусками - это реклама?

Нет не реклама, программа делается в образовательных целях, строки будут передавать определённые данные другим блокам программы.
PM MAIL   Вверх
NewDima
Дата 3.9.2009, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



а на сколько можно верить тому, что текст действительно имеет этие самые строки через каждые 2000-3000 символов?
PM ICQ   Вверх
library
Дата 3.9.2009, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 28.3.2008

Репутация: нет
Всего: нет



Цитата(NewDima @ 3.9.2009,  15:46)
а на сколько можно верить тому, что текст действительно имеет этие самые строки через каждые 2000-3000 символов?

верить можно, что в пределах 10000 символов, хоть один абзац да кончится, ну а если нет будет один 20000 символов.
PM MAIL   Вверх
NewDima
Дата 3.9.2009, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



Цитата(library @ 3.9.2009,  22:57)
верить можно, что в пределах 10000 символов, хоть один абзац да кончится, ну а если нет будет один 20000 символов.

Вы хоть определитесь...
PM ICQ   Вверх
library
Дата 3.9.2009, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 28.3.2008

Репутация: нет
Всего: нет



Цитата(NewDima @ 3.9.2009,  16:03)
Цитата(library @ 3.9.2009,  22:57)
верить можно, что в пределах 10000 символов, хоть один абзац да кончится, ну а если нет будет один 20000 символов.

Вы хоть определитесь...

Смысл такой вобщем, текст делится на абзацы и точка. И неважно побольшому счёту какой длины эти абзацы, путь 100 символов, пусть 20000, делиться они должны при достижении 3000 + до конца текущего обзаца, думаю так ясно.
PM MAIL   Вверх
NewDima
Дата 3.9.2009, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



Код

function func($matches) { print_r($matches);
    return $matches[1].$matches[3].'<br />';
}
$text = "Абзац первый\nАбзац второоооооооооооооооооооооой\nТретий\nЧетвертый абзац";
echo preg_replace_callback('#((.|[\n]){15})([^\n]+)([\n])#', 'func', $text);

Так?
--------
Если не понятно, поясню.
Код заменяет разделитель абзацев (в данном случае "\n" на "<br />"), только если размер текста перед разделителем и после предыдущего разделителя не меньше 15 символов. В вашем случае нужно поставить 3000 и заменить разделитель абзацев на подходящий

Это сообщение отредактировал(а) NewDima - 3.9.2009, 17:27
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0518 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.