C#读取CSV文件| 具有标题行和逗号分隔的值

索拉卜

下面是我的CSV结构(刚刚使用了标头行和第一个数据行。

Header 1,Header 2,Header 3,Header 4,Header5
Value 1,"Value2 a,Value 2b","Value3 a,Value 3b",Value 4,Value5

我能够读取CSV,读取标题行和数据行(假设CSV具有逗号分隔的定界符)。

很少的代码片段-

var fileContent = File.ReadAllLines(csvFile.FullName);
List<string> headerValues = null;
List<string> contentAllRows= null;
if (fileContent !=null && fileContent.Any())
{
    headerValues = fileContent.First().Split(separators).ToList();
    headerValues.ForEach(h => h = h.Trim());
    contentAllRows = fileContent.Skip(1).ToList();
}
for (int row = 0; row <= contentAllRows.Count - 1; row++)
{
    var column = contentAllRows[row].Split(separators).ToList();
}

以上代码段的输出

headerValues[0] = "Header 1"
headerValues[1] = "Header 2"
headerValues[2] = "Header 3"
headerValues[3] = "Header 4"
headerValues[4] = "Header5"

contentAllRows ="Value 1,\"Value2 a,Value 2b\",\"Value3 a,Value 3b\",Value 4,Value5"

columns[0] = "Value 1"
columns[1] = "\"Value2 a"
columns[2] = "Value 2b\""
columns[3] = "\"Value3 a"
columns[4] = "Value 3b\""
columns[5] = "Value 4"
columns[6] = "Value5"

我的预期输出(针对上述每个标头值)-

columns[0]="Value 1"
columns[1]="Value2 a,Value 2b"
columns[2]="Value3 a,Value 3b"
columns[3]=""
columns[4]="Value5"

Split()在上述情况下,对我来说似乎是个问题。对于上述情况,我们是否有一个简单的解决方案,我正在考虑在读取CSV时具有Strongly类型的对象。以上方案是否适合CSV helper模块@ https://joshclose.github.io/CsvHelper/2.x/任何建议。

乔治堡

由于您提到了使用CsvHelper的选项-使用它直接映射到POCO应该非常简单。假设一个简单的对象:

public class Foo 
{
    public string Bar1 {get;set;}
    public string Bar2 {get;set;}
    public string Bar3 {get;set;}
    public string Bar4 {get;set;}
    public string Bar5 {get;set;}
}

定义一个类图

internal sealed class MyCsvMap : ClassMap<Foo>
{
    public MyCsvMap()
    {
        Map(x => x.Bar1).Name("Header 1");
        Map(x => x.Bar2).Name("Header 2");
        Map(x => x.Bar3).Name("Header 3");
        Map(x => x.Bar4).Name("Header 4");
        Map(x => x.Bar5).Name("Header5");
    }
}

然后简单地

using (var sr = new StreamReader(csvFile.FullName))
{
    using (var csvReader = new CsvReader(sr))
    {
        csvReader.Configuration.RegisterClassMap<MyCsvMap>();
        return csvReader.GetRecords<Foo>().ToList();
    }
}

CsvHelper应该自动处理带引号的字段-Configuration.Quote的默认设置会忽略双引号内的分隔符

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C#使用LINQ读取和过滤CSV文件

Python3 读取带有 6 个值的文本文件,每行和列表行以逗号分隔

如何使用C#读取具有多行单元格的CSV文件

c#将.csv文件读取到具有重复列名的DataTable中

替换C#读取的CSV文件中的所有空值

读取具有多个标题的CSV文件

如何从 C# 中的 HttpContent 读取 csv 文件的所有行

在C ++中从文本文件中读取带有逗号的逗号分隔值

C ++:读取以;分隔的CSV文件 与\ n

如何导入没有分隔符和逗号表示缺失值的 csv 或 txt 文件

如何读取csv文件并将其放入变量中以与C#中的给定值进行比较

C#:如何停止循环遍历csv文件中的数据并存储上次读取的值

使用C#在Windows Form Application上从CSV文件读取和显示数据

使用 C# 应用程序从 CSV 文件读取和添加通用列表

如何使用 C# 从 S3 存储桶读取和处理大型文本/CSV 文件?

如何读取具有列分隔符和记录分隔符的 csv 文件

如何将仅具有空格分隔符的同时具有逗号和空格分隔符的CSV文件转换为csv

将具有键值(逗号分隔)的文件转换为仅包含值的文件

以指定顺序打印带有逗号分隔值的.csv文件

如何使用逗号分隔符和逗号分隔符读取熊猫CSV文件

读取每行用逗号分隔的单个值 c#

如何使用具有逗号分隔符和空格的pandas解析csv?

如何从文本文件中获取逗号分隔的特定行和值

从文件C#中读取具有矢量属性的对象

读取具有不同标题/列的csv日志文件

如何将具有多个标题行的csv文件读取到熊猫中?

读取和写入 csv 文件并删除逗号

c ++ csv逗号分隔文件条目,混合类型有问题

解析C#中带有标题的CSV文件