diff --git a/.gitignore b/.gitignore
index e257658..a320707 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,3 +32,4 @@
*.out
*.app
+cmake-*
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..8bf4d45
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,6 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..4d51fbb
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+Extract_etab_a_fiab
\ No newline at end of file
diff --git a/.idea/Extract_etab_a_fiab.iml b/.idea/Extract_etab_a_fiab.iml
new file mode 100644
index 0000000..f08604b
--- /dev/null
+++ b/.idea/Extract_etab_a_fiab.iml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 0000000..a55e7a1
--- /dev/null
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/dictionaries/darkelfe.xml b/.idea/dictionaries/darkelfe.xml
new file mode 100644
index 0000000..09bf5a1
--- /dev/null
+++ b/.idea/dictionaries/darkelfe.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..00d472d
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..79b3c94
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..67e37ee
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..079eda4
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,17 @@
+cmake_minimum_required(VERSION 3.16)
+project(Extract_etab_a_fiab)
+
+set(CMAKE_CXX_STANDARD 20)
+
+find_package(Qt5Widgets REQUIRED)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTORCC ON)
+
+add_executable(
+ Extract_etab_a_fiab
+
+ main.cpp
+ MainDialog.ui MainDialog.cpp MainDialog.h
+)
+target_link_libraries(Extract_etab_a_fiab Qt5::Widgets)
\ No newline at end of file
diff --git a/MainDialog.cpp b/MainDialog.cpp
new file mode 100644
index 0000000..313012e
--- /dev/null
+++ b/MainDialog.cpp
@@ -0,0 +1,83 @@
+#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();
+ }
+}
diff --git a/MainDialog.h b/MainDialog.h
new file mode 100644
index 0000000..d9abc1d
--- /dev/null
+++ b/MainDialog.h
@@ -0,0 +1,25 @@
+#ifndef EXTRACTIONFINESS_MAINDIALOG_H
+#define EXTRACTIONFINESS_MAINDIALOG_H
+
+#include
+
+namespace Ui {
+ class MainDialog;
+}
+
+class MainDialog : public QDialog {
+ Q_OBJECT
+
+public:
+ explicit MainDialog(QWidget* parent = nullptr);
+ ~MainDialog() override;
+
+private:
+ Ui::MainDialog* m_ui;
+
+ void onInputButtonClick();
+ void onCsvButtonClick();
+ void onAccepted();
+};
+
+#endif //EXTRACTIONFINESS_MAINDIALOG_H
diff --git a/MainDialog.ui b/MainDialog.ui
new file mode 100644
index 0000000..3b2ef24
--- /dev/null
+++ b/MainDialog.ui
@@ -0,0 +1,139 @@
+
+
+ MainDialog
+
+
+
+ 0
+ 0
+ 425
+ 177
+
+
+
+ Extraction Finess
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+ -
+
+
-
+
+
+ Fichier à traiter
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+ input_input
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ CSV de sortie
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+ csv_input
+
+
+
+ -
+
+
+ Parcourir
+
+
+ ...
+
+
+
+ -
+
+
+ Parcourir
+
+
+ ...
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Close|QDialogButtonBox::Ok
+
+
+ true
+
+
+
+
+
+
+ input_input
+ input_button
+ csv_input
+ csv_button
+
+
+
+
+ buttonBox
+ rejected()
+ MainDialog
+ reject()
+
+
+ 292
+ 158
+
+
+ 286
+ 176
+
+
+
+
+
diff --git a/cmake-build-debug/Extract_etab_a_fiab_autogen/mocs_compilation.cpp b/cmake-build-debug/Extract_etab_a_fiab_autogen/mocs_compilation.cpp
new file mode 100644
index 0000000..340265d
--- /dev/null
+++ b/cmake-build-debug/Extract_etab_a_fiab_autogen/mocs_compilation.cpp
@@ -0,0 +1,2 @@
+// This file is autogenerated. Changes will be overwritten.
+#include "EWIEGA46WW/moc_MainDialog.cpp"
diff --git a/main.cpp b/main.cpp
new file mode 100644
index 0000000..f439855
--- /dev/null
+++ b/main.cpp
@@ -0,0 +1,13 @@
+#include
+
+#include "MainDialog.h"
+
+int main (int argc, char* argv[]) {
+ QApplication app(argc, argv);
+ app.setQuitOnLastWindowClosed(true);
+
+ MainDialog dialog;
+ dialog.show();
+
+ return app.exec();
+}