Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions src/ImportCsvDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include <QTextStream>
#include <QFileInfo>
#include <memory>
#include <regex>

// Enable this line to show basic performance stats after each imported CSV file. Please keep in mind that while these
// numbers might help to estimate the performance of the algorithm, this is not a proper benchmark.
Expand Down Expand Up @@ -71,11 +72,13 @@ ImportCsvDialog::ImportCsvDialog(const std::vector<QString>& filenames, DBBrowse
ui->comboSeparator->blockSignals(true);
ui->comboQuote->blockSignals(true);
ui->comboEncoding->blockSignals(true);
ui->checkReplaceNonAlnum->blockSignals(true);

ui->checkboxHeader->setChecked(Settings::getValue("importcsv", "firstrowheader").toBool());
ui->checkBoxTrimFields->setChecked(Settings::getValue("importcsv", "trimfields").toBool());
ui->checkBoxSeparateTables->setChecked(Settings::getValue("importcsv", "separatetables").toBool());
ui->checkLocalConventions->setChecked(Settings::getValue("importcsv", "localconventions").toBool());
ui->checkReplaceNonAlnum->setChecked(Settings::getValue("importcsv", "replacenonalnum").toBool());
setSeparatorChar(getSettingsChar("importcsv", "separator"));
setQuoteChar(getSettingsChar("importcsv", "quotecharacter"));
setEncoding(Settings::getValue("importcsv", "encoding").toString());
Expand All @@ -87,6 +90,7 @@ ImportCsvDialog::ImportCsvDialog(const std::vector<QString>& filenames, DBBrowse
ui->comboSeparator->blockSignals(false);
ui->comboQuote->blockSignals(false);
ui->comboEncoding->blockSignals(false);
ui->checkReplaceNonAlnum->blockSignals(false);

// Prepare and show interface depending on how many files are selected
if (csvFilenames.size() > 1)
Expand Down Expand Up @@ -193,6 +197,7 @@ void ImportCsvDialog::accept()
Settings::setValue("importcsv", "separatetables", ui->checkBoxSeparateTables->isChecked());
Settings::setValue("importcsv", "localconventions", ui->checkLocalConventions->isChecked());
Settings::setValue("importcsv", "encoding", currentEncoding());
Settings::setValue("importcsv", "replacenonalnum", ui->checkReplaceNonAlnum->isChecked());

// Get all the selected files and start the import
if (ui->filePickerBlock->isVisible())
Expand Down Expand Up @@ -425,6 +430,13 @@ sqlb::FieldVector ImportCsvDialog::generateFieldList(const QString& filename) co
{
// Take field name from CSV
fieldname = std::string(rowData.fields[i].data, rowData.fields[i].data_length);

// Replace any non-nlphanumeric characters with an underscore
if(ui->checkReplaceNonAlnum->isChecked())
{
std::regex pattern("[^a-zA-Z0-9_]");
fieldname = std::regex_replace(fieldname, pattern, "_");
}
}

// If we don't have a field name by now, generate one
Expand Down Expand Up @@ -879,6 +891,8 @@ void ImportCsvDialog::toggleAdvancedSection(bool show)
ui->checkIgnoreDefaults->setVisible(show);
ui->labelOnConflictStrategy->setVisible(show);
ui->comboOnConflictStrategy->setVisible(show);
ui->labelReplaceNonAlnum->setVisible(show);
ui->checkReplaceNonAlnum->setVisible(show);
}

char32_t ImportCsvDialog::toUtf8(const QString& s) const
Expand Down
23 changes: 23 additions & 0 deletions src/ImportCsvDialog.ui
Original file line number Diff line number Diff line change
Expand Up @@ -399,6 +399,23 @@
</property>
</widget>
</item>
<item row="13" column="1">
<widget class="QCheckBox" name="checkReplaceNonAlnum">
<property name="toolTip">
<string>Replace non-alphanumeric characters in column name with an underscore.</string>
</property>
</widget>
</item>
<item row="13" column="0">
<widget class="QLabel" name="labelReplaceNonAlnum">
<property name="text">
<string>Replace non-alphanumeric in column name</string>
</property>
<property name="buddy">
<cstring>checkReplaceNonAlnum</cstring>
</property>
</widget>
</item>
</layout>
</item>
<item>
Expand Down Expand Up @@ -793,6 +810,12 @@
</hint>
</hints>
</connection>
<connection>
<sender>checkReplaceNonAlnum</sender>
<signal>toggled(bool)</signal>
<receiver>ImportCsvDialog</receiver>
<slot>updatePreview()</slot>
</connection>
</connections>
<slots>
<slot>updatePreview()</slot>
Expand Down
Loading