人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

perlで文章の最後の方を「…」にする方法

説明文が長い時に○文字目以降を切り取っているのを見かけますが、あればどのようにしたらいいのでしょうか?
エンコードはutf-8で$comに文章が入っています。
全角半角が混ざっていますが、出来るなら長さがきちんとそろうようにしたいです。
(半角2文字を全角1文字として扱う事は可能でしょうか?)

●質問者: 匿名質問者
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● 匿名回答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文字として扱う事は可能でしょうか?)

匿名質問者さんのコメント
ありがとうございます!!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ