diff --git a/VectoCore/VectoCore/Utils/VectoCSVFile.cs b/VectoCore/VectoCore/Utils/VectoCSVFile.cs index 7148af44831517dcc8c309c6605331aa33f132fe..5f3b6d21962bdcfc1fbacbc2a6dac8b9860f47f6 100644 --- a/VectoCore/VectoCore/Utils/VectoCSVFile.cs +++ b/VectoCore/VectoCore/Utils/VectoCSVFile.cs @@ -198,20 +198,25 @@ namespace TUGraz.VectoCore.Utils var header = table.Columns.Cast<DataColumn>().Select(col => col.Caption ?? col.ColumnName); writer.WriteLine(string.Join(Delimiter, header)); - foreach (DataRow row in table.Rows) { - var row1 = row; - var formattedList = table.Columns.Cast<DataColumn>().Select(col => { - var item = row1[col]; - var decimals = (uint?)col.ExtendedProperties["decimals"]; - var outputFactor = (double?)col.ExtendedProperties["outputFactor"]; - var showUnit = (bool?)col.ExtendedProperties["showUnit"]; - - var si = item as SI; - return si != null - ? si.ToOutputFormat(decimals, outputFactor, showUnit) - : string.Format(CultureInfo.InvariantCulture, "{0}", item); - }); + var columnFormatter = new Func<SI, string>[table.Columns.Count]; + for (var i = 0; i < table.Columns.Count; i++) { + var col = table.Columns[i]; + var decimals = (uint?)col.ExtendedProperties["decimals"]; + var outputFactor = (double?)col.ExtendedProperties["outputFactor"]; + var showUnit = (bool?)col.ExtendedProperties["showUnit"]; + + columnFormatter[i] = item => item.ToOutputFormat(decimals, outputFactor, showUnit); + } + foreach (DataRow row in table.Rows) { + var items = row.ItemArray; + var formattedList = new string[items.Length]; + for (var i = 0; i < items.Length; i++) { + var si = items[i] as SI; + formattedList[i] = si != null + ? columnFormatter[i](si) + : formattedList[i] = string.Format(CultureInfo.InvariantCulture, "{0}", items[i]); + } writer.WriteLine(string.Join(Delimiter, formattedList)); } }