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++
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();
|
|
}
|
|
}
|