【问题标题】:CsvHelper dropping quotesCsvHelper 删除引号
【发布时间】:2019-07-12 21:26:15
【问题描述】:

我有巨大的 .csv 文件,我想将它们放入列表中,与它们在 .csv 文件中的显示完全相同

示例 .csv 文件行将是

1141825007047,2019-02-18,02:55,"US","ATL","LAX","0","IAD","ORD","UA","UA236,UA208","UA2291,UA1155",2019-03-24 14:25,2019-03-24 22:20,2019-04-14 22:45,2019-04-15 08:54

当我使用 CsvHelper 并设置如下参数时:

csv.Configuration.BadDataFound = null;
csv.Configuration.IgnoreQuotes = true;
csv.Configuration.Delimiter = ",";

然后像“UA236,UA208”这样的值被分成两列,这在我的情况下是不正确的。

如果我将参数设置为:

 csv.Configuration.BadDataFound = null;
 csv.Configuration.IgnoreQuotes = false;
 csv.Configuration.Delimiter = ",";

然后列的格式确实正确,但它会删除所有引用。 并且它是动态的东西,有些栏会有它,有些不会。

所需的输出应该是字符串列表:

1141825007047
2019-02-18
02:55
"US"
"ATL"
"LAX"
"0"
"IAD"
"ORD"
"UA"
"UA236,UA208"
"UA2291,UA1155"
2019-03-24 14:25
2019-03-24 22:20
2019-04-14 22:45
2019-04-15 08:54

根据要求,添加一些代码:

 using (StreamReader reader = new StreamReader(myStream))
                {
                    using (CsvReader csv = new CsvReader(reader))
                    {
                        csv.Configuration.BadDataFound = null;
                        csv.Configuration.IgnoreQuotes = false;
                        csv.Configuration.Delimiter = ",";

                        while (csv.Read())
                        {
                            List<string> values = new List<string>();
                            string line = string.Empty;

                            for (int i = 0; csv.TryGetField<string>(i, out string value); i++)
                            {
                                values.Add(value);
                            }
                        }
                    }
                }

【问题讨论】:

  • 是的,这就是 CSV 通常的工作方式:引号充当转义符,而不是值的一部分。如果您看不到如何配置 CsvHelper 来做您想做的事,那么您可能必须对其进行自定义。
  • 它可能将引号识别为字符串并仅导入字符串。为什么在字符串值中明确需要引号?您在哪里输出需要引号的值?似乎您会在需要的输出中添加引号。
  • 能否包含用于输出值的代码?
  • @Nanhydrin 它只是进入 List 但我已经添加了。
  • @David 引用在这里很重要,虽然有些值有引号而有些没有,但在后面的步骤中很重要

标签: c# .net csv csvhelper


【解决方案1】:

您可以通过将Delimiter 更改为除, 以外的任何字符(如\n)将IgnoreQuotes 设置为true 来获得所需的输出

csv.Configuration.IgnoreQuotes = true;
csv.Configuration.Delimiter = "\\n";

【讨论】:

猜你喜欢
  • 2022-01-12
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2019-05-28
  • 1970-01-01
  • 2010-11-15
相关资源
最近更新 更多