2014-02-20 2 views
0

Я получил простой CSV файл:CSV файл объекта C++

name,surname 
Joe,Moe 
Bob,Rob 

В JavaScript я бы просто создать массив объектов следующим образом:

// let's assume the csv file is valid and it was already processed 
var csv = ["name", "surname", "Joe", "Moe", "Bob", "Rob"], 
    ret = [], 
    i, ilen, j, o, 
    cols = 2;   

for (i = cols, ilen = csv.length; i < ilen; i += cols) { 
    o = {}; 
    for (j = 0; j < cols; j += 1) { 
     o[csv[j]] = csv[i + j]; 
    } 
    ret.push(o); 
} 

console.log(ret); // [{name: "Joe", surname: "Moe"}, {name: "Bob", surname: "Rob"}] 

Я d хотел бы создать вектор, заполненный объектами (экземплярами класса). Класс должен быть создан во время выполнения, файл csv может измениться.

Не могли бы вы посоветовать, как достичь этого в C++?

+0

Это не файл CSV, элементы разделены пробелами. Тем не менее, общий подход должен состоять в том, чтобы читать файл по строкам, разделяя их на столбцы, разделенные пробелами. См. [Getline] (http://www.cplusplus.com/reference/string/string/getline/), чтобы получить строку из файла и вопрос [Разделение строки по пробелам в C++] (http: // stackoverflow. com/questions/2275135/splitting-a-string-by-whitespace-in-c) для того, как разбить это на элементы. –

+0

Я знаю, как разбить строку, не могли бы вы дать мне знать, как я могу создать класс динамически во время работы программы? Предположим, что вход csv может измениться. –

+0

Посмотрите оператор 'new', чтобы динамически выделять объекты *, что означает во время выполнения в области динамической памяти. –

ответ

1

C++ не имеет понятия динамического типа, который может быть создан во время выполнения. Вам нужно будет использовать коллекции, такие как std::vector<std::pair<std::string, std::string>>, которые могли бы хранить ряд (имя, значение).

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