Как читать структурированные данные из файла в C ++? - PullRequest
1 голос
/ 18 ноября 2009

У меня есть файл данных, в котором мне нужно прочитать данные из каждой строки и сохранить их. А затем, в зависимости от значения одного из этих данных, сохраните эти данные в массиве, чтобы я мог затем вычислить медианное значение всех этих данных.

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

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

Итак, мне нужно прочитать строку, а затем, если определенное поле в записи соответствует определенному условию, мне нужно захватить поле из записи и сохранить его в массиве, чтобы я мог вычислить медиану например, люди, которые живут на «Ок-стрит».

У меня есть условная логика, и я могу разобраться, но мне неудобно с объектами iostream в C ++, такими как создание экземпляра объекта ifstream и последующее чтение из самого файла.

О, я забыл, что данные представляли собой файл значений, разделенных запятыми.

Ответы [ 2 ]

3 голосов
/ 18 ноября 2009

Для ввода через запятую:

using namespace std;
ifstream file;
string line;
while(getline(file, line)) {
    istringstream stream(line);
    string data[3];
    for(int ii = 0; ii < sizeof data / sizeof data[0]; ++ii)
        if(!getline(stream, data[ii], ','))
            throw std::runtime_error("invalid data");
    // process data here
}

Для ввода через пробел (оригинальный ответ):

using namespace std;
ifstream file;
string line;
while(getline(file, line)) {
    int datum1;
    string datum2;
    double datum3;
    istringstream stream(line);
    if(!(line >> datum1 >> datum2 >> datum3))
        throw std::runtime_error("invalid data");
    // process data here
}

Эти методы не выиграют призы за производительность, но, надеюсь, они достаточно надежны и просты для понимания.

1 голос
/ 18 ноября 2009

Это звучит как идеальная проблема для встроенной базы данных в стиле SQL light. Тогда вы можете иметь любое количество стандартных функций SQL без необходимости переписывать колесо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...