タイトルが分かりづらいのですが、以下のようなファイルがありました。
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 + "件"