diff --git a/src/Data/Text/DelimitedReader.cs b/src/Data/Text/DelimitedReader.cs index df99109e..90bf66d8 100644 --- a/src/Data/Text/DelimitedReader.cs +++ b/src/Data/Text/DelimitedReader.cs @@ -82,8 +82,9 @@ namespace MathNet.Numerics.Data.Text var regex = delimiter == @"\s" ? RegexCache.GetOrAdd(delimiter, d => new Regex(WhiteSpaceRegexTemplate, RegexOptions.Compiled)) : RegexCache.GetOrAdd(delimiter, d => new Regex(string.Format(RegexTemplate, d), RegexOptions.Compiled)); - - var data = new List(); + + var parse = CreateParser(formatProvider); + var data = new List(); // max is used to supports files like: // 1,2 @@ -111,14 +112,14 @@ namespace MathNet.Numerics.Data.Text if (delimiter == @"\s") { - var row = (from Match match in matches where match.Length > 0 select match.Value).ToArray(); + var row = (from Match match in matches where match.Length > 0 select parse(match.Value.StripOffQuotes())).ToArray(); max = Math.Max(max, row.Length); data.Add(row); } else { var offset = 0; - var row = new List(); + var row = new List(); foreach (var value in (from Match match in matches where match.Length > 0 select match.Value)) { @@ -128,12 +129,12 @@ namespace MathNet.Numerics.Data.Text { for (var i = offset; i < delimterCount; i++) { - row.Add(mvStr); + row.Add(parse(mvStr.StripOffQuotes())); } } else { - row.Add(string.IsNullOrWhiteSpace(value) ? mvStr : value); + row.Add(parse((string.IsNullOrWhiteSpace(value) ? mvStr : value).StripOffQuotes())); } offset = 1; } @@ -145,7 +146,6 @@ namespace MathNet.Numerics.Data.Text line = reader.ReadLine(); } - var parse = CreateParser(formatProvider); var matrix = sparse ? Matrix.Build.Sparse(data.Count, max, mv) : Matrix.Build.Dense(data.Count, max, mv); var storage = matrix.Storage; @@ -154,9 +154,8 @@ namespace MathNet.Numerics.Data.Text var row = data[i]; for (var j = 0; j < row.Length; j++) { - // strip off quotes (TODO: can we replace this with trimming?) - var value = row[j].Replace("'", string.Empty).Replace("\"", string.Empty); - storage.At(i, j, parse(value)); + var value = row[j]; + storage.At(i, j, value); } } @@ -303,5 +302,13 @@ namespace MathNet.Numerics.Data.Text return delimiter; } } + + /// + /// strip off quotes (TODO: can we replace this with trimming?) + /// + static string StripOffQuotes(this string obj) + { + return obj.Replace("'", string.Empty).Replace("\"", string.Empty); + } } }