[英]C# Reading CSV File | with header Row and Comma Separated Values
下面是我的 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 時使用強類型對象。 上述場景是否適合 CSV 助手模塊 @ 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的默認設置會忽略雙引號內的分隔符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.