Автор Тема: Разбиение длинной строки  (Прочитано 3620 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн restart2003

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 58
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Разбиение длинной строки
« : 25 Сентября 2005, 23:08:54 »
Пользователи моего форума часто норовят оставить сообщения, в которых есть длинные слова, типа "пооооооооооооммммммммммммооооооооггггииииииттттее" или "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!". Они иногда вызывают горизонтальную полосу прокрутки.
Хочу написать код, ставящий пробел в последовательность непробельных символов, превышающую по длине n(например 40).
Пытался разными методами, получается плохо.
Вот один из вариантов, на практике работающий криво (Он разбивает сообщение на подстроки по сто символов, и, если внутри какой-то подстроки есть 50 или более непробельных символов подряд, ставит поседине пробел):

my $c= 1 + int length($message)/100 ;
for (my $i=0;$i<$c; $i++)
 {
 $buffer = undef;
 $buffer = substr($message,$i*100,100);

  if($buffer =~ /\\S{50,}/)
  {
  my $part1 = substr($buffer,0,50);
  my $part2 = substr($buffer,50,50);
  $buffer = $part1.\' \'.$part2;
  }
 $message2 .= $buffer;
  }
$message = $message2;
 

Хотелось всё-таки создать нормально работающий код. Своими силами пока не получается.

Оффлайн Ivan Kolesnikov

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 39
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Разбиение длинной строки
« Ответ #1 : 26 Сентября 2005, 13:54:12 »

$str =~ s/(\\S{50})(?=\\S)/$1 /g;

Последовательность из 50 непробельных символов, за которыми следует еще один непробельный (его мы не берем, а только заглядываем вперед), то заменяем их на эту последовательность + пробел.
Может быть я и не учел что-то, но на простых примерах работает :).

Оффлайн restart2003

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 58
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Разбиение длинной строки
« Ответ #2 : 26 Сентября 2005, 16:23:28 »
Спасибо.
Так и думал, что опять изобретаю велосипед. Поду подучу регекспы.
Пример заработал.
Модифицировал только немного, чтоб UBBC-теги не резал.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28