C ++: хранение CSV в contianer - PullRequest
       1

C ++: хранение CSV в contianer

0 голосов
/ 06 июня 2011

У меня есть std::string, который содержит значения, разделенные запятыми, мне нужно сохранить эти значения в некотором подходящем контейнере, например массив, вектор или какой-то другой контейнер. Есть ли встроенная функция, с помощью которой я мог бы сделать это? Или мне нужно написать собственный код для этого?

Ответы [ 4 ]

3 голосов
/ 06 июня 2011

Если вы хотите и можете использовать библиотеки Boost, Boost Tokenizer будет очень хорошо работать для этой задачи.

Это будет выглядеть так:

std::string str = "some,comma,separated,words";
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
boost::char_separator<char> sep(",");
tokenizer tokens(str, sep);
std::vector<std::string> vec(tokens.begin(), tokens.end());
2 голосов
/ 06 июня 2011

В основном вам нужно токенизировать строку, используя , в качестве разделителя. Эта более ранняя ветка Stackoverflow поможет вам в этом.

Здесь - другой соответствующий пост.

0 голосов
/ 06 июня 2011

Используя генератор синтаксического анализатора AX, вы можете легко проанализировать вашу строку csv, например,

std::string input = "aaa,bbb,ccc,ddd";
std::vector<std::string> v; // your strings get here
auto value = *(r_any() - ',') >> r_push_back(v); // rule for single value
auto csv = *(value & ',') & value & r_end(); // rule for csv string
csv(input.begin(), input.end());

Отказ от ответственности: я не тестировал код выше, он может иметь некоторые поверхностные ошибки.

0 голосов
/ 06 июня 2011

Я не думаю, что есть что-либо доступное в стандартной библиотеке.Я хотел бы подойти, как -

  1. Токенизация строки на основе , делимера с использованием strtok.
  2. Преобразовать его в целое число с помощью функции atoi.
  3. push_back значение для вектора.

Если вам удобна библиотека повышения, проверьте эту тему .

...