【发布时间】: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 引用在这里很重要,虽然有些值有引号而有些没有,但在后面的步骤中很重要