From e29b5a014cdd594279b4a5124eca9d1cfa67d77d Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Wed, 26 Aug 2020 15:28:39 +0300 Subject: Implemented dynamic csv file. Implemented insights export to csv. --- Software/Visual_Studio/Tango.CSV/DynamicCsvFile.cs | 100 +++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 Software/Visual_Studio/Tango.CSV/DynamicCsvFile.cs (limited to 'Software/Visual_Studio/Tango.CSV/DynamicCsvFile.cs') diff --git a/Software/Visual_Studio/Tango.CSV/DynamicCsvFile.cs b/Software/Visual_Studio/Tango.CSV/DynamicCsvFile.cs new file mode 100644 index 000000000..0c4d79949 --- /dev/null +++ b/Software/Visual_Studio/Tango.CSV/DynamicCsvFile.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.CSV +{ + public class DynamicCsvFile : IDisposable + { + private bool _isDisposed; + private Stream _stream; + private StreamWriter _writer; + private bool _disposeStream; + private bool _columnsWritten; + + public List Columns { get; set; } + + public DynamicCsvFile() + { + Columns = new List(); + } + + public DynamicCsvFile(Stream stream) : this() + { + _stream = stream; + _writer = new StreamWriter(_stream); + } + + public DynamicCsvFile(String file) : this(new FileStream(file, FileMode.Create)) + { + _disposeStream = true; + } + + private void WriteColumns() + { + if (!_columnsWritten) + { + _columnsWritten = true; + _writer.WriteLine(String.Join(",", Columns.Select(x => x.Name))); + } + } + + public void Append(params Object[] values) + { + Append((IEnumerable)values); + } + + public void Append(IEnumerable values, Func modifier = null) + { + if (modifier != null) + { + Append((IEnumerable)values, (x) => { return modifier((T)x); }); + } + else + { + Append((IEnumerable)values, null); + } + } + + public void Append(IEnumerable values, Func modifier = null) + { + if (!_columnsWritten) + { + WriteColumns(); + } + + List valuesStr = new List(); + + foreach (var value in values) + { + Object finalValue = value; + + if (modifier != null) + { + finalValue = modifier(finalValue); + } + + valuesStr.Add(finalValue != null ? finalValue.ToString() : String.Empty); + } + + _writer.WriteLine(String.Join(",", valuesStr)); + } + + public void Dispose() + { + if (!_isDisposed) + { + _isDisposed = true; + + if (_disposeStream) + { + _stream?.Dispose(); + } + } + } + } +} -- cgit v1.3.1