You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.7 KiB
C++

#include <QtCore/QRegularExpression>
#include <QtCore/QTextStream>
#include <QtWidgets/QFileDialog>
#include <QtWidgets/QMessageBox>
#include <QtWidgets/QPushButton>
#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();
}
}