diff options
Diffstat (limited to 'Software/Visual_Studio/Tango.CSV/DynamicCsvFile.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.CSV/DynamicCsvFile.cs | 100 |
1 files changed, 100 insertions, 0 deletions
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<DynamicCsvFileColumn> Columns { get; set; } + + public DynamicCsvFile() + { + Columns = new List<DynamicCsvFileColumn>(); + } + + 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<T>(IEnumerable<T> values, Func<T, Object> modifier = null) + { + if (modifier != null) + { + Append((IEnumerable)values, (x) => { return modifier((T)x); }); + } + else + { + Append((IEnumerable)values, null); + } + } + + public void Append(IEnumerable values, Func<Object, Object> modifier = null) + { + if (!_columnsWritten) + { + WriteColumns(); + } + + List<String> valuesStr = new List<string>(); + + 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(); + } + } + } + } +} |
