Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++文件处理读取选择数据_C++_File Io - Fatal编程技术网

C++文件处理读取选择数据

C++文件处理读取选择数据,c++,file-io,C++,File Io,我创建了一个结构,并使用文件流将数据输出到一个基本文本文件中。现在,我希望能够让用户输入一个ID号,然后程序应该从文本文件中获取该记录的数据,而不是显示其中包含的所有内容。类似的操作可以: struct Record { int id; string name; float amount; }; int main() { fstream f; f.open("data.txt", ios::in); int id; Record p[5]; c

我创建了一个结构,并使用文件流将数据输出到一个基本文本文件中。现在,我希望能够让用户输入一个ID号,然后程序应该从文本文件中获取该记录的数据,而不是显示其中包含的所有内容。

类似的操作可以:

struct Record
{
    int id;
    string name;
    float amount;
};

int main()
{
    fstream f; f.open("data.txt", ios::in);

    int id; Record p[5];
    cout << "Enter ID num: ";
    cin >> id;

    for (int i = 0; i < 5; i++)
    {
        f >> p[i].id;
        getline(f, p[i].name, '*');
        f >> p[i].amount;

        if(id == p[i].id)
            cout << p[i].name << " " << p[i].amount << endl;
    }

    return 0;
}

下面是一些从文件中获取数据记录的方法

直接访问 这涉及到在文件中寻找一个位置并读取记录。 数据必须是固定长度的。 文件位置必须已知,例如,从字典、关联数组等获取

例如:

input_file.seekg(position, ios::beg);
input_file.read((signed char *)&my_record, sizeof(my_record));
将文件读入内存,搜索内存 当记录长度可变或位置未知时,此技术很好。 分配一个大内存区域,通常称为缓冲区,读入缓冲区,然后搜索缓冲区

例如:

std::vector<unsigned char> buffer(1024*1024);
input_file.read((signed char *) &buffer[0], 1024*1024);
内存映射文件 内存映射文件将文件视为内存。操作系统负责将数据从文件中提取到内存中。
这是特定于操作系统的,您必须查找API。

您的问题是什么?您的记录是固定大小还是可变大小?您能解释一下getlinef,p[i]吗?名称“*”,我不清楚*是指针吗。它是getline的分隔符。基本上,这就是getline停止输入的地方,因此只有名称被提取并存储到字符串名称中。
std::vector<unsigned char> buffer(1024*1024);
input_file.read((signed char *) &buffer[0], 1024*1024);