Portál AbcLinuxu, 19. července 2025 06:49
/^(.{66})(.*)$/
na ty dvě půlky. Jenže když tam jsou české znaky, každý se počítá za dva, vypadá to, že {66} počítá byty, ne znaky.
Mám nastaveno
use encoding 'utf-8';
Zkoušel jsem locale a binmode, ale bez výsledku. Strávil jsem dvě hodiny čtením dokumentace a mám z toho tak akorát zamotanou hlavu. Umíte mi někdo poradit? Díky
Řešení dotazu:
while (<>) {
/^([\w\W]{70})(.*$)/; # rozdelim radek na dva sloupce
print "$1 ".length($1)."\n"; # pisu levou a delku
next;
}
binmode *STDIN, "utf8"; # Ted tecka = znak a ne byte binmode *STDOUT, "utf8"; # Aby nebyly Warnings: wide character in print while (<>) { print join ":", /^(.{66})(.*)$/; }
#!/usr/bin/perl
use encoding ':utf-8';
binmode *STDIN, ":utf8"; # Ted tecka = znak a ne byte
binmode *STDOUT, ":utf8";
my @radky;
while (<>) {
/^([\w\W]{70})(.*$)/; # rozdelim radek na dva sloupce
push @radky, $2."\n"; # pravou pulku schovam
print "$1 ".length($1)."\n"; # levou pisu rovnou - s udajnym poctem znaku
next;
}
print @radky; # dotisknu pravy sloupec pod levy
# jenze zacatky radku jsou rozhazene
binmode STDOUT, ":utf-8";použijte
use open qw(:std :utf8);
$ perl -pe 'use encoding "utf8";s/^\X{4}//' <<<'Žluťoučký kůň' oučký kůň
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.