「Qtの基礎 - CSVファイル」の版間の差分

ナビゲーションに移動 検索に移動
31行目: 31行目:
<br>
<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  #include <QFileDialog>
  #include <QCoreApplication>
  #include <QMessageBox>
  #include <QFile>
  #include <QTextStream>
  #include <QTextStream>
  #include <QFile>
  #include <iostream>
  #include <vector>
  #include <vector>
  #include <math.h>
  #include <limits>
  #include <sstream>
  #include <cmath>
  #include "mainwindow.h"
   
  #include "ui_mainwindow.h"
  int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
   
   
using namespace std;
    // 数値データを生成 : sin曲線 y = sin(x)
    int iSize = 100;
    std::vector<double> lx(iSize, 0.0),
                        ly(iSize, 0.0);
   
   
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
    double dx = 2 * M_PI / iSize;
{
    for (int i = 0; i < iSize; i++) {
    ui->setupUi(this);
      lx[i] = i * dx;
}
      ly[i] = sin(lx[i]);
    }
   
   
MainWindow::~MainWindow()
    // 出力形式の選択
{
    int formatChoice;
     delete ui;
    std::cout << "Choose output format:\n";
}
    std::cout << "1. Fixed-point notation\n";
    std::cout << "2. Scientific notation (e-notation)\n";
    std::cout << "Enter your choice (1 or 2): ";
     std::cin >> formatChoice;
   
   
void MainWindow::OnButtonClicked()
    // 入力バッファをクリア
{
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
     // Input File Name
 
     QString FileName = QFileDialog::getSaveFileName(this, tr("Save CSV File"), "", tr("CSV (*.csv);;All Files (*)"));
     // 精度の設定
    int precision;
     std::cout << "Enter the number of decimal places (1-15): ";
    std::cin >> precision;
    precision = std::max(1, std::min(15, precision)); // 1から15の範囲に制限
   
   
     if(FileName.isEmpty())
     // 入力バッファをクリア
    {  // Cancel
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
      return;
    }
   
   
     // Generate CSV Data
     // 数値データをテキストデータに変換
     int iSize = 100;
     QString    strFileData;
     vector<double> lx(iSize, 0.0f),
     QTextStream strStream(&strFileData);
                  ly(iSize, 0.0f);
    strStream.setRealNumberPrecision(precision);
   
   
     double dx = 2 * 3.15159 / iSize;
     if (formatChoice == 1) {
     for(int i = 0; i < iSize; i++)
      strStream.setRealNumberNotation(QTextStream::FixedNotation);
     {
     }
       lx[i] = i * dx;
     else {
      ly[i] = sin(vx);
       strStream.setRealNumberNotation(QTextStream::ScientificNotation);
     }
     }
   
   
    // Convert from Double to String
     for(int i = 0; i < iSize; i++) {
    QString strFileData = "";
      strStream << lx[i] << ", " << ly[i] << "\n";
    //stringstream ss;
     for(int i = 0; i < iSize; i++)
    {
        strFileData += lx[i] + ", " + ly[i] + "\n";
        //ss << lx[i] << "," << ly[i] << endl;
     }
     }
      
     // Write to File
    // ファイル名の入力
    std::cout << "Enter the file name to save the CSV data (e.g., data.csv): ";
     std::string fileName;
    std::getline(std::cin, fileName);
    QString FileName = QString::fromStdString(fileName);
     // 全テキストデータを書き込む
     QFile File(FileName);
     QFile File(FileName);
    if(!File.open(QIODevice::WriteOnly))
    {
        QMessageBox::information(this, tr("Unable to open file"), File.errorString());
   
   
        return;
    if (!File.open(QIODevice::WriteOnly)) {
      std::cerr << "Unable to open file: " << File.errorString().toStdString() << std::endl;
      return -1;
     }
     }
   
   
     QTextStream OutStream(&File);
     QTextStream OutStream(&File);
     // 浮動小数点をe形式にする
     OutStream << strFileData;
    //OutStream.setRealNumberNotation(QTextStream::ScientificNotation);
   
   
     // 浮動小数点の桁数を固定
     File.close();
    //OutStream.setRealNumberNotation(QTextStream::FixedNotation);
    // 浮動小数点の桁数を設定
    OutStream.setRealNumberPrecision(3);
   
   
     OutStream << strFileData;
     std::cout << "Data has been successfully saved to " << fileName << std::endl;
    //OutStream << ss.str().c_str();
   
   
     File.close();
     return 0;
  }
  }
  </syntaxhighlight>
  </syntaxhighlight>

案内メニュー