From: Keisuke Minami Date: 2001-03-06T00:04:50+09:00 Subject: [ruby-list:28530] テキストファイルを固定文字数で切って、行番号をつけるプログラム こんばんは。三並です。 テキストファイルを固定文字数で切って、行番号をつけるプログラムを 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」 |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄