Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблемы со строками
 
 автор: neadekvat   (10.05.2009 в 12:27)   письмо автору
 
 

Еще раз здравствуйте
Использую для возвращения строк из файла стандартную функцию ($stroka = fgets($file_open))
Однако сейчас исходники в текстовых файлах так сделаны, что перенос строк идет посреди предложений и тд, получается, мне возвращается не полное предложение - без конца, либо вообще середина
Вот пример из книжки:
Авторы  уведомляют,  что  настоящее,  вышедшее  в бумажной
обложке издание,  и  никакое  иное,  было  выпущено  в  свет  с
единственной  целью:  как  можно  быстрее  заработать некоторое
количество денег. Те, кто  почитает  для  себя  обязательным  с
почтением  относится  к  определенному автору, не притронутся к
этому злобному пасквилю и десятифутовым боевым копьем.

Тут всего два предложение, а вернется мне 6 строк
Скажите, возможно ли как-то проверить, закончино ли предложение в строке (оно ведь на точку, воскл или вопр знак заканчивается)?

  Ответить  
 
 автор: Balamut182   (10.05.2009 в 13:37)   письмо автору
 
   для: neadekvat   (10.05.2009 в 12:27)
 

может вам поможет функция preg_match_all?

preg_match_all("/[^\.\?!]+(!|\.|\?)/", 
    $str, 
    $out, PREG_SET_ORDER
);

тогда в массиве $out[$i][0] - будут ваши предложения, следует иметь в виду что последнее предложение также должно заканчиваться знаком препинания, иначе последнего предложения в массиве не будет

  Ответить  
 
 автор: neadekvat   (10.05.2009 в 13:56)   письмо автору
 
   для: Balamut182   (10.05.2009 в 13:37)
 

Спасибо, конечно, но в моем случаи такой вариант мне не подойдет (скрипт остальной работать не будет, и исправлять там сложно)
Скажите, а можно сделать, возможно с регулярным выражением, а может и просто со строковой функцией такое:
В тексте все сочетания, когда после любой буквы русского или латинского алфавита, запятой или двоеточия стоит разрыв строки (перенос), заменить на эту же букву, знак но уже с пробелом? К сожалению, очень не дружу с регулярными выражениями, упорно их не понимаю, поэтому даже примерный код не могу написать(

  Ответить  
 
 автор: Balamut182   (10.05.2009 в 14:00)   письмо автору
 
   для: neadekvat   (10.05.2009 в 13:56)
 

если вы хотите убрать перенос строки - то используйте trim() для обработки каждой строки

  Ответить  
 
 автор: neadekvat   (10.05.2009 в 14:19)   письмо автору
 
   для: Balamut182   (10.05.2009 в 14:00)
 

Благодарю! Я и не знал, что эта функция еще и перенос строки удаляет оО
Только я взял rtrim, потому что куча табуляций в начале строки (у первых предложений абзацев) мне нужна будет - для разделения одной большой строки на исходные абзацы
И все-так скрипт придется переделывать…

  Ответить  
 
 автор: neadekvat   (10.05.2009 в 14:48)   письмо автору
 
   для: neadekvat   (10.05.2009 в 12:27)
 

И опять мне приходится спрашивать...
Итак, я делю строку: strtok($stroka, " "); По пробелу, как вы видете
А мне нужно, чтобы он делил не там, где один пробел, а там, где их несколько. Скажем, три.
Ставить три подрят просто так - толку нет, пробовал \040, несколько подряд тоже не дают результату
Можно ли такое сделать и как, если можно?

  Ответить  
 
 автор: Balamut182   (10.05.2009 в 14:53)   письмо автору
 
   для: neadekvat   (10.05.2009 в 14:48)
 

У меня такое ощущение что вы изобретаете велосипед, возможно, если бы вы объяснили задачу целиком, вместе у нас получилось бы найти более элегантное решение.

  Ответить  
 
 автор: neadekvat   (10.05.2009 в 15:03)   письмо автору
 
   для: Balamut182   (10.05.2009 в 14:53)
 

ладно, с начала:
есть скрипт, который берет текст из файла, затем делит этот текст на разделы и страницы, в каждом разделе по 100 страниц
На каждой странице определенно количество символов
Скрипт писался с учетом, что каждый абзац будет неделим изначально, т.е. будет представлять собой целую строчку, в который бы он посчитал количество символов и вставлял в страницу. Если же превышает количество допустимых - то вставляется в другую страницу (раздеы и страницы - условное название, Они выделяются только заголовком Страница №...)
Скрипт написан, все работает, но потом оказалось, что все те файлы (книжки) написаны не цельными текстами, а выравнены по определенной ширине. Т.е., как в первом посте, логический абзац в 2 предложения поделен на 6 строк, из-за этого возникают такие ситуации:
Страница 1
И мы пошли
Страница 2
домой.

Если бы строка была цельной - все это оказалось уже во второй странице, чтобы не разрывать предложение и абзац

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

  Ответить  
 
 автор: Balamut182   (10.05.2009 в 15:13)   письмо автору
 
   для: neadekvat   (10.05.2009 в 15:03)
 

аська 463-362-568

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования