こんばんは。三並です。

テキストファイルを固定文字数で切って、行番号をつけるプログラムを
Rubyで書いているのですが、ちょっとヒントを頂きたくてMLにメールをしました。

問題点は日本語の行末で80文字目に日本語が来た場合は
その文字を次の行にまわしたいと思っています。
(一般的な日本語エディタのように)

そこで以下のように、一文字ずつ日本語を分解して、バイト数を数えて、
80バイトを越すところで改行にしているのですが
一文字ずつチェックしていくのではどうしても重いような感じがしています。
これを正規表現ですぱっと書くような方法はないかと思っているのですが
何かヒントをいただければと思います。

よろしくお願いします。
----------------------------------------
#!/usr/local/bin/ruby -Ks

head_figure = 3
text_length = 80 - head_figure - 2

line_no = 0
while(line = gets) do
  line_no += 1 # カウントアップ
  line.chomp!

# 固定文字数で配列に入れる(日本語一文字ずつ処理)
  line_s = [] # 結果用の配列
  n = 0
  line_s[n] = ""
  current_pos = 0 # 現在位置
  line.split(//).each do |str|
    str_size = str.size
    if current_pos + str_size > text_length
      n += 1
      line_s[n] = str
      current_pos = str_size
    else
      line_s[n] << str
      current_pos += str_size
    end
  end

# 行番号をつけて出力
  result = ""
  line_s.each_index do |i|
    if i == 0
      result += sprintf("%0#{head_figure}d: ", line_no) + line_s[i] + "\n" # 行番号をつける
    else
      result += " " * (head_figure + 2) + line_s[i] + "\n" # 先頭に空白をつける
    end
  end

  print result
end

 ___________________________
〆
|  三並 慶佐  (Keisuke Minami)
|  E-mail:keisuke / rccn.com
|  「do yourself better」
|
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄