Модераторы: ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярное выражение замены символа абзаца, Нужно склеить все предложения в тексте 
:(
    Опции темы
dmipro
Дата 20.1.2011, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте, 

С формы обратной связи моего сайта я сохраняю все поля в базу данный MySQl: имя, страна, город, телефон,  тема сообщения, текст сообщения и т.п. Затем я записываю текстовый файл с разделителями табуляций из этой базы с расширением .xls и получаю документ, который могу открыть в программе Excel. Все корректно записывается в файл, пока не попадается символ конца абзаца. Люди пишут текст сообщения в несколько строк (каждая строка заканчивается символом абзаца).

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


Спасибо всем кто откликнется!

PM MAIL   Вверх
Jimy
Дата 20.1.2011, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



$str =~ s/\n|\r/ /g;
PM   Вверх
alezzz
Дата 20.1.2011, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


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

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



Другой вариант:
Код

$str =~ s/[\n\r]+/ /;


Если "символ абзаца" это перевод строки.
PM MAIL   Вверх
srl
Дата 20.1.2011, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Брр, написал фигню, но потом понял, что написал фигню и потёр.  smile 

Это сообщение отредактировал(а) srl - 20.1.2011, 23:43
PM MAIL   Вверх
dmipro
Дата 21.1.2011, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо! Простите чайника, как мне правильно применить этот код, чтой-то не получаеца. Как правильно присвоения сделать, вот у меня есть элемент массива с переводом строк $row[10] (исходный неправильный вариант), как мне применить код регулярного выражения чтобы в $str занести текст с уже удаленными символами абзацев (перевода строки).

Спасибо еще раз. smile 
PM MAIL   Вверх
alezzz
Дата 21.1.2011, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


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

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



Код

($str) = $row[10] =~ s/[\n\r]+/ /;


если в одном элементе массива несколько строк для которых нужно применить выражение то добавьте в конце регулярного выражения модификатор g;
PM MAIL   Вверх
dmipro
Дата 21.1.2011, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Что-то не то....


Код

($str) = $row[10] =~ s/[\n\r]+/ /;


записывает в $str цифру 1 для любой строки.

Код

($str) = $row[10] =~ s/\n|\r/ /g;


записывает в $str  разные цифры, например 8 для одной строки, 10 - для другой.


А должен быть текст! а не цифры, соединенный символом "пробел", вместо знаков абзаца.



Я могу написать свою процедуру, которая в цикле прогонит все символы и там где есть символ абзаца, его уберет и поставит символ пробела. Только я не знаю какой символ обозначает абзац (перевод строки)? Например в $s я прочитаю очередной символ, с чем мне его корректно сравнить чтобы узнать что это абзац?

if ($s eq "символ абзаца")
 {
отрезаем абзац, ставим пробел
}

Подскажите "символ абзаца", пжл.


Спасибо!






Это сообщение отредактировал(а) dmipro - 21.1.2011, 17:12
PM MAIL   Вверх
alezzz
Дата 21.1.2011, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


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

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



перевод строки зависит от системы, в unix-подобных это \n, в windows это два символа \r\n, в Mac OS классике говорят что \r, но такое уже наверно не встретися.

попробуйте еще 
Код

$str = $row[10];
$str =~ s/[\n\r]+/ /g;

если не хотите метять прямо в @row
PM MAIL   Вверх
awkward
Дата 21.1.2011, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

(my $str = $row[10]) =~ s/[\n\r]+/ /g;

или
Код

(my $str = $row[10]) =~ s/[\n\r]+/\x20/g;

или
Код

(my $str = $row[10]) =~ s/[\n\r]+/\040/g;

PM MAIL   Вверх
alezzz
Дата 21.1.2011, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


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

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



да, awkward прав, я не там скобку поставил
PM MAIL   Вверх
dmipro
Дата 24.1.2011, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Теперь все хорошо! 

Спасибо alezzz, awkward и Jimy


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




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


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

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