从二进制文件中读取和搜索数据

时间:2013-03-10 15:14:15

标签: c++

在我的实验室工作中,我们必须从txt读取数据并将它们作为二进制格式写入.dat文件,然后我们应该在二进制文件中通过给定的id搜索和查找数据。 我们在此

中的worker.txt文件

格式:

ID firstname lastname age salary

像:

341 Alex Morgan 32 3400
234 Jessica Gibson 28 2000
...

程序读取这些数据,然后将它们全部写入worker.dat作为二进制文件。

问题是当输入有效的Id用于搜索程序查找并打印它但随后关闭时窗口停止执行错误,我需要你的帮助来处理它。

我的searchByID功能:

void searchByID( int key )
{
bool find=false;
int id,age,sal;
string fn,ln;
ifstream InFile;
InFile.open("worker.dat", ios::in | ios::binary);
int i = getSize( initialArr );
int j;
for( j=0; j<i; j++ ){
    InFile.read( (char*)&id, sizeof(int));
    InFile.read( (char*)&fn, sizeof(string));
    InFile.read( (char*)&ln, sizeof(string));
    InFile.read( (char*)&age, sizeof(int));
    InFile.read( (char*)&sal, sizeof(int));
    if( id == key )
    {
        cout << "Datas for Entered ID:\n"
            << id <<" "<< fn <<" "
            << ln <<" "<< age <<" "
            << sal << endl;
        find = true;
    }
}
if( !find )
    cout << "Entered ID not Found on File" << endl;
InFile.close();
}

2 个答案:

答案 0 :(得分:2)

做这样的事情不会起作用:

InFile.read( (char*)&fn, sizeof(string));

字符串通常在内部包含指向实际字符的指针,因此实际文本不会存储在文件中的任何位置。您需要使用char数组来代替读取和写入字符串。

答案 1 :(得分:1)

这里似乎存在许多问题,正如我在评论中所说,你正在描述worker.txt的格式并从一个名为worker.dat的文件中读取。它们的格式是否相同?如果没有,那么您正在阅读文本文件。如果是这样,那么你不知道字符串的长度 - 但我猜它们会被终止。

以下是您遇到的一个问题的示例 - sizeof(字符串)将始终是指针的大小而不是您正在阅读的字符串的长度。

如果这是一个文本文件,你想要做的是:

  • 从文本文件中读取一行。

  • 解析该行