FGALTS 6 /RE:04996 RE:ファイルのマージ  こんにちは、のとや さん 》文章だけで判らなかったらすみません(^^;)。 いえ、大丈夫、十分わかりました。 複数の入力ファイルから時刻情報だけのファイルを作り、そのファイルを元にル ープを回す、ということですよね。 この方針に基づいて作ってみようとしていたのですが・・・ 実はその後、泣きたくなるような仕様変更が発生しました。(;_;) 元ファイルと結果ファイルは、以下のような物となります。 FILE1.CSV 時刻,担当者,結果 2003-05-15 15:01:05,阿藤,OK 2003-05-15 15:02:10,加藤, 2003-05-15 15:02:20,佐藤, 2003-05-15 15:03:30,阿藤,OK 2003-05-15 15:04:30,伊藤,NG 2003-05-15 15:04:30,江藤,OK FILE2.CSV 時刻,メニュー,結果 2003-05-15 15:01:05,イチゴ,OK 2003-05-15 15:02:10,大福, 2003-05-15 15:03:20,イチゴ大福, 2003-05-15 15:03:31,紅茶,OK 2003-05-15 15:04:30,ハイオク,OK FILE3.CSV 時刻,価格,結果 2003-05-15 15:01:05,150,OK 2003-05-15 15:01:10,200, 2003-05-15 15:03:20,100, 2003-05-15 15:03:29,500,OK OUTPUT.CSV 時刻,担当者,メニュー,価格,結果 2003-05-15 15:01:05,阿藤,イチゴ,150,OK 2003-05-15 15:01:10,,,200, 2003-05-15 15:02:10,加藤,大福,, 2003-05-15 15:02:20,佐藤,,, 2003-05-15 15:03:20,,イチゴ大福,100, 2003-05-15 15:03:30,阿藤,紅茶,500,OK 2003-05-15 15:04:30,伊藤,,,NG 2003-05-15 15:04:30,江藤,ハイオク,,OK まず、結果というフィールドが追加されました。 で、これが第2キーのような物で、時刻が同じだった場合、このフィールドを見 て結合するかを決める事になります。例えば、前回の発言では時刻順で上からと なっていたので伊藤さんがハイオクを食べた(違)という事になるのですが、今 回の条件では江藤さんがハイオク、という事になります。 もっと悩ましいのが、時刻の欄に秒のデータがつけ加わったこと。 でもって、これが多少の誤差がありうるのですね。そして、誤差が一定の範囲内 であり、結果欄が一致する物は同一のデータにまとめたいのです。この場合、阿 藤さんのデータの例のように、FILE1.CSV に記録された時刻を使おうと思ってお ります。もちろん、結果欄が不一致であれば、出力は別レコードとなります。 なお、この誤差の範囲ですが、実データでは±3秒ぐらいの差があるのですが、 5秒ぐらいまでを容認してもいいかどうかは検討中です。 一応、ファイルが月締めなので、月をまたがったデータの処理は考えなくてもい いのですが、誤差が日をまたがることは考えないといけないらしいので、ここは やっぱり60をかけて60をかけて24をかけて、その差がいくつ以下なら、と いった処理が必要みたいです。 ということで、各ファイルから時刻欄だけを取り出してソートしてそのファイル でループさせて、という作戦だとうまく行かなさそうになってしまいました。な んとかやりようはあるのかもしれませんが、私の頭ではうまく考えつきません。 私が考えた方法だと、以下のようになってしまいます。  各ファイルから1レコード読出  時刻の一番小さい物を基準とする  基準と時刻比較し一定の誤差以内なら結果フィールド比較  結果フィールドが一致した物のみ出力  出力したファイルの物だけ次のレコード読み込み で、やっぱりどのようにループさせるか、というところで躓いてしまいました。 申し訳ありませんが、再度お知恵をお貸し願えれば幸いです。                                 としき P.S. もう仕様変更はないだろうなぁ・・・