Вот тебе text.pl
#!/usr/bin/perl
use strict;
use locale;
use POSIX qw (locale_h);
setlocale(LC_CTYPE, 'ru_RU.utf8');
setlocale(LC_ALL, 'ru_RU.utf8');
use utf8;
no warnings "utf8";
use Encode qw/decode/;
binmode STDOUT, ':utf8';
my $i = $ARGV[0];
my $o = $ARGV[1];
if ( !length $i || !-f $i || !length $o ) {
print "\n\nUsage: text.pl <input file> <output file>\n\n";
exit;
}
my $text = '';
if( -f $i && open (TEMP, "$i") ) {
binmode TEMP;
my @text = <TEMP>;
$text = join "\n", @text;
close TEMP;
} else {
print "\n\nFile $i not found!\n\n";
exit;
}
$text =~ s/([\n\r]){1,}/ /g;
my @words = split /s/, $text;
my ( $line, $out, $cur, $i );
my $ii = 0;
foreach $cur ( @words ) {
if ( !Encode::is_utf8($cur) ) { $cur = Encode::decode("utf8", $cur); }
if ( length "$line $cur" > 100 ) {
$line =~ s/^s{1,}//;
$line =~ s/s{1,}$//;
$out .= "\n$line";
$line = $cur;
} else {
$line = "$line $cur";
}
}
$out .= "\n$line";
if( open (TEMP, "> $o ") ) {
binmode TEMP;
print TEMP "$out";
close TEMP;
} else {
print "\n\nFile $o not found!\n\n";
exit;
}
Пользователь решил продолжить мысль 15 Марта 2011, 16:27:18:
Некогда было сильно заморачиваться...
Проблемы:
1. Строки он НЕ выравнивает. Т.е они будут разной длины, но не более 100
2. Если в тексте есть короткая строка, например заголовок, то она будет воспринята как любой другой кусок текста.