2017-02-21 10 views
1

Я работаю над программой, и моя «база данных» - это некоторые .csv-файлы.Обработка данных в C++

У меня есть список объектов в .csv с некоторой информацией о каждом. Это наилучший способ обработки «данных».

  • Работа с fstream, а это означает, что каждый раз, что я хочу изменить данные, или я хочу что-то я буду работать непосредственно с моими файлами с инструментами fstream
  • Или, в начале программы чтения Я буду загружать данные в вектор, читать, писать на векторе, а в конце программы я удаляю предыдущий файл и загружаю новый.

В отношении производительности это будет отличаться? Учитывая, что объекты многочисленны.

+1

Что происходит, когда вы следуете своему второму подходу и файл изменяется во время выполнения вашей программы? Помимо очевидных различий между этими двумя подходами, недостаточно контекста imo, даже в случае воздействия производительности. – mpiatek

+1

Открыть, прочитать в кеш и закрыть файл. Периодически записывайте кеш в файл, если он был изменен. Определенно писать при выходе. Вам даже не нужно удалять старый файл. Просто откройте файл и напишите над ним. – user4581301

+0

мой пункт был ясный думаю думаю. По fstream я подразумеваю класс потока ввода/вывода –

ответ

2

Я думаю, что это скорее комбинация, чем выбор A или B. Особый выбор только A. небезопасен, так как несколько компонентов могут одновременно обращаться к файлу. Плюс, если есть много обновлений, то использование потоков каждый раз может сделать ваш код очень медленным.

Поэтому я считаю, что вы должны использовать B, но также позаботьтесь о реализации, чтобы сохранить ваши данные безопасным способом (напишите ваши данные в файле).

Что касается структуры данных, это зависит от использования. Один важный вопрос, который нужно задать здесь, заключается в том, есть ли много вложений и исключений. Если это так, то было бы более эффективно использовать list вместо вектора, так как список обеспечивает мгновенные вставки времени и vector не подходит для этой цели.

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

0

Возьмите анализатор CSV из моей утилиты CSVtoC.

http://www.malcolmmclean.site11.com/www/

CSV файлы не подходят для динамического обновления в записи не фиксируется в известном дисковыми физических местах. (Альтернатива заключается в том, чтобы изобрести CSV, чтобы это не выполнялось, но это деликатный и грязный подход).

Чтение CSV затруднено, запись одного тривиально.