Создать файл.csv в C++ в qt

Я хочу создать CSV-файл с использованием C++, используя Qt для приложения и UI Framework. Есть ли библиотека для файла CSV.

3 ответа

Решение

Вы можете в основном заглянуть в libqxt.

Использование QxtCsvModel

Класс QxtCsvModel [libqxt.bitbucket.org] предоставляет QAbstractTableModel [qt-project.org] для файлов CSV. Это, пожалуй, самый простой способ чтения и записи файлов csv без необходимости разбора формата csv на то, что может понять qt. Это так же просто, как использование одной строки кода, например, следующее читает файл csv:

csvmodel->setSource(fileName);

Попробуйте библиотеку qtcsv для чтения и записи csv-файлов. Пример:

#include <QList>
#include <QStringList>
#include <QDir>
#include <QDebug>

#include "qtcsv/stringdata.h"
#include "qtcsv/reader.h"
#include "qtcsv/writer.h"

int main()
{
    // prepare data that you want to save to csv-file
    QStringList strList;
    strList << "one" << "two" << "three";

    QtCSV::StringData strData;
    strData.addRow(strList);
    strData.addEmptyRow();
    strData << strList << "this is the last row";

    // write to file
    QString filePath = QDir::currentPath() + "/test.csv";
    QtCSV::Writer::write(filePath, strData);

    // read data from file
    QList<QStringList> readData = QtCSV::Reader::readToList(filePath);
    for ( int i = 0; i < readData.size(); ++i )
    {
        qDebug() << readData.at(i).join(",");
    }

    return 0;
}

Я пытался сделать его небольшим и простым в использовании. См. Файл Readme для документации библиотеки и других примеров кода.

Просто пишешь CSV? Хотя Google может раскрыть некоторые библиотеки CSV, вероятная причина, по которой вы их не нашли, заключается в том, что это чертовски банально. Помните, что CSV - это просто значения, разделенные запятыми.

Для его реализации используйте любые средства, чтобы написать текстовый файл (std::ofstream, QFile, QTextStream) и сделать что-то вроде:

foreach record
{
  foreach value in record
  {
    write "\"" + escape(value) + "\""
    if not last value in record
    {
      write ","
    }        
  }
  write "\n"
}


escape (value)
{
  replace each "\"" with "\"\""
}

Обратите внимание, что вы можете писать значения без кавычек, если они не содержат разделителей (,). Также обратите внимание, что вы можете использовать разные разделители, например, обычно используется точка с запятой.

Другие вопросы по тегам