如何绕过逗号,使用Lumenworks双引号

时间:2015-09-21 18:09:58

标签: c# csv lumenworks

我从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这是一个单列值,现在以逗号分隔,因为我的序列化失败。

1 个答案:

答案 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"