C言語関係掲示板

過去ログ

No.417.入力ID番号と一致したファイルを開く

[戻る] [ホームページ]
No.2903

構造体からのファイルのオープンの仕方
投稿者---万里(2002/10/10 19:41:54)


こんばんわ どなたか教えてください
struct file{
char id_1[4];
char id_2[4];
char id_3[4];
char id_4[4];
char id_5[4];
};
のようにファイルに00010002000300040005のようにレコードがあるときに
入力したID番号とファイルにあるID番号が一緒の時、そのID番号でファイルを開くという物をつくりたいのですがどのようにしたらよいのでしょうか?
fgetsで1レコード読み込んで比較する方法をとってみたのですがうまくいきません。よろしくお願いします。 

No.2907

Re:構造体からのファイルのオープンの仕方
投稿者---ともじ(2002/10/10 22:02:48)


>こんばんわ どなたか教えてください
>struct file{
> char id_1[4];
> char id_2[4];
> char id_3[4];
> char id_4[4];
> char id_5[4];
>};
>のようにファイルに00010002000300040005のようにレコードがあるときに
>入力したID番号とファイルにあるID番号が一緒の時、そのID番号でファイルを開くという物をつくりたいのですがどのようにしたらよいのでしょうか?
>fgetsで1レコード読み込んで比較する方法をとってみたのですがうまくいきません。よろしくお願いします。 

解釈が違っているかもしれませんが。
・ファイルの入力部分は省略しています。
・ファイルの内容は4*5文字固定でいいですね。
・比較は4文字ずつでいいですね。つまり、01や001は不可です。

#include <stdio.h>
#include <string.h>

#define LEN 4
#define N	 5

int main(void)
{
	char f_data[LEN*N+1] = "00010002000300040005";
	char id_data[20];
	char fname[20];
	int  i;

	printf("id = ");
	scanf("%19s", id_data);

	i = 0;
	while ( i < LEN*N ) {
		/* ファイルデータに入力IDが含まれていれば */
		if (strncmp(&f_data[i], id_data, LEN) == 0)
			break;
		i += LEN;
	}

	if (i < LEN*N ) {	
		/* ファイル名の編集 */
		sprintf(fname, "file%s.dat", id_data);
		/* 表示して確認 */
		printf("%s\n",fname);
	}
	else
		printf("一致するIDがありません\n");
	
	return (0);
}