|
|
|
| Еще раз здравствуйте
Использую для возвращения строк из файла стандартную функцию ($stroka = fgets($file_open))
Однако сейчас исходники в текстовых файлах так сделаны, что перенос строк идет посреди предложений и тд, получается, мне возвращается не полное предложение - без конца, либо вообще середина
Вот пример из книжки:
Авторы уведомляют, что настоящее, вышедшее в бумажной
обложке издание, и никакое иное, было выпущено в свет с
единственной целью: как можно быстрее заработать некоторое
количество денег. Те, кто почитает для себя обязательным с
почтением относится к определенному автору, не притронутся к
этому злобному пасквилю и десятифутовым боевым копьем.
|
Тут всего два предложение, а вернется мне 6 строк
Скажите, возможно ли как-то проверить, закончино ли предложение в строке (оно ведь на точку, воскл или вопр знак заканчивается)? | |
|
|
|
|
|
|
|
для: neadekvat
(10.05.2009 в 12:27)
| | может вам поможет функция preg_match_all?
preg_match_all("/[^\.\?!]+(!|\.|\?)/",
$str,
$out, PREG_SET_ORDER
);
|
тогда в массиве $out[$i][0] - будут ваши предложения, следует иметь в виду что последнее предложение также должно заканчиваться знаком препинания, иначе последнего предложения в массиве не будет | |
|
|
|
|
|
|
|
для: Balamut182
(10.05.2009 в 13:37)
| | Спасибо, конечно, но в моем случаи такой вариант мне не подойдет (скрипт остальной работать не будет, и исправлять там сложно)
Скажите, а можно сделать, возможно с регулярным выражением, а может и просто со строковой функцией такое:
В тексте все сочетания, когда после любой буквы русского или латинского алфавита, запятой или двоеточия стоит разрыв строки (перенос), заменить на эту же букву, знак но уже с пробелом? К сожалению, очень не дружу с регулярными выражениями, упорно их не понимаю, поэтому даже примерный код не могу написать( | |
|
|
|
|
|
|
|
для: neadekvat
(10.05.2009 в 13:56)
| | если вы хотите убрать перенос строки - то используйте trim() для обработки каждой строки | |
|
|
|
|
|
|
|
для: Balamut182
(10.05.2009 в 14:00)
| | Благодарю! Я и не знал, что эта функция еще и перенос строки удаляет оО
Только я взял rtrim, потому что куча табуляций в начале строки (у первых предложений абзацев) мне нужна будет - для разделения одной большой строки на исходные абзацы
И все-так скрипт придется переделывать… | |
|
|
|
|
|
|
|
для: neadekvat
(10.05.2009 в 12:27)
| | И опять мне приходится спрашивать...
Итак, я делю строку: strtok($stroka, " "); По пробелу, как вы видете
А мне нужно, чтобы он делил не там, где один пробел, а там, где их несколько. Скажем, три.
Ставить три подрят просто так - толку нет, пробовал \040, несколько подряд тоже не дают результату
Можно ли такое сделать и как, если можно? | |
|
|
|
|
|
|
|
для: neadekvat
(10.05.2009 в 14:48)
| | У меня такое ощущение что вы изобретаете велосипед, возможно, если бы вы объяснили задачу целиком, вместе у нас получилось бы найти более элегантное решение. | |
|
|
|
|
|
|
|
для: Balamut182
(10.05.2009 в 14:53)
| | ладно, с начала:
есть скрипт, который берет текст из файла, затем делит этот текст на разделы и страницы, в каждом разделе по 100 страниц
На каждой странице определенно количество символов
Скрипт писался с учетом, что каждый абзац будет неделим изначально, т.е. будет представлять собой целую строчку, в который бы он посчитал количество символов и вставлял в страницу. Если же превышает количество допустимых - то вставляется в другую страницу (раздеы и страницы - условное название, Они выделяются только заголовком Страница №...)
Скрипт написан, все работает, но потом оказалось, что все те файлы (книжки) написаны не цельными текстами, а выравнены по определенной ширине. Т.е., как в первом посте, логический абзац в 2 предложения поделен на 6 строк, из-за этого возникают такие ситуации:
Страница 1
И мы пошли
Страница 2
домой.
Если бы строка была цельной - все это оказалось уже во второй странице, чтобы не разрывать предложение и абзац
По правилам оформления книг - это нормально, часто конец предложения оказывается на другой странице, но здесь бы хотелось сделать логично все. | |
|
|
|
|
|
|
|
для: neadekvat
(10.05.2009 в 15:03)
| | аська 463-362-568 | |
|
|
|