Вывести n строк из файла.

123 4
SeVlad
На сайте с 03.11.2008
Offline
1609
#11
Х.З. #:
я бы в массив загнал))
Зачем? ТСу нужно получить первые N предложений. Посчитать точки и обрезать. Профит.
Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
D
На сайте с 01.01.2016
Offline
43
#12
вопрос - как? ))SeVlad #:
Зачем? ТСу нужно получить первые N предложений. Посчитать точки и обрезать. Профит.

вопрос - как?))

Пусто...
ХЗ
На сайте с 31.08.2008
Offline
155
#13
SeVlad #:
Зачем? ТСу нужно получить первые N предложений. Посчитать точки и обрезать. Профит.

Тогда расскажи самый простой вариант как без загона в массив ты сможешь выбрать любое предложение, будь оно №1 или №23

SeVlad
На сайте с 03.11.2008
Offline
1609
#14
Х.З. #:
Тогда расскажи самый простой вариант как без загона в массив ты сможешь выбрать любое предложение, будь оно №1 или №23

Во первых - откуда таки фантазии про "любое предложение"? ТСу этого не нужно.

Во вторых - какие проблемы посчитать точки и отбросить до 23й (включительно) и после 24й?

ХЗ
На сайте с 31.08.2008
Offline
155
#15
SeVlad #:

Во первых - откуда таки фантазии про "любое предложение"? ТСу этого не нужно.

Во вторых - какие проблемы посчитать точки и отбросить до 23й (включительно) и после 24й?

покажи, как сделаешь))

SeVlad
На сайте с 03.11.2008
Offline
1609
#16
Х.З. #:

покажи, как сделаешь))

"давай я поищу за тебя на php.net"(с)
Какой бюджет?

D
На сайте с 01.01.2016
Offline
43
#17
function tease($body, $sentencesToDisplay = 2) {
        $nakedBody = preg_replace('/\s+/',' ',strip_tags($body));
        $sentences = preg_split('/(\.|\?|\!)(\s)/',$nakedBody);
    
        if (count($sentences) <= $sentencesToDisplay)
            return $nakedBody;
    
        $stopAt = 0;
        foreach ($sentences as $i => $sentence) {
            $stopAt += strlen($sentence);
    
            if ($i >= $sentencesToDisplay - 1)
                break;
        }
    
        $stopAt += ($sentencesToDisplay * 2);
        return trim(substr($nakedBody, 0, $stopAt));
    }

Вот такой код нарыл.

Понятно что 

$sentencesToDisplay = 2

это сколько предложений выводить. А что эта 2 значит?

$sentencesToDisplay * 2
D
На сайте с 01.01.2016
Offline
43
#18
и второй вопрос, как сделать так, чтобы можно было назначать
function tease($body, $sentencesToDisplay = 2)

при вызове? если сделать просто так 

echo tease($text, 4);

то не выводится 4 предложения, а 2

S
На сайте с 13.10.2014
Offline
171
#19

это не самая простая задача, так как у текста могут быть окончания не только на точку. Есть еще вопросительный и восклицательный знаки. Их кол-во тоже может меняться. могут быть и комбинации.
Многие авторы, по доброте душевной, добавляют главы и разделы.
по этой причине текст обычно рубится за несколько проходов. первые 1-n проходов подготовительные, когда убирается вся ненужная информация, а последний проход уже разбиение текста на предложения (абзацы).

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

SeVlad
На сайте с 03.11.2008
Offline
1609
#20
silicoid #:
у текста могут быть окончания не только на точку. Есть еще вопросительный и восклицательный знаки.

Да, кстати. Этот момент я упустил (а ещё троеточия ;) ).

silicoid #:
если у вас текст стандартизирован. то-есть нет ни вопросительных знаков, ни восклицательных, ни многоточий, то просто прогоняете его explode и готово.

А если есть, то 4 раза (с каждым возможным разделителем ;))

Ида. Надо искать не точку, а точку с пробелом.

Но ещё вспомнилась засада - если в тексте есть сокращения, то всё намного хуже.

123 4

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий