Не существует "стандартного" csv-ридера / писателя для C или C ++.Это не значит, что вы не можете найти какой-то существующий библиотечный код для использования, но нет единой библиотеки, которая бы управляла ими всеми.В моей работе мы интенсивно используем CSV-файлы, поэтому я пошел дальше и развернул свои собственные, чтобы максимально соответствовать моему рабочему процессу.Я могу рассказать вам о некоторых вещах, которые я сделал в моей библиотеке, которые сработали достаточно хорошо, если вы захотите сделать также и свою собственную вещь:
Я храню данные каквектор векторов наддува :: любой.Я позволил пользователю указать формат данных в конструкторе, аналогично тому, как вы передаете формат в scanf.Это удерживает пользователя от необходимости делать свои собственные приведения.Я использую boost :: tokenize и boost :: lexical_cast для фактического разделения и приведения.Это, очевидно, не будет работать хорошо, если ваши CSV-файлы не помещаются в памяти, но это редко проблема для меня.
У меня может быть шаблонный get (), который выполняетany_cast и возвращает правильные данные.
У меня есть хэш имен столбцов для их индекса, чтобы поддерживать поиск по имени столбца, а не просто поиск по позиции
IПозволяет пользователю указать «первичный ключ» некоторой комбинации столбцов, а затем сохранить хэш, чтобы для каждой строки было сопоставление значений в ключе -> номер строки.Например, если вы читаете данные по акциям, вы можете захотеть найти строку, основанную на CUSIP или тикере, а не вводить целые данные, чтобы найти вашу строку.
Позвольте пользователю указать подсказку о размере, чтобы вы могли зарезервировать () в вашем хранилище
Позвольте пользователю указать функции обратного вызова, чтобы он могобрабатывать и фильтровать строки, которые ему не нужны, когда вы читаете / пишете их
Разрешить пользователю указывать, нужно ли блокировать файл при чтении / записи
Разрешить пользователю передавать свой собственный заголовок столбца для файлов, которые не имеют заголовка в файле
Не вступать в языковую дискуссию, но эта библиотека былана самом деле это порт чего-то, что я изначально делал в perl, и, черт побери, если не было в 10 раз проще писать и в 10 раз удобнее использовать в perl.Я не рекомендую делать CSV-обработку в C ++, если вы можете помочь.