хранение содержимого файла в переменные в C ++

0

Я работаю над программой, которая требует от меня создать хеш-таблицу из содержимого файла. Файл содержит записи (по одной строке), содержащие ключ (int), имя (строка), код (int) и стоимость (double). У меня есть код, написанный для большей части программы для создания хеш-таблицы, однако у меня есть некоторые проблемы с выяснением того, как я должен загрузить таблицу из файла. В частности, как хранить каждую часть записи в соответствующей переменной?

Код довольно длинный, но если вы думаете, что публикация это поможет ответить на мой вопрос, дайте мне знать, и я буду рад включить его.

Я чувствую, что должен включить это, хотя у меня есть структура, предназначенная для хранения информации, содержащейся в каждой записи, которую я установил следующим образом:

struct record {
        int key;
        string name;
        int code;
        double cost;
}

Если вам нужно увидеть какие-либо другие фрагменты кода или код в целом, дайте мне знать.

  • 0
    с какой конкретно проблемой? Разве вы не знаете, как использовать вашу структуру?
  • 0
    В моем основном методе я открываю и читаю в файле, но я не знаю, как сохранить различные части файла в связанные с ними переменные. Например, ключ должен храниться в моей переменной int key, имя должно быть в строковом имени и т. Д. На самом деле мне никогда не приходилось делать это раньше, я имею в виду полное сохранение в определенные переменные.
Показать ещё 1 комментарий
Теги:
file
variables

2 ответа

0
Лучший ответ

Если файл данных имеет отдельные элементы, разделенные пробелами, то вы можете использовать, например, следующий код:

#include <iostream>
#include <fstream>

using namespace std;

typedef struct record {
    int key;
    string name;
    int code;
    double cost;
} rec;

int main()
{
    ifstream f ("data.txt");

    rec r;

    f >> r.key;
    while (!f.eof())
    {
            f >> r.name;
            f >> r.code;
            f >> r.cost;

            cout << "new record, key=" << r.key
                    << ", name=" << r.name
                    << ", code=" << r.code
                    << ", cost=" << r.cost << "\n";
            f >> r.key;
    }

    //will also be done by destructor: f.close();

    return 0;
}
  • 0
    Вам нужно проверить файл после прочтения и перед использованием . Смотрите этот ответ. Кроме того, нет необходимости закрывать iostream вручную, деструктор сделает это.
  • 0
    да, это сделано именно так, см. "f >> r.key;" заявление. спасибо за указание на закрытие - но раннее закрытие никогда не бывает плохим, если в функции выполняется другая обработка.
Показать ещё 2 комментария
2

Вы можете попробовать следующее:

while(_fstream >> key && _fstream >> name && _fstream >> code && _fstream >> cost)
{
    record r;
    r.key = key;
    r.name = name; // and so on
    // now you may do whatever you want to with your r object
}

_fstream - ваш открытый поток файлов для ввода.


Как отметил @Red Alert, это будет более элегантное решение:

while(_fstream >> key >> name >> code >> cost)

Поскольку _fstream >> key возвращает сам _fstream;

  • 1
    альтернативно, в while(_fstream >> key >> name >> code >> cost)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню