一般にホストコンピュータやオフコンなどで使用されることが多いのですが、入力項目を個々のレコードに分解しておき、その前後を特定のレコード(以下の例では、「START」と「END」)ではさんでいる形式のデータがあります。下記の例は、このようなデータをCSV形式のデータに変換するためのスクリプトです。
「pushメソッド」の引数を「[](ブラケット)」で囲んでいるのは、文字列(Stringオブジェクト)ではなく配列(Arrayオブジェクト)として配列「out1」に追加しているためです。
# to1record.rb # 内容 : 複数のレコードを1レコードにまとめて出力する。 # Copyright (c) 2002-2015 Mitsuo Minagawa, All rights reserved. # (minagawa@fb3.so-net.ne.jp) # 使用方法 : c:\>Perl to1record.rb # # 入力ファイル in1_file = open("input.txt","r") # 出力ファイル out1_file = open("output.txt","w") # 主処理 while (line1 = in1_file.gets) line1.chomp! if (line1 == "START") out1 = [] elsif (line1 == "END") out1_file.print out1.join(","),"\n" else out1.push([line1]) end end # ファイルのクローズ in1_file.close out1_file.close
START aa vv 4700 ccc 5238 END START bb dd 6200 xxx 6285 END START cc rr 3600 qqqqq 3227 END START dd pp 1900 yyyy 3095 END START ee gg 2400 tttttt 6497 END
aa,vv,4700,ccc,5238 bb,dd,6200,xxx,6285 cc,rr,3600,qqqqq,3227 dd,pp,1900,yyyy,3095 ee,gg,2400,tttttt,6497