Использование C++, я хотел бы разбить строки строки (CSV-файл в этом случае), где некоторые из полей могут содержать разделители, которые экранированы (используя «"), и должны можно рассматривать как литералы. Я рассмотрел различные вопросы, уже поставленные, не нашел прямого ответа на мою проблему.C++ Разделение строк, но исключение всех разделителей в цитатах
Пример данных файла CSV:
Header1,Header2,Header3,Header4,Header5
Hello,",,,","world","!,,!,",","
Желаемая вектор строка после расщепления:
["Hello"],[",,,"],["world"],["!,,!,"],[","]
Примечание: CSV является действительным, только если число столбцов данных равно количеству заголовков столбцов.
Предпочитаете невосстанавливаемое/стороннее решение. Эффективность не является приоритетом.
EDIT: Код ниже реализации регулярного выражения от @ClasG по меньшей мере удовлетворяет приведенному выше сценарию. Я разработка тестовых случаев бахромы, но хотелось бы услышать, когда/где ломается ...
std::string s = "Hello,\",,,\",\"world\",\"!,,!,\",\",\"\"";
std::string rx_string = "(\"[^\"]*\"|[^,]*)(?:,|$)";
regex e(rx_string);
std::regex_iterator<std::string::iterator> rit (s.begin(), s.end(), e);
std::regex_iterator<std::string::iterator> rend;
while (rit!=rend)
{
std::cout << rit->str() << std::endl;
++rit;
}
Возможный дубликат: http://stackoverflow.com/questions/1120140/how-can-i-read-and-parse-csv-files-in-c – roalz
Нет стандартной библиотеки csv. Почему вы так сильно избегаете решения сторонних разработчиков? – BoBTFish
@BoBTFish С радостью рассмотрит сторонние ответы. Просто заявляю, что будет идеально для этого случая использования. – Willeman