固定長データ
Posted feedbacks - Ruby
レコードの構造を表現するのに, Hashクラスでなく順序が定義されているStructureクラスのオブジェクトを使用しました. 必要に応じてflattenなりjoinを使用してから出力すれば, 使用しやすい形になると思います.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | module StaticRecord
def read_record(max_num)
rec_struct = Struct.new(:family_name, :last_name, :sex, :age,
:year, :month, :days)
days_struct = Struct.new(:day, :breakfast, :lunch, :supper)
record = rec_struct.new(12, 12, 1, 3, 4, 3,
days_struct.new(2, 500, 500, 500))
max_num.times{record.map{|x|
len_ary, range = x.kind_of?(Struct) ? [x, 1..31] : [[x], 1..1]
range.map{len_ary.map{|n| read(n)}}}}
end
end
class IO
include StaticRecord
end
#file = 'D:/home/tmp/test.rec'
File.open(file, "r"){|f| f.read_record(500)}
|

Mymelo #6060() Rating5/7=0.71
固定長のデータが記載されたファイルを読み込むプログラムを作成してください。読み込んだデータは、複数の値を格納できるデータ型に格納してください。
ファイルには、すべて ascii 文字で以下のデータが格納されています。デリミタはなく、固定長で格納されています。レコードとレコードのあいだも改行はありません。
以上の形式のデータ500人分を読みこんで、データを複数の値を格納できるデータ型に格納してください。データに大して何か処理を行う必要はなく、すぐに破棄してかまいません。
この問題は、このようなファイルをどのように扱うかを知りたくて作成しました。
[ reply ]