4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

キーが重複している場合のファイルポインタの位置

4
Last updated at Posted at 2025-12-01

はじめに

キーが重複しているファイルをREADした際、ファイルポインタはどこに位置づけられるのでしょうか?
ファイルの先頭に位置づけられるのか、それとも不定なのか...

これまで確信が持てず、念のためSETLL *LOVALのように明示的に先頭へ位置づけられている方もいらっしゃるのではないでしょうか。

この件について、IBMシステム・テクニカル・サービス・センター様に確認し、重複キーにおける読み込み挙動についての理解が深まりましたので、ご紹介します。

事象

例えば、下図のように郵便番号をキーとするファイルがあるとします。
pointerPositionDuplicate_01.png

このファイルをEOFまで読み取り、その後「421-0115」でSETLLした場合、想定としては「高橋」さまレコードの前へ位置づけられることを期待しています。
しかし実際には、同じキーを持つ「伊藤」さま「渡辺」さまレコードの位置へ移動する可能性はあるのでしょうか?

回答(IBM様公式見解)

FIFO、LIFO、FCFOの指定が無い場合、同一のキーを持つレコードの読み込み順はシステム任せとなります。
そのため、以下のような並び順になることも考えられ、その場合は先頭の「伊藤」さまの行に位置付けられます。
pointerPositionDuplicate_02.png

いずれにしても「421-0115」のレコードが3件ある場合、READEは3回成功します。

おわりに

これまで明確な保証が分からず、SETLL *LOVALを用いて先頭に戻す処理を行うことがありましたが、その必要がないことが分かりました。

ご参考になれば幸いです。最後までお読み頂きありがとうございます。

4
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?