説明文が長い時に○文字目以降を切り取っているのを見かけますが、あればどのようにしたらいいのでしょうか?
エンコードはutf-8で$comに文章が入っています。
全角半角が混ざっていますが、出来るなら長さがきちんとそろうようにしたいです。
(半角2文字を全角1文字として扱う事は可能でしょうか?)
かなり強引でスマートな方法ではないですが。
use strict; use warnings; use utf8; use Encode; my $com = do { local $/; <DATA> }; my $utf8 = find_encoding('utf8'); #$com = $utf8->decode($com); #文字列を内部コードへ変換。このテストでは不要 my $len = 300; #切り出すバイト数 my $result = $utf8->encode(getBytesFromStr($com,$len)); print $result; exit; sub getBytesFromStr { my($input,$len) = @_; my $cmap = $input; $cmap =~ s/[\x20-\x7e\x{FF64}-\x{FF9F}]/1/g; #半角英・数字・記号と、いわゆる「半角カタカナ」 $cmap =~ s/\n/0/g; $cmap =~ s/[^01]/2/g; my @cmap = $cmap =~ /./g; my $count = 0; my $bytes = 0; foreach(0..$#cmap) { $bytes += $cmap[$_]; $count++; last if $bytes >= $len; } $count-- if $bytes > $len; substr($input,0,$count).'…'; } __DATA__ perlで文章の最後の方を「…」にする方法 説明文が長い時に○文字目以降を切り取っているのを見かけますが、あればどのようにしたらいいのでしょうか? エンコードはutf-8で$comに文章が入っています。 全角半角が混ざっていますが、出来るなら長さがきちんとそろうようにしたいです。 (半角2文字を全角1文字として扱う事は可能でしょうか?)