Add title and dynamic regex support

master v1.0
Julien Rosset 5 years ago
parent d0a0d6743b
commit 714d8e38e0

5
.gitignore vendored

@ -1,7 +1,3 @@
# ---> C++
# Prerequisites
*.d
# Compiled Object files
*.slo
*.lo
@ -29,7 +25,6 @@
# Executables
*.exe
*.out
*.app
cmake-*

@ -8,6 +8,7 @@ set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
include_directories(${CMAKE_BINARY_DIR})
add_executable(
Extract_etab_a_fiab

@ -1,4 +1,5 @@
#include <QtCore/QRegularExpression>
#include <QtCore/QString>
#include <QtCore/QTextStream>
#include <QtWidgets/QFileDialog>
@ -8,10 +9,16 @@
#include "MainDialog.h"
#include "ui_MainDialog.h"
const QString& MainDialog::DEFAULT_REGEX = QStringLiteral(
// language=Regexp
"\\*\\*\\* Etablissement (?<etablissement>[0-9][AB0-9][0-9]{7}) \\*\\*\\*[\\s\\S]*?(?:(?:Champs a fiabiliser : (?<champs_a_fiabiliser>[^\\s]+))|(?=\\*\\*\\* Etablissement )|$)"
);
MainDialog::MainDialog (QWidget* parent) :
QDialog(parent),
m_ui(new Ui::MainDialog) {
m_ui->setupUi(this);
defaultRegex();
connect(m_ui->input_button, &QPushButton::clicked, this, &MainDialog::onInputButtonClick);
connect(m_ui->csv_button, &QPushButton::clicked, this, &MainDialog::onCsvButtonClick);
@ -23,6 +30,12 @@ MainDialog::~MainDialog () {
delete m_ui;
}
void MainDialog::defaultRegex () {
if (m_ui->regex_input->toPlainText().isEmpty()) {
m_ui->regex_input->setPlainText(MainDialog::DEFAULT_REGEX);
}
}
void MainDialog::onInputButtonClick () {
m_ui->input_input
->setText(QFileDialog::getOpenFileName(this, "Fichier à traiter", QString()));
@ -34,8 +47,15 @@ void MainDialog::onCsvButtonClick () {
}
void MainDialog::onAccepted () {
defaultRegex();
const QRegularExpression regex(m_ui->regex_input->toPlainText());
if (!regex.isValid()) {
QMessageBox::critical(this, "Erreur", "L'expression régulière n'est pas valide");
return;
}
if (m_ui->input_input->text().isEmpty()) {
QMessageBox::critical(this, "Erreur", "Vous devez sélectioner un fichier à traiter");
QMessageBox::critical(this, "Erreur", "Vous devez sélectionner un fichier à traiter");
return;
}
if (m_ui->csv_input->text().isEmpty()) {
@ -62,21 +82,31 @@ void MainDialog::onAccepted () {
}
QTextStream output(&outputFile);
// language=RegExp
const QRegularExpression regex("\\*\\*\\* Etablissement ([0-9][AB0-9][0-9]{7}) \\*\\*\\*[\\s\\S]*?(?:(?:Champs a fiabiliser : ([^\\s]+))|(?=\\*\\*\\* Etablissement )|$)");
QStringList groups_name = regex.namedCaptureGroups();
for (int pos = 1; pos < groups_name.size(); pos++) {
groups_name[pos] = "\"" + (groups_name[pos].isEmpty() ? "Champ n°" + QString::number(pos) : groups_name[pos].replace("\"", "\\\"")) + "\"";
}
groups_name.pop_front();
output << groups_name.join(";") + "\n";
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";
QStringList groups = it_regex.next().capturedTexts();
groups.pop_front();
for (QStringList::iterator it_group = groups.begin(); it_group != groups.end(); ++it_group) {
(*it_group) = "\"" + (*it_group).replace("\"", "\\\"") + "\"";
}
output << groups.join(";") + "\n";
}
outputFile.close();
QMessageBox::information(this, "Fin", QString::number(nbMatch) + " lignes générées");
QMessageBox::information(this, "Fin", QString::number(nbMatch) + " lignes trouvées");
if (nbMatch > 0) {
this->accept();
}

@ -3,6 +3,7 @@
#include <QtWidgets/QDialog>
class QString;
namespace Ui {
class MainDialog;
}
@ -15,8 +16,12 @@ public:
~MainDialog() override;
private:
static const QString& DEFAULT_REGEX;
Ui::MainDialog* m_ui;
void defaultRegex();
void onInputButtonClick();
void onCsvButtonClick();
void onAccepted();

@ -6,16 +6,16 @@
<rect>
<x>0</x>
<y>0</y>
<width>425</width>
<height>177</height>
<width>750</width>
<height>464</height>
</rect>
</property>
<property name="windowTitle">
<string>Extraction Finess</string>
<string>Extract_etab_a_fiab</string>
</property>
<layout class="QVBoxLayout" name="MainDialog_layout">
<item>
<spacer name="verticalSpacer">
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
@ -28,26 +28,38 @@
</spacer>
</item>
<item>
<layout class="QGridLayout" name="form_layout">
<item row="0" column="0">
<widget class="QLabel" name="input_label">
<widget class="QLabel" name="label">
<property name="font">
<font>
<pointsize>16</pointsize>
</font>
</property>
<property name="text">
<string>Fichier à traiter</string>
<string>Extraction des Finess traités par le batch d'import FIPPA du référentiel MDM</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>input_input</cstring>
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QGridLayout" name="form_layout" rowstretch="0,0,2,0">
<item row="1" column="1">
<widget class="QLineEdit" name="csv_input"/>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="input_input"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="csv_label">
<property name="text">
@ -61,8 +73,11 @@
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QToolButton" name="csv_button">
<item row="0" column="1">
<widget class="QLineEdit" name="input_input"/>
</item>
<item row="0" column="2">
<widget class="QToolButton" name="input_button">
<property name="toolTip">
<string>Parcourir</string>
</property>
@ -71,8 +86,8 @@
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QToolButton" name="input_button">
<item row="1" column="2">
<widget class="QToolButton" name="csv_button">
<property name="toolTip">
<string>Parcourir</string>
</property>
@ -81,6 +96,61 @@
</property>
</widget>
</item>
<item row="2" column="0" colspan="3">
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="0">
<widget class="QLabel" name="input_label">
<property name="text">
<string>Fichier à traiter</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>input_input</cstring>
</property>
</widget>
</item>
<item row="3" column="1" colspan="2">
<widget class="QTextEdit" name="regex_input">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>800</height>
</size>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="regex_label">
<property name="text">
<string>Expression régulière</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>regex_input</cstring>
</property>
</widget>
</item>
</layout>
</item>
<item>
@ -116,6 +186,7 @@
<tabstop>input_button</tabstop>
<tabstop>csv_input</tabstop>
<tabstop>csv_button</tabstop>
<tabstop>regex_input</tabstop>
</tabstops>
<resources/>
<connections>
@ -126,8 +197,8 @@
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>292</x>
<y>158</y>
<x>298</x>
<y>421</y>
</hint>
<hint type="destinationlabel">
<x>286</x>

@ -1,2 +1,4 @@
# Extract_etab_a_fiab
By [Julien Rosset](mailto:jul.rosset@gmail.com)
Please reports bugs on [Gitea](https://git.jrosset.ovh/darkelfe14728/Extract_etab_a_fiab/issues)

@ -1,2 +0,0 @@
// This file is autogenerated. Changes will be overwritten.
#include "EWIEGA46WW/moc_MainDialog.cpp"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save