第45章 ランダム・アクセスファイル その2  


さて、今回は前回作ったランダムファイルを 読み出すプログラムを作ります。 書き込みがわかったら読み出しは簡単です。

#include <stdio.h> #include <process.h> #define TOTAL_SIZE 70 int main(void) { int no, max_no; char name[20], address[30], birth[20]; char f_name[20], yes_no[16]; long length; FILE *fp; printf("ファイル名="); scanf("%s", f_name); fp = fopen(f_name, "r"); if (fp == NULL) { printf("エラーです"); exit(-1); } fscanf(fp, "%d", &max_no); while(1) { while(1) { printf("[No.]="); scanf("%d", &no); if (no >= max_no || no <= 0) printf("番号入力エラーです\n"); else break; } length = TOTAL_SIZE * (no - 1); fseek(fp, length + 5L, 0); fscanf(fp, "%20s %30s %20s", name, address, birth); printf("名前=%s\n", name); printf("住所=%s\n", address); printf("誕生日=%s\n\n", birth); printf("続けますか(Y/N)"); scanf("%s", yes_no); if (strcmp(yes_no, "N") == 0) break; } return 0; }

レコード番号入力で、不正な番号を入力した場合 (0やマイナスの整数もしくは存在しないレコード番号) は繰り返し、番号入力を要求します。

その後読み出しはレコード番号を元に 何バイト目から読み出せばよいかを計算します。 あとはfseekを使って読み出せばいいですね。 読み出しが終わったら、もう一度読み出しを行うか どうかを聞きます。「N」なら終了です。 while(1)が2重に使われていることに注意してください。

それでは実行してみましょう。

まあ、何とか正しく動きますね。

レコード番号だけでなく、名前や住所で 検索できるようにプログラムを改良してみてください。


[Index][総合Index] [Previous Chapter] [Next Chapter]

Update Dec/19/1996 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。