nprogram’s blog

気ままに、プログラミングのトピックについて書いていきます

Qtでcsvファイルに書き込む方法

QTextStreamを用いることで、csvファイルに保存することが可能です。

csvファイル保存の形式に合わせるため、データごとにカンマで区切ります。今回は、10個のデータごとに改行します。

今回使用するデータは、日本語文字列データを使用しました。

以下がコードです。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>
#include <QDebug>
#include <QFile>
#include <QTextStream>
#include <QFileDialog>
#include <QMessageBox>
#define Jstr(str) QString::fromLocal8Bit(str)

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{

    // csvファイルに書き込むQStringListを作成
    QStringList writeList;
    QString str = Jstr("日本語");

    for (int i = 1; i <= 100; i++) {

        if (i % 10){
            writeList.append(str + " : " + QString::number(i) + ",");
        } else {
            // 改行コードはLFです
            writeList.append(str + " : " + QString::number(i) + "\n");
        }
    }

    // fileNameとfile pathを求める
    QString fileName = QFileDialog::getSaveFileName(this,
        tr("Save Paint Info"), "",
        tr("Paint info (*.csv);;All Files (*)"));

    if (fileName.isEmpty()) return;

    QFile file(fileName);

    if (!file.open(QIODevice::WriteOnly)) {
            QMessageBox::information(this, tr("Unable to open file"),
                file.errorString());
            return;
    }

    // デバッグ表示
    foreach (QString item, writeList) {
        qDebug() << item;
    }

    // csvファイルに書き込む
    QTextStream out(&file);
    foreach (QString item, writeList) {
        out << item;
    }
}

実行結果

不明なコンパイル時の出力はありますが、無事、csvファイルにデータを書き込むことができました。

f:id:nprogram:20170810082054p:plain

f:id:nprogram:20170810082128p:plain