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

■ナビゲータ

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

  1. [Windows版Perlの細道・けもの道]
    1. [1.準備編]
    2. [2.基本編]
      1. [2-1.基本処理]
      2. [2-2.キーブレイク処理]
        1. [2-2-1.各キーの1件目を出力(until型)]
        2. [2-2-2.各キーの最終レコードを出力(until型)]
        3. [2-2-3.同一キーでの合計処理(until型)]
        4. [2-2-4.同一キーでの件数カウント(until型)]
        5. [2-2-5.各キーの1件目を出力(while型)]
        6. [2-2-6.各キーの最終レコードを出力(while型)]
        7. [2-2-7.同一キーでの合計処理(while型)]
        8. [2-2-8.同一キーでの件数カウント(while型)]
        9. [2-2-9.ハッシュを使った同一キーの合計処理]
      3. [2-3.マッチング(照合)処理]
      4. [2-4.ソート(並べ替え)処理]
      5. [2-5.パターンマッチ処理]
    3. [3.応用編]
    4. [スクリプトと入力データのサンプル]

2.基本編

2-2.キーブレイク処理

キーブレイク処理とは、レコード内のキーと呼ばれる項目に着目し、何らかの処理を行うことです。具体的には、同一のキーを持つレコードについて集計したり、キーが異なるレコードだけを出力したりする処理などを指しています。

キーブレイク処理の「キー」とは、レコードを識別(identify)するもので、キーが同一であれば、同一の内容を示し、キーが異なれば異なる内容を示すための指標となる項目です。たとえば、顧客データの中の顧客番号は、顧客を識別するための番号です。顧客番号が同じであれば同一の顧客を示し、顧客番号が異なれば異なる顧客を示すことになりますが、このような項目をキー項目と呼びます。


それでは、Perlを使ったときにキー項目をどうやって識別していけばいいのでしょうか。

人間が判断するのであれば、どれとどれが同じかということは一目瞭然です。ところが、コンピュータでは、1件ずつ入力処理を行いますので、現在読み込んでいるデータをもとに、キー項目が前のデータと同じかどうかを判断するしかありません。このため、事前にキー項目の順にデータを並べ替えておき、現在読み込んでいるデータとその1件前の保存しておいたデータを比較して、同じかどうかを判断する方法を採ります。

Perlでは、繰り返し処理を行う命令として、「2-1.基本処理」で紹介したwhileループのほかにuntilループがあります。どちらを使うかによって、スクリプトの構造が変わりますので、両者の基本的な構造について、それぞれ分けて紹介していきましょう。

また、キーブレイク処理は大きくわけて、「同一キーの1件目を出力する場合」、「同一キーの最終レコードを出力する場合」、「同一キーの値を合計する場合」、「同一キーの件数をカウントする場合」の4つがありますので、それぞれの基本構造も紹介します。

このうち、「同一キーの1件目を出力する場合」とは、それぞれのキー項目ごとに処理日時順にデータが並んでいるような場合、最も古いデータを取り出すような処理に利用します。また、各キーのどのデータでもよい場合もこの方法を利用します。

「同一キーの最終レコードを出力する場合」は、それぞれのキー項目ごとに処理日時順にデータが並んでいるような場合、最新のデータを取り出すような処理に利用します。

前にも述べましたが、キーブレイク処理は入力レコードがキー項目順に並べ替え(sort:ソート)されていることが前提になりますが、Windowsでは、Unixのように便利なsortコマンドがシェルプログラムにありません。

そこで、別な方法で事前に並べ替えを行うしかないのですが、一つはExcelやAccessに読み込んで並べ替えをする方法があります。また、Perlを利用して、並べ替え処理(ソート処理)を行う方法もあります。このうち、Perlを利用して並べ替えを行う方法については、[2-4.ソート処理]で述べていきます。

最後にハッシュを利用して、同一キーごとに集計を行う方法を紹介します。この方法では、事前に並べ替えをせずに集計ができる点で上記8つの方法とは全く異なる方法です。また、スクリプトも一般的には小さくすることができます。

目次
キーブレイク処理の具体的な内容については、以下の各項目を参照ください。

  1. [2-2-1.各キーの1件目を出力する]
  2. untilを利用した繰り返し処理で各キーの1件目を出力するスクリプトについて解説します。

  3. [2-2-2.各キーの最終レコードを出力する]
  4. untilを利用した繰り返し処理で各キーの最終レコードを出力するスクリプトについて解説します。

  5. [2-2-3.同一キーの場合の合計処理]
  6. untilを利用した繰り返し処理で各キーごとの合計結果を出力するスクリプトについて解説します。

  7. [2-2-4.同一キーの場合の件数をカウントする処理]
  8. untilを利用した繰り返し処理で各キーごとレコード件数を出力するスクリプトについて解説します。

  9. [2-2-5.各キーの1件目を出力する]
  10. whileを利用した繰り返し処理で各キーの1件目を出力するスクリプトについて解説します。

  11. [2-2-6.各キーの最終レコードを出力する]
  12. whileを利用した繰り返し処理で各キーの最終レコードを出力するスクリプトについて解説します。

  13. [2-2-7.同一キーの場合の合計処理]
  14. whileを利用した繰り返し処理で各キーごとの合計結果を出力するスクリプトについて解説します。

  15. [2-2-8.同一キーの場合の件数をカウントする処理]
  16. whileを利用した繰り返し処理で各キーごとレコード件数を出力するスクリプトについて解説します。

  17. [2-2-9.ハッシュを使った同一キーの合計処理]
  18. ハッシュを利用して各キーごとの合計結果を出力するスクリプトについて解説します。


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