我有一个基本上看起来像这样的 CSV 文件:
TransactionID ProfileID Date // more columns here...
somevalue 123123123 somedate
somevalue 123123123 somedate
somevalue 123123123 somedate
somevalue 123123123 somedate
somevalue 123123123 somedate
我想从 CSV 文件的所有这些列中仅提取特定列,即 ProfileID 和 Date,方法是将其映射到现有类,如下所示:
public class MyMappedCSVFile
{
public string ProfileID { get; set; }
public string Date { get; set; }
}
或者将其存储在字典集合中?
我试过这样的:
public static List<string> ReadInCSV(string absolutePath)
{
List<string> result = new List<string>();
string value;
using (TextReader fileReader = File.OpenText(absolutePath))
{
var csv = new CsvReader(fileReader);
csv.Configuration.HasHeaderRecord = false;
while (csv.Read())
{
for (int i = 0; csv.TryGetField<string>(i, out value); i++)
{
result.Add(value);
}
}
}
return result;
}
但这会从 CSV 文件中删除所有内容,实际上是单个列表中的所有内容,这不是我想要的...
有人可以帮我解决这个问题吗?
最佳答案
标题在这段代码中仍然要跳过,但是通过这段代码,您可以选择要提取的列。如果您使用 StreamReader,它可能会快得多。 您将需要一个对象的构造函数。
var temp = File.ReadAllLines(@"C:\myFile.csv");
public List<MyMappedCSVFile>() myExtraction = new List<MyMappedCSVFile>();
foreach(string line in temp)
{
var delimitedLine = line.Split('\t'); //set ur separator, in this case tab
myExtraction.Add(new MyMappedCSVFile(delimitedLine[0], delimitedLine[3]));
}
对象代码:
public class MyMappedCSVFile
{
public string ProfileID { get; set; }
public string Date { get; set; }
public MyMappedCSVFile(string profile, string date)
{
ProfileID = profile;
Date = date;
}
}
关于c# - 仅从多个 CSV 文件中读取特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46932863/