2015-04-12 4 views
-1

Я пытаюсь написать функцию, которая читает файл csv и возвращает содержимое, я думал, что решение будет просто простым двумерным массивом, но единственная информация, которую я могу найти, это то, что не только это нахмурилось, но и единственный способ вернуть 2-мерный (или более) массив из C++-функции включает в себя предопределение размера.Разделительные переменные, разделенные запятыми в C++

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

Что я хочу знать, является то, что является правильным способом сделать это?

+1

Посмотрите [ 'станд :: VECTOR'] (http://en.cppreference.com/w/cpp/container/vector) и ['std :: string'] (http://en.cppreference.com/w/cpp/string/basic_string). –

+0

Сделайте еще несколько исследований, вопросы CSS разбора появляются здесь ежедневно. Тем не менее, обработка 256TiB данных в любом случае будет нелегкой, вам придется сделать код масштабируемым. –

+0

Это была моя точка зрения, чтобы сделать код масштабируемым. Все, что я знаю о файле перед его чтением в переменную, это то, что он меньше теоретического максимума, который в текущем контексте равен 256TiB. Я изучаю это в течение 2 недель, прежде чем спрашивать об этом, я еще не нашел хорошего ответа. –

ответ

0

Деталь будет зависеть от того, что вы делаете, но общее решение будет иметь std::vector из в struct (который содержит поле):

// the CSV fields will be read into the struct's data members 
struct record 
{ 
    std::string name; 
    std::string address; 
    unsigned age; 
    // ... 
}; 

std::vector<record> read_csv(std::istream& is) 
{ 
    std::vector<record> records; 

    std::string line; 
    while(std::getline(is, line)) 
    { 
     record r; 
     // populate r with CSV data in line 
     records.push_back(r); // add record to vector 
    } 

    return records; 
} 
+0

Спасибо, это работает для одного измерения. В настоящее время я пытаюсь выяснить, как использовать push_back, если я использую 2D-вектор. –

0

Вы можете использовать массив списка массива списка.

Прочитайте строку, разделите, создайте массив списка.

Добавьте этот массив в список массивов строк, скажем, массив cvs list.

Вы сможете получить доступ к элементу с CSV [строка] [колонок]

cvs.count() этим число строк, резюме [строка] .count() этим числом elemets в ряд.

Легко ... Удачи!

Смежные вопросы