Здравствуйте! По ходу работы возникла небольшая задачка: в текстовом файле (обыкновенный plain text) необходимо разбить на строки, по 75 символов. Короче, отформатировать, так, как это делает какой-нибудь текстовый процессор. Я сразу вспомнил про (кто сказал — Word? ВОН ИЗ ПРОФЕССИИ!!!!
) Perl и его уникальный format. Увы, текст кириллический, и format "рвет" отдельные двубайтовые символы пополам, да и ширина строки получается не та, которая нужна.
use utf8 не помогает, равно как и такой шаманский приём:
binmode STDIN, ':utf8';
binmode STDOUT, ':utf8';
Что делать? (с) Чернышевский
Здравствуйте, anonymous, Вы писали:
A>Код? Версия Perl?
Да пожалуйста =(
perl 5.8.8
use warnings;
use strict;
use utf8;
use locale;
our $DATUM;
binmode DATA, ':utf8';
binmode STDOUT, ':utf8';
format HEAD =
.
format REPORT =
^<<<< ~~
$DATUM
.
$^ = 'HEAD';
$~ = 'REPORT';
while (<DATA>) {
$DATUM = $_;
write;
}
__DATA__
1
123
12345
12345 6789
123456789
1234 56789
АБВГДЕ
АБВГ ДЕЖЗ
АБВ ГДЕ ЖЗИ КЛМ
а результат:
1
123
12345
12345
6789
12345
6789
1234
56789
АБВГД
Е
АБВГ
ДЕЖЗ
?З
АБВ
ГДЕ
ЖЗИ
КЛМ
М
Явно не то, чего ожидал... Последняя буква в каждой строке повторяется. В одной из строк (перед З) вылез какой-то непечатный символ
Перед форматированием переводить текст в UTF16 и спокойно бить по два байта.
Боюсь, это единственный способ. А то завтра в программу запихнут шестибайтные символы и тут-то беда и настанет.