【发布时间】:2021-10-09 17:01:33
【问题描述】:
我有一个从文件读取到列表中的列标题列表:
// Read column headers from text file
List<string> colHeads = new List<string>();
string[] lines = File.ReadAllLines("C:\\DATA\\MLData\\colHeads.txt");
string[] spl = new string[100];
foreach (string line in lines)
{
spl = line.Split('=');
colHeads.Add(spl[0].Trim());
}
然后我想读取一个 CSV 文件,但只读取列表中的列:
// Read CSV file
string[] lines = File.ReadAllLines("C:\\DATA\\MLData\hist.csv");
string[] spl = new string[500];
foreach (string line in lines)
{
spl = line.Split(',');
var rec = new Record()
{
Name = spl[1],
ident = float.Parse(spl[4], CultureInfo.InvariantCulture.NumberFormat),
location = float.Parse(spl[5], CultureInfo.InvariantCulture.NumberFormat),
...
...
};
}
colHeads.txt 示例....
Name
ident
location
...
hist.csv 示例...
Name,yob,ident,level,location,score1
John B,1981,23,3,GB,54
hist.csv 中的列比 colHeads.txt 多,因此我需要一种按列名而不是列号读取 csv 文件的方法,忽略不在列表中的列。我分配的变量与列名完全匹配。
【问题讨论】:
-
如果 Record 是一个类或结构,其字段或属性名称与 excel 列名称相同,您可以使用反射动态分配它
-
您听说过像CSV Helper 这样的库吗?您可以将线条作为对象来处理,并做很多工作人员。
-
CSV 文件的第一行是否包含标题?
-
向我们展示 colHeads.txt 和几行 hist.csv。
-
Bijan,是的,它是一个类并且名称匹配,我将如何使用“反射”? Alexander:是的,我已经更新了问题。