我从csv format.i.e http://iapp250.dev.sx.com:5011/a.csv?select[>date]from employee
但是表中的一些列包含逗号和双引号,并且在读取csv之后它变为逗号分隔的字符串。因此,当我反序列化时,我得到索引超出绑定的异常。
我决定在阅读一些帖子之后使用Lumenworks csv阅读器。我以下面的方式进行但仍然无法修复它。请找到下面的代码片段。
List<List<string>> LineFields = new List<List<string>>();
using(var reader = new StreamReader(siteminderresponse.getResponseStream())
{
Char quotingCharacter = '\0';
Char escapeCharacter = quotingCharacter;
Char delimiter = '|';
using (var csv = new CsvReader(reader, true, delimiter, quotingCharacter, escapeCharacter, '\0', ValueTrimmingOptions.All))
{
csv.DefaultParseErrorAction = ParseErrorAction.ThrowException;
//csv.ParseError += csv_ParseError;
csv.SkipEmptyLines = true;
while (csv.ReadNextRecord())
{
List<string> fields = new List<string>(csv.FieldCount);
for (int i = 0; i < csv.FieldCount; i++)
{
try
{
string field = csv[i];
fields.Add(field.Trim('"'));
} catch (MalformedCsvException ex)
{
throw;
}
}
LineFields Add(fields);
}
}
}
最终结果是我得到逗号分隔的字段,如
1,16:00:01,BUY,-2,***ROBERTS, K***.
请参阅ROBERTS,K这是一个单列值,现在以逗号分隔,因为我的序列化失败。
答案 0 :(得分:0)
这似乎是您格式化查询结果的方式的问题。如果你想要&#34; ROBERTS,K&#34;要被CSV读取器读取为单个字段,您需要在&#34; ROBERTS,K&#34;在您输入CSV阅读器中。 LumenWorks只是在做它应该做的事情。
同样,如果您在解析的字段中需要文字双引号,则需要使用另一个双引号来转义它们。因此,要将其正确表达为单个字段:
Roberts, K is 6" taller than I am
...您需要将其传递给CSV解析器:
"Roberts, K is 6"" taller than I am"