2009年4月27日月曜日

文字の切り詰めメソッド

多くの情報が書かれている情報を文字を制限して表示するメソッドの実装。
たとえば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 件のコメント: