Skip to content

Commit

Permalink
Progressbar for Text-Import
Browse files Browse the repository at this point in the history
  • Loading branch information
Kirdock committed Sep 9, 2019
1 parent c3c7123 commit 2c697af
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 33 deletions.
50 changes: 31 additions & 19 deletions DataTableConverter/Assisstant/ImportHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class ImportHelper : MessageHandler
internal static readonly string ExcelExt = "*.xlsx;*.xlsm;*.xlsb;*.xltx;*.xltm;*.xls;*.xlt;*.xls;*.xml;*.xml;*.xlam;*.xla;*.xlw;*.xlr;";


internal static DataTable ImportFile(string file, bool multipleFiles, Dictionary<string, ImportSettings> fileImportSettings, ContextMenuStrip ctxRow, ProgressBar progressBar)
internal static DataTable ImportFile(string file, bool multipleFiles, Dictionary<string, ImportSettings> fileImportSettings, ContextMenuStrip ctxRow, ProgressBar progressBar, ImportSettings settings = null)
{
string filename = Path.GetFileName(file);
string extension = Path.GetExtension(file).ToLower();
Expand All @@ -52,19 +52,21 @@ internal static DataTable ImportFile(string file, bool multipleFiles, Dictionary
}
else
{
if (fileImportSettings != null && fileImportSettings.TryGetValue(extension, out ImportSettings settings))
if (fileImportSettings != null && fileImportSettings.ContainsKey(extension) || settings != null)
{
settings = settings ?? fileImportSettings[extension];

if (settings.Values != null)
{
table = OpenTextFixed(file, settings.Values, settings.Headers, settings.CodePage);
table = OpenTextFixed(file, settings.Values, settings.Headers, settings.CodePage,false, progressBar);
}
else if (settings.Separator != null)
{
table = OpenText(file, settings.Separator, settings.CodePage, settings.ContainsHeaders, settings.Headers.ToArray());
table = OpenText(file, settings.Separator, settings.CodePage, settings.ContainsHeaders, settings.Headers.ToArray(), false, progressBar);
}
else
{
table = OpenTextBetween(file, settings.CodePage, settings.TextBegin, settings.TextEnd, settings.ContainsHeaders, settings.Headers.ToArray());
table = OpenTextBetween(file, settings.CodePage, settings.TextBegin, settings.TextEnd, settings.ContainsHeaders, settings.Headers.ToArray(), false, progressBar);
}

}
Expand All @@ -77,7 +79,8 @@ internal static DataTable ImportFile(string file, bool multipleFiles, Dictionary
{
fileImportSettings.Add(extension, form.ImportSettings);
}
table = form.DataTable;
form.Dispose();
return ImportFile(file, multipleFiles, fileImportSettings, ctxRow, progressBar, form.ImportSettings);
}
form.Dispose();
}
Expand Down Expand Up @@ -108,7 +111,7 @@ internal static OpenFileDialog GetOpenFileDialog(bool status)
};
}

internal static DataTable OpenText(string path, string separator, int codePage, bool containsHeaders, object[] headers, bool isPreview = false)
internal static DataTable OpenText(string path, string separator, int codePage, bool containsHeaders, object[] headers, bool isPreview, ProgressBar progressBar)
{
DataTable dt = new DataTable();

Expand All @@ -118,7 +121,7 @@ internal static DataTable OpenText(string path, string separator, int codePage,
if (containsHeaders)
{
skip = 1;
List<string> list = File.ReadLines(path, Encoding.GetEncoding(codePage)).Take(1)
IEnumerable<string> list = File.ReadLines(path, Encoding.GetEncoding(codePage)).Take(1)
.SelectMany(x => x.Split(new string[] { separator }, StringSplitOptions.None))
.Select(ln => ln.Trim()).ToList();

Expand All @@ -138,11 +141,11 @@ internal static DataTable OpenText(string path, string separator, int codePage,

if (isPreview)
{
InsertTextIntoDataTable(File.ReadLines(path, Encoding.GetEncoding(codePage)).Take(4), dt, skip, separator);
InsertTextIntoDataTable(File.ReadLines(path, Encoding.GetEncoding(codePage)).Take(4), dt, skip, separator, null);
}
else
{
InsertTextIntoDataTable(File.ReadLines(path, Encoding.GetEncoding(codePage)), dt, skip, separator);
InsertTextIntoDataTable(File.ReadLines(path, Encoding.GetEncoding(codePage)), dt, skip, separator, progressBar);
}

//File.ReadLines doesn't read all lines, it returns a IEnumerable, and lines are lazy evaluated,
Expand All @@ -160,11 +163,13 @@ internal static DataTable OpenText(string path, string separator, int codePage,
return dt;
}

private static void InsertTextIntoDataTable(IEnumerable<string> enumerable, DataTable dt, int skip, string separator)
private static void InsertTextIntoDataTable(IEnumerable<string> enumerable, DataTable dt, int skip, string separator, ProgressBar progressBar)
{
enumerable.Skip(skip)
.Select(x => x.Split(new string[] { separator }, StringSplitOptions.None))
.ToList()
IEnumerable<string[]> enumerableArray = enumerable.Skip(skip)
.Select(x => x.Split(new string[] { separator }, StringSplitOptions.None));

progressBar?.StartLoadingBar(enumerableArray.Count());
enumerableArray.ToList()
.ForEach(line =>
{
var temp = line.Select(ln => ln.ToString().Trim()).ToArray();
Expand All @@ -174,10 +179,11 @@ private static void InsertTextIntoDataTable(IEnumerable<string> enumerable, Data
dt.TryAddColumn("Spalte" + dt.Columns.Count);
}
dt.Rows.Add(temp);
progressBar?.UpdateLoadingBar();
});
}

internal static DataTable OpenTextBetween(string path, int codePage, string begin, string end, bool containsHeaders, object[] headers, bool isPreview = false)
internal static DataTable OpenTextBetween(string path, int codePage, string begin, string end, bool containsHeaders, object[] headers, bool isPreview, ProgressBar progressBar)
{
DataTable dt = new DataTable();
try
Expand Down Expand Up @@ -209,8 +215,10 @@ internal static DataTable OpenTextBetween(string path, int codePage, string begi
}
else
{
var list = File.ReadLines(path, Encoding.GetEncoding(codePage)).Skip(skip);
lines = File.ReadLines(path, Encoding.GetEncoding(codePage)).Skip(skip).ToArray();
}
progressBar?.StartLoadingBar(lines.Length);

foreach(string line in lines)
{
Expand All @@ -219,6 +227,7 @@ internal static DataTable OpenTextBetween(string path, int codePage, string begi
{
dt.TryAddColumn("Spalte" + dt.Columns.Count);
}
progressBar?.UpdateLoadingBar();
dt.Rows.Add(row);
}
}
Expand Down Expand Up @@ -618,7 +627,7 @@ private static bool EndOfMultiCell(string content, int i)
return content[i] == '\"' && ((i + 1) == content.Length || ((i + 1) < content.Length && (content[i + 1] == '\r' || content[i + 1] == '\t')));
}

internal static DataTable OpenTextFixed(string path, List<int> config, List<string> header, int encoding, bool isPreview = false)
internal static DataTable OpenTextFixed(string path, List<int> config, List<string> header, int encoding, bool isPreview, ProgressBar progressBar)
{
DataTable dt = new DataTable();
if (header == null || config == null || header.Count == 0 || config.Count == 0)
Expand All @@ -627,11 +636,14 @@ internal static DataTable OpenTextFixed(string path, List<int> config, List<stri
}
try
{

header.ForEach(x => dt.TryAddColumn(x.ToString()));

StreamReader stream = new StreamReader(path, Encoding.GetEncoding(encoding));


FileInfo info = new FileInfo(path);
progressBar?.StartLoadingBar((int) (info.Length/config.Sum()));


while (!stream.EndOfStream && (!isPreview || dt.Rows.Count < 3))
{
string[] itemArray = new string[header.Count];
Expand All @@ -647,7 +659,7 @@ internal static DataTable OpenTextFixed(string path, List<int> config, List<stri

itemArray[i] = new string(body);
}

progressBar?.UpdateLoadingBar();
dt.Rows.Add(itemArray);

int charCode;
Expand Down
8 changes: 4 additions & 4 deletions DataTableConverter/Extensions/ProgressBarExtension.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ internal static void StartLoadingBar(this ProgressBar progressBar, int max)
progressBar.Maximum = max;
}));
}
catch (Exception ex)
catch
{
ErrorHelper.LogMessage(ex, false);

}
}

Expand All @@ -36,9 +36,9 @@ internal static void UpdateLoadingBar(this ProgressBar progressBar)
progressBar.Value++;
}));
}
catch (Exception ex)
catch
{
ErrorHelper.LogMessage(ex, false);

}
}
}
Expand Down
23 changes: 13 additions & 10 deletions DataTableConverter/View/TextFormat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,7 @@ private void btnAcceptSeparate_Click(object sender, EventArgs e)
{
string separator = null;
object[] headers = GetHeaders();
bool valid = false;
if(rbSep.Checked && txtSeparator.Text != null && txtSeparator.Text.Length > 0)
{
separator = txtSeparator.Text;
Expand All @@ -230,16 +231,18 @@ private void btnAcceptSeparate_Click(object sender, EventArgs e)
else if (rbBetween.Checked && checkBetweenText())
{
ImportSettings = new ImportSettings(getCodePage(), txtBegin.Text, txtEnd.Text, cbContainsHeaders.Checked,headers);
DataTable = ImportHelper.OpenTextBetween(path, getCodePage(), txtBegin.Text, txtEnd.Text, cbContainsHeaders.Checked, headers);
valid = true;
//DataTable = ImportHelper.OpenTextBetween(path, getCodePage(), txtBegin.Text, txtEnd.Text, cbContainsHeaders.Checked, headers);
}

if(separator != null)
{
valid = true;
ImportSettings = new ImportSettings(separator, getCodePage(), cbContainsHeaders.Checked, headers);
DataTable = ImportHelper.OpenText(path, separator, getCodePage(), cbContainsHeaders.Checked, headers);
//DataTable = ImportHelper.OpenText(path, separator, getCodePage(), cbContainsHeaders.Checked, headers);
}

if(DataTable != null)
if(valid)
{
DialogResult = DialogResult.OK;
}
Expand All @@ -254,15 +257,15 @@ private void btnAcceptFixed_Click(object sender, EventArgs e)
{
getDataGridViewItems(out List<int> values, out List<string> headers);
ImportSettings = new ImportSettings(values, headers, getCodePage());
DataTable = ImportHelper.OpenTextFixed(path, values, headers, (cmbEncoding.SelectedItem as EncodingInfo).CodePage);
//DataTable = ImportHelper.OpenTextFixed(path, values, headers, (cmbEncoding.SelectedItem as EncodingInfo).CodePage, false, null);
}

private void dgvSetting_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
// sync preview
ViewHelper.EndDataGridViewEdit(dgvSetting);
getDataGridViewItems(out List<int> values, out List<string> headers);
dgvPreview.DataSource = ImportHelper.OpenTextFixed(path, values, headers, (cmbEncoding.SelectedItem as EncodingInfo).CodePage, true);
dgvPreview.DataSource = ImportHelper.OpenTextFixed(path, values, headers, (cmbEncoding.SelectedItem as EncodingInfo).CodePage, true, null);
}

private bool checkFromToEntered(DataGridViewCellValidatingEventArgs e)
Expand Down Expand Up @@ -308,7 +311,7 @@ private void txtSeparator_TextChanged(object sender, EventArgs e)
{
if (txtSeparator.Text != null && txtSeparator.Text.Length > 0)
{
dgvPreview.DataSource = ImportHelper.OpenText(path, txtSeparator.Text, getCodePage(), cbContainsHeaders.Checked, GetHeaders(), true);
dgvPreview.DataSource = ImportHelper.OpenText(path, txtSeparator.Text, getCodePage(), cbContainsHeaders.Checked, GetHeaders(), true, null);
}
}

Expand Down Expand Up @@ -500,23 +503,23 @@ private void radioButton2_CheckedChanged(object sender, EventArgs e)
dgvPreview.DataSource = null;
if (txtSeparator.ReadOnly = txtBegin.ReadOnly = txtEnd.ReadOnly = rbTab.Checked)
{
dgvPreview.DataSource = ImportHelper.OpenText(path, "\t", getCodePage(), cbContainsHeaders.Checked, (dgvHeaders.DataSource as DataTable)?.ColumnValues(0) ?? new object[0], true);
dgvPreview.DataSource = ImportHelper.OpenText(path, "\t", getCodePage(), cbContainsHeaders.Checked, (dgvHeaders.DataSource as DataTable)?.ColumnValues(0) ?? new object[0], true, null);
}

else if ((txtBegin.ReadOnly = txtEnd.ReadOnly = rbSep.Checked))
{
txtSeparator.ReadOnly = false;
if (txtSeparator.Text != null && txtSeparator.Text.Length > 0)
{
dgvPreview.DataSource = ImportHelper.OpenText(path, txtSeparator.Text, getCodePage(), cbContainsHeaders.Checked, GetHeaders(), true);
dgvPreview.DataSource = ImportHelper.OpenText(path, txtSeparator.Text, getCodePage(), cbContainsHeaders.Checked, GetHeaders(), true, null);
}
}
else if (txtSeparator.ReadOnly = rbBetween.Checked)
{
txtBegin.ReadOnly = txtEnd.ReadOnly = false;
if (checkBetweenText())
{
dgvPreview.DataSource = ImportHelper.OpenTextBetween(path, getCodePage(), txtBegin.Text, txtEnd.Text, cbContainsHeaders.Checked, GetHeaders(), true);
dgvPreview.DataSource = ImportHelper.OpenTextBetween(path, getCodePage(), txtBegin.Text, txtEnd.Text, cbContainsHeaders.Checked, GetHeaders(), true,null);
}
}
}
Expand Down Expand Up @@ -573,7 +576,7 @@ private void txtBegin_TextChanged(object sender, EventArgs e)
{
if (checkBetweenText())
{
dgvPreview.DataSource = ImportHelper.OpenTextBetween(path, getCodePage(), txtBegin.Text, txtEnd.Text, cbContainsHeaders.Checked, GetHeaders(), true);
dgvPreview.DataSource = ImportHelper.OpenTextBetween(path, getCodePage(), txtBegin.Text, txtEnd.Text, cbContainsHeaders.Checked, GetHeaders(), true, null);
}
else
{
Expand Down

0 comments on commit 2c697af

Please sign in to comment.