gpt4 book ai didi

c# - 使用 CsvHelper 库解析具有特定列分隔符和字符串附件的 csv 文件

转载 作者:行者123 更新时间:2023-12-05 08:42:59 27 4
gpt4 key购买 nike

我在我的 .NET C# 项目中使用这个 http://joshclose.github.io/CsvHelper/ 很棒的库来满足我的 CSV 解析要求。

如果我有一个如下所示的 CSV 文件:

SupplierSku,MappedSageSku
EG1234,EGCD1234
EG4567,EG-XZ567

我通常像这样创建一个 DTO 类:

public class SkuMapping
{
public string SupplierSku { get; set; }
public string MappedSageSku { get; set; }
}

并像这样解析 csv 文件:

// Open & parse selected csv file
var csvReader = new CsvReader(File.OpenText(selectSkuMapping.Text));
var skuMappings = csvReader.GetRecords<SkuMapping>();

// Do something with each row
foreach (SkuMapping skuMapping in skuMappings)
{
// ...
}

这对于预定义/结构化 CSV 文件非常有效。

我现在有解析任意 CSV 文件的要求,它们可能包含各种 column delimiter & string enclosure 并且 csv 上的确切列数未知,但是包含我需要的数据的列索引是已知的。

示例#1

PartNumb,InStock,PrGroup
"A-X-1230",Y,103
"B-DD-1231",Y,103

在哪里; 列定界符 = , and string enclosure = "

我需要的数据:列索引 0 (PartNumb) 和列索引 1 (InStock)

示例#2

SupplierSku,CatIds,StockStatus,Active
%ADA-BB-124%|4,5,1|%AV%|1
%XAS-E4-S11%|97,41,65|%OS%|0

在哪里; 列定界符 = | and string enclosure = %

我需要的数据:列索引 0 (SupplierSku) 和列索引 2 (StockStatus)


鉴于上述情况,使用 CsvHelper 库解析任意 csv 文件的最佳方法是什么(其中 column delimiterstring enclosure列索引 是已知的)?我还需要跳过 csv 上第一行的选项(有时 csv 包含标题行,有时不包含)。

最佳答案

这似乎有效,使用 CsvHelper:

var textToParse = @"SupplierSku,CatIds,StockStatus,Active
%ADA-BB-124%|4,5,1|%AV%|1
%XAS-E4-S11%|97,41,65|%OS%|0";

string supplierSku;
string stockStatus;

using (var stringReader = new StringReader(textToParse))
{
using (var reader = new CsvReader(stringReader))
{
reader.Configuration.Delimiter = ",";
reader.Configuration.HasHeaderRecord = true; // If there is no header, set to false.

while (reader.Read())
{
supplierSku = reader.GetField("SupplierSku"); // Or reader.GetField(0)
stockStatus = reader.GetField("StockStatus"); // Or reader.GetField(2)

Console.WriteLine($"SKU: {supplierSku}; Status: {stockStatus}");
}
}
}

但是,它不会自动修剪/删除引号字符 - 您可以使用 Trim()Substring() 自己轻松完成。涉及的手动工作量稍多,但仍然比手动操作容易。

关于c# - 使用 CsvHelper 库解析具有特定列分隔符和字符串附件的 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35652219/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com