[Perl] разбиение текста с длинными строками на фиксированные параграфы (perl text example script convert)
Ключевые слова: perl, text, example, script, convert, (найти похожие документы)
Date: Wed, 22 May 2002 00:25:01 +0400
From: Alan Long <Alan.Long@p72.f1082.n5030.z2.fidonet.org>
Newsgroups: fido7.ru.perl
Subject: [Perl] разбиение текста с длинными строками на фиксированные параграфы
AL> Я решал подобную проблему, только мне приходилось резать на куски по
AL> 250 символов ;-) Решил с помощью Text::Wrap.
RP> покажи плиз скpиптик
- 8<- -
use Text::Wrap qw(wrap $columns);
my $MaxLen = 251;
#....
$columns = $MaxLen - 7;
my @parts = wrap( '', '', $text );
$parts[0] .= '...';
$parts[$#parts] = '...' . $parts[$#parts];
if( $#parts > 2 ) {
for( my $i = 1; $i < $#parts; $i++ ) {
$parts[$i] = '...' . $parts[$i] . '...';
}
}
foreach ( @parts ) {
send_message( $_ );
}
- 8<- -
В твоем случае $MaxLen изменить на 160 или на 161...
From: OpenNet
Пример кода для резанья текста для почтовой рассылки:
$formated_text = mc_line_wrap("Большая большая строка", 80);
sub mc_line_wrap {
my ($raw_text, $max_lines)=@_;
my ($wrap_text, $line, $word, $tmp_line, $tmp_p_line);
my ($max_lines);
foreach $line (split(/\n/, $raw_text)){
chomp($line);
if (length($line) <= $max_lines){
$wrap_text .= "$line\n";
} else {
$tmp_line="";
$tmp_p_line="";
$p_word="";
foreach $word (split(/\s+/, $line)) {
if (length($tmp_line) > $max_lines){
$tmp_p_line =~ s/^(.*[^\s]+)\s*$/$1/;
$wrap_text .= "$tmp_p_line\n";
$tmp_line="$p_word $word ";
$tmp_p_line="$p_word $word ";
$p_word="";
} else {
$tmp_p_line = $tmp_line;
$p_word=$word;
$tmp_line .= "$word ";
}
}
if ($tmp_line ne ""){
$tmp_line =~ s/^(.*[^\s]+)\s*$/$1/;
$wrap_text .= "$tmp_line\n";
}
}
}
return $wrap_text;
}