![](/img/trans.png)
[英]Validate a certain column in a csv file data using textfieldparser in c#
[英]Get the values for rows for specific columns using TextFieldParser and c# from a csv file
我正在嘗試將 TextFieldParser 與 c# 一起使用來解析 csv 文件並獲取特定列的行值。
例如 csv 與..
Name,Age,Color,Sport
Tom,24,Blue,Football
Dick,21,Red,Hockey
Jane,19,Green,Basketball
string fullpath = "C:\myfile.csv"
using (TextFieldParser parser = new TextFieldParser(fullPath))
{
parser.SetDelimiters(",");
while (!parser.EndOfData)
{
// Processing row
string[] fields = parser.ReadFields();
int sportcount = 0;
for (int i = 0; i < fields.Length; ++i)
{
string column = fields[i];
DataColumn datecolumn = new DataColumn(column);
datecolumn.AllowDBNull = true;
if (column.Contains("Sport"))
{
Console.WriteLine("Found Sport at {0}", i);
sportcount = i;
}
}
string sportCol = fields[sportCount];
// if that column contains a value
if (!(sportCol.Equals("")) {
// ignore the column header row
if (parser.LineNumber > 2) {
if (sportCol.Equals("Football")) {
Console.WriteLine("Found somebody playing football");
}
}
}
}
}
所以理想情況下,我想要一個包含 csv 文件中所有運動的列表或數組。 所以它應該包含(足球,曲棍球,籃球)。 請記住,實際的 csv 文件有數百列和數千行。
更新:我已將以上內容更新為適合我的內容。 通過在找到“運動”列時將 i 分配給變量,然后我可以在 csv 文件中搜索該列的值。
我想通過“嘗試”你的意思是你遇到過可以讀取 csv 的東西,而且你並不拘泥於它。 因此,我想指出如果您改為使用 CsvHelper 讀取此文件,它會是什么樣子:
public class Person
{
public int Age { get; set; }
public string Name { get; set; }
public string Color { get; set; }
public string Sport { get; set; }
}
//in a method somewhere
using var reader = new StreamReader("path\\to\\file.csv"));
using var csv = new CsvReader(reader, CultureInfo.InvariantCulture));
foreach(var person in csv.GetRecords<Person>()){
//put code here
Console.WriteLine(person.Name);
}
實際的 csv 文件有數百列
您需要為每一列創建一個屬性
理想情況下,我想要一個包含 csv 文件中所有運動項目的列表或數組
每項運動的獨特清單?
而是這樣做:
csv.GetRecords<Person>().Select(p => p.Sport).Distinct().ToArray()
請記住,以這種方式讀取 CSV 是僅向前的,因此您不能在不將讀取器重置為文件開頭的情況下第二次調用 getRecords。 也許那時如果你還有更多事情要做,你應該:
var people = csv.GetRecords<Person>().ToList();
將其全部加載到 memory 然后你可以重復查詢:
people.Sum(p => p.Age); //sum of all ages
people.Avg(p => p.Age); //avg age
people.Count(p => p.Color == "Red"); //count of reds
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.