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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбить текст из строк на части, из <textarea name="text" id="tex" rows=" 
V
    Опции темы
igorold
Дата 24.3.2006, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

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



Вводится текст в :
Код

<textarea name="text" id="tex" rows="8" cols="100">

записывается в базу, затем я его считываю и вывожу в виде таблицы
Код

        my $Query = "SELECT Gruppa, Podgr, Description, CONCAT(U.Surname, ' ', U.Name) AS ini, DATE_FORMAT(MakeDate, '%d.%m.%Y - %T') as Data ";
        $Query = $Query . "FROM Guestbook G LEFT JOIN Users U ON G.UserID=U.i where G.Gruppa='$RecordIndex'";
        $Query = $Query . " ORDER BY Podgr ";

        my $Count=0;
        $Content=GetArrayOfHashes($dbh, $Query);
        for ($Count = 0; $Count < scalar(@{$Content}); $Count++)
        {
            my $Hash = $Content->[$Count];
            $Hash->{"Description"} =~ s/\n/<BR>/g;
            $Hash->{"Description"} =~ s/&nbsp;/ /g;
            $Hash->{"Description"} =~ s/"/"/g;
            $Hash->{"Description"} =~ s/<(\/?[\w\s\.="]+)>/<$1>/msg;
            $Hash->{"Description"} =~ s!\[\/COLOR\]!</font>!g;
            $Hash->{"Description"} =~ s!\[COLOR=([a-zA-Z]+)\]!<font color=$1>!g;
        }
    }

так вот, если в этом тексте встречаются длинные строки - они растягивают таблицу ... средствами HTML я не смог это
преодолеть ... т.е. надо в длинные строки вставлять <br>
а как это сделать?
например разбить текст на строки длиной не больше 80 символов?

повторюсь: $Hash->{"Description"} - это не строка, многострочный текст ....
подскажите, пжалуйста ... smile


--------------------
... у семи нянек 14 сисек ...  
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
DEER
Дата 24.3.2006, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

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



До того как ты навставлял <BR>
можно найти строки длинной более 80
Код

 $Hash->{"Description"} =~ s/\n([^\n]{80})[^\n]*\n/$1\n/g;


вроде так должно помочь

Это сообщение отредактировал(а) DEER - 24.3.2006, 15:37


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
nitr
Дата 24.3.2006, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

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



есть тег <pre></pre> smile и ваще почитай что-нить о HTML, тут есть форум smile


--------------------
PM   Вверх
igorold
Дата 24.3.2006, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

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



что-то не получается ..... не разбивает
а если разбивка попадет внутрь тега типа: [color=red] , он потом не обработается ... хорошо бы было вставлять \n вместо пробела .....


HTML форум читал ... цитирую: эта проблема средствами HTML неразрешима

тег <pre></pre> не помог ... что-нибудь о HTML читал ... потому и обратился опять сюда ...

Это сообщение отредактировал(а) igorold - 24.3.2006, 16:29


--------------------
... у семи нянек 14 сисек ...  
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
nitr
Дата 24.3.2006, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

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



Код

 $Hash->{"Description"} =~ s/(.{80})/$1.'<br>'/smg;

а так?


--------------------
PM   Вверх
sharq
Дата 25.3.2006, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



igorold, ограничь таблицу фиксированной шириной и все само собой станет, если только слова разумной длинны, а не:
Код

qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq


smile

Это сообщение отредактировал(а) sharq - 25.3.2006, 21:03


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
korob2001
Дата 26.3.2006, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Код

<table width="700" border="0" cellspacing="0" cellpadding="0" style="table-layout: fixed">

После чего, твоя таблица больше никогда не растянется больше указанного размера, в атрибуте width.

PS: А вообще, стоит подумать над тем, что бы проверять длину слов ещё перед занесением их в базу данных. Разве бывают слова состоящие из 80 символов? Нет? Тогда нафига они нужны в базе данных?

Можно вырезать такие слова примерно таким образом:
Код

#!/usr/bin/perl -w
use strict;

my $min = 2;  # Минимально допустимая длина слова
my $max = 10; # Максимально допустимая длина слова

# Просто тестовая строка
my $str = "This is a test string. This word is very longggggggggggggggg";

# Вырезаем слова, длина которых меньше $min или больше $max
$str = join(" ", grep { (length($_) >= $min and length($_) <= $max) } split /\s+/, $str );

# Покажем результат
print $str

Хотя по нормальному этого делать не нужно. Нужно просто сделать проверку если есть слова которые превешают максимально/минимально допустимую длину, то просто отвергать такую форму и настойчиво попросить юзера не делать таких глупостей в будущем. ;))))))
Код

#!/usr/bin/perl -w
use strict;

my $min = 1;  # Минимально допустимая длина слова
my $max = 10; # Максимально допустимая длина слова

# Просто тестовая строка
my $str = "This is a test string. But this wordddddddddddd is very longgggg";

# Сохраняем длину до обработки
my $len = length $str;
$str =~ s/\b([\S]+)\b/(length($1) >= $min and length($1) <= $max)?$1:"<b>$1<\/b>"/eg;

# Проверяем длину, если она изменилась значит выводим сообщение об ошибке
if ( $len != length $str ) {
     print "<html><head><title>Fatal error</title></head><body>";
     print "<h1 style='color: #ff0000'>Fatal error!</h1>";
     print "Обнаружена недопустимая длина cлова. ";
     print "Допустимый диапазон для слов от $min до $max символов.<br/>";
     print "Слова которые не прошли проверку выделены <b>жирным</b> шрифтом:<hr/>";
     print "<p>$str</p>";
     print "</body></html>";
     exit 0;
}

# Если мы оказались здесь, значит слова успешно прошли проверку,
# делаем с ней что-нить ещё


Это сообщение отредактировал(а) korob2001 - 26.3.2006, 03:02


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
igorold
Дата 27.3.2006, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

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



Слова нормальной длины - строки длинные
ничего не пойму - в одном месте это работает, в другом нет ....
.. когда вставил :
Код

<table width="700" border="0" cellspacing="0" cellpadding="0" style="table-layout: fixed">

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



--------------------
... у семи нянек 14 сисек ...  
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
igorold
Дата 27.3.2006, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

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



в общем так - строка без пробелов большой длины действительно не переносится средствами HTML
я почему-то закоментировал строку:
Код

# $Hash->{"Description"} =~ s/&nbsp;/ /g;

и в результате получалась длинная строка без пробелов типа:
Код

1234567890123456789&nbsp;01234567890&nbsp;123456789&nbsp;01234567890123456789&nbsp;0123456789&nbsp;0123456789&nbsp;0123456789&nbsp;01234567890123456789&nbsp;&nbsp;234567890123456789&nbsp;01234567890&nbsp;123456789&nbsp;01234567890123456789&nbsp;0123456789&nbsp;0123456789&nbsp;0123456789&nbsp;01234567890123456789&nbsp;1234567890123456789&nbsp;01234567890&nbsp;123456789&nbsp;01234567890123456789&nbsp;0123456789&nbsp;0123456789&nbsp;0123456789&nbsp;01234567890123456789&nbsp;

когда я убрал комментарий, то полученная строка стала с пробелами и строки в таблице стали нормально переноситься ...
правда при этом исчезает форматирование за счет пробелов ....
в общем я сделал так:
Код

$Hash->{"Description"} =~ s/&nbsp;/ /g;
$Hash->{"Description"} =~ s/  /&nbsp;&nbsp;/g;

чтобы хотя бы частично было форматирование ....


--------------------
... у семи нянек 14 сисек ...  
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

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


 




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


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

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