#include #include #include #include #include #include "MainDialog.h" #include "ui_MainDialog.h" MainDialog::MainDialog (QWidget* parent) : QDialog(parent), m_ui(new Ui::MainDialog) { m_ui->setupUi(this); connect(m_ui->input_button, &QPushButton::clicked, this, &MainDialog::onInputButtonClick); connect(m_ui->csv_button, &QPushButton::clicked, this, &MainDialog::onCsvButtonClick); connect(m_ui->buttonBox, &QDialogButtonBox::accepted, this, &MainDialog::onAccepted); } MainDialog::~MainDialog () { delete m_ui; } void MainDialog::onInputButtonClick () { m_ui->input_input ->setText(QFileDialog::getOpenFileName(this, "Fichier à traiter", QString())); } void MainDialog::onCsvButtonClick () { m_ui->csv_input ->setText(QFileDialog::getSaveFileName(this, "CSV de sortie", QString(), "Fichier CSV (*.csv)")); } void MainDialog::onAccepted () { if (m_ui->input_input->text().isEmpty()) { QMessageBox::critical(this, "Erreur", "Vous devez sélectioner un fichier à traiter"); return; } if (m_ui->csv_input->text().isEmpty()) { QMessageBox::critical(this, "Erreur", "Vous devez indiquer le fichier CSV de sortie"); return; } QFile input(m_ui->input_input->text()); if (!input.exists()) { QMessageBox::critical(this, "Erreur", "Le fichier à traiter n'existe pas !"); return; } if (!input.open(QIODevice::Text | QIODevice::ReadOnly)) { QMessageBox::critical(this, "Erreur", "Impossible de lire le fichier à traiter"); return; } const QString data = input.readAll(); input.close(); QFile outputFile(m_ui->csv_input->text()); if (!outputFile.open(QIODevice::Text | QIODevice::WriteOnly | QIODevice::Truncate)) { QMessageBox::critical(this, "Erreur", "Impossible d'écrire dans le fichier CSV"); return; } QTextStream output(&outputFile); // language=RegExp const QRegularExpression regex("\\*\\*\\* Etablissement ([0-9][AB0-9][0-9]{7}) \\*\\*\\*[\\s\\S]*?(?:(?:Champs a fiabiliser : ([^\\s]+))|(?=\\*\\*\\* Etablissement )|$)"); QRegularExpressionMatchIterator it_regex = regex.globalMatch(data); int nbMatch = 0; while (it_regex.hasNext()) { nbMatch++; QRegularExpressionMatch match = it_regex.next(); output << "\"" + match.captured(1).replace("\"", "\\\"") + "\";\"" + match.captured(2).replace("\"", "\\\"") + "\"\n"; } outputFile.close(); QMessageBox::information(this, "Fin", QString::number(nbMatch) + " lignes générées"); if (nbMatch > 0) { this->accept(); } }