写一个简单的索引文件的建立示例
通过将关键字段放入文件,通过关键字段查询记录所在文件中的位置。
indexFile.cpp
/*
–建立索引文件
–通过索引字段查找索引记录
20240107 星期日 完成
by Racyen
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char keyword[50];
int offset;
}IndexItem;
FILE *indexFile;
void addIndex()//创建索引数据
{
indexFile=fopen(“d:/index_file.dat”,“wb”);
if (indexFile==NULL) {
printf(“创建索引文件失败\n”);
}
IndexItem item1={“apple”,234};
IndexItem item2={“banana”,876};
IndexItem item3={“orange”,987};
fwrite(&item1,sizeof(IndexItem),1,indexFile);
fwrite(&item2,sizeof(IndexItem),1,indexFile);
fwrite(&item3,sizeof(IndexItem),1,indexFile);
fclose(indexFile);
}
//读出索引数据
readIndex()
{
int count=100;
//打开文件
FILE *file =fopen (“d:/index_file.dat”,“rb”);
//输入要查找的记录id
char key[100] ;
long findIndex =-1;
int keyword_pos=-1;//索引字段所处的序号
printf(“Enter record key: “);
scanf(”%s”,&key);
IndexItem item_n[count];
//在索引文件中查找
for (int i=0;i<count;i++)//默认查找100次
{
fread(&item_n[i],sizeof( IndexItem),1,file);
if (strcmp(item_n[i].keyword,key)==0)
{
printf(“Record index is found! \n”);
printf("Record key is %s, and index is :%d , \n",item_n[i].keyword,item_n[i].offset);
findIndex=item_n[i].offset;
keyword_pos=i+1;
break;
}
}
if(findIndex >=0)
{
printf(“Record index is found! \n”);
printf(“Record index pos is the %d pos \n”,keyword_pos);
}
else {
printf(“Record index is not found .\n”);
}
}
indexFile.h
#ifndef INDEXFILE_H_INCLUDED
#define INDEXFILE_H_INCLUDED
#endif // INDEXFILE_H_INCLUDED
void addIndex();
void readIndex();
main.cpp
#include
#include “method.h”
#include “indexFile.h”
using namespace std;
int main()
{
cout << "Hello world!" << endl;
readIndex();
system("pause");
return 0;
}
测试验证