読者です 読者をやめる 読者になる 読者になる

RubyでFromTo表現のテキストファイルを、カウントアップ表現に変換する

Ruby

タイトルが分かりづらいのですが、以下のようなファイルがありました。

0001-0005


それを

x0001x
x0002x
x0003x
x0004x
x0005x
5件

のように、数字部分は4桁のゼロ詰めとし、先頭と末尾に「x」を付け、全体の件数を知りたいとのことでした。


それだけだったら良いのですが、データが残念な形になっていまして、

1-5            # ゼロ詰めなし
  0001-0005    # 前に空白
x0001x-x0005x  # すでにxが付いている
x0001-0005x    # 片方にしか付いていない
Z0001Z-Z0005Z  # xでないもの(例:大文字のZ)が付いている
0001〜0005     # 半角の「-」ではなく、全角の「〜」
=============  # 関係ない行がある

のような形式も含まれていました。


そこで、Rubyを使ってファイルの変換をしてみることにしました。


■環境

■ソース

もっとRubyらしい書き方がありそうな気もします。
あとは、コマンドプロンプトで、「convert.rb 変換前のファイルパス > 変換後のファイルパス」で実行します。
Gistはこちら

convert.rb
# -*- encoding: utf-8 -*-

# RubyでFromTo表現のテキストファイルを、カウントアップ表現に変換する
# 使い方
# convert.rb 変換前のファイルパス > 変換後のファイルパス

export_count = 0;
while line = gets
  line.lstrip!
  if line =~ /^([a-z]|[A-Z])?[0-9]{1,4}.([a-z]|[A-Z])?[0-9]{1,4}/
    results = line.scan(/[0-9]{1,4}/)
    first = results[0]
    last = results[-1]

    first.to_i.step(last.to_i, 1) { |n|
      formatted = format("%04d", n)
      puts "x" + formatted + "x"
      export_count += 1
    }
  end
end

puts export_count.to_s + ""