たとえば1000バイト以上の文字列が格納されてる変数から上1000バイトだけを取り出して、最後に...をつけて返すメソッド。
意外と時間がかかったので記録。
# 文字の切り詰めメソッド
def truncate(str, limit, add='...')
return "" if str.nil? || str.blank?
# 制限バイト数から追加する文字列のバイト数マイナスする
limit -= add.size
# 制限バイト数まで一文字ずつ文字列を生成
#(その際、改行コードを(<br />に変換)
code = $KCODE
$KCODE = "SJIS"
result = ""
str.tosjis.split(/(\r\n)|(\r)|(\n)|/).each do |e|
e = e.gsub(/\r\n|\r|\n/,",< br />;")
if (result + e).size <= limit
result << e
else
# 途中で切る場合、追加する文字列を追加して戻り値とする
result << add
break
end
end
$KCODE = code
return result
end
正規表現は初めてやったんだけど、結構面白いね。
追記--
2009.4.30 先輩社員さんに間違いを指摘されて編集。
if分の使い方とか間違ってたし、正規表現も勉強になった。
あと、文字コードの指定によってsplitの切り方が変わってくるところも参考になった。
まだまだ勉強不足ですね。。
0 件のコメント:
コメントを投稿