■Windows版Rubyの細道・けもの道

■ナビゲータ

[南北館(最初のメニュー)]

  1. [Windows版Rubyの細道・けもの道]
    1. [1.準備編]
    2. [2.基本編]
    3. [3.応用編]
      1. [3-1.固定長データとCSVデータとの変換]
      2. [3-2.重複データの処理]
      3. [3-3.フォルダ内の一括処理]
      4. [3-4.1つのファイルを複数のファイルに分割する]
      5. [3-5.文字コードの変換]
      6. [3-6.半角全角変換]
      7. [3-7.多次元配列の処理]
      8. [3-9.その他]
        1. [3-9-1.文字列のフォーマットを変更する]
        2. [3-9-2.メッセージを表示する]
        3. [3-9-3.ファイルのサイズを取得する]
        4. [3-9-4.当日・前日・前営業日、前月末日・当月末日・翌月末日を取得する]
        5. [3-9-5.複数レコードを1レコードにまとめる]
        6. [3-9-6.電卓プログラム]
        7. [3-9-7.素因数分解]
    4. [スクリプトと入力データのサンプル]
Perlではどう処理する?
同じことをPerlではこうしています。

3.応用編

3-9.その他

3-9-5.複数レコードを1レコードにまとめる

一般にホストコンピュータやオフコンなどで使用されることが多いのですが、入力項目を個々のレコードに分解しておき、その前後を特定のレコード(以下の例では、「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
   



Copyright (c) 2004-2015 Mitsuo Minagawa, All rights reserved.