【发布时间】:2023-01-26 22:02:38
【问题描述】:
假设以下是我的 CSV 文件:
Step,Magnetization,Energy
1,0.009375,12
2,0.009375,12
3,0.009375,12
4,0.009375,12
5,0.009375,12
我想读取文件并创建三个单独的列表或数组。
所以,我写了下面的代码:
class Program
{
static void Main(string[] args)
{
string csvFilePath = @"ising.csv";
CsvConfiguration myConfig = new CsvConfiguration(CultureInfo.CurrentCulture)
{
Delimiter = ","
};
using (var reader = new StreamReader(csvFilePath))
using (var csv = new CsvReader(reader, myConfig))
{
List<double> xAxisForSteps = new List<double>();
List<double> yAxisForMagnetization = new List<double>();
List<double> yAxisForEnergy = new List<double>();
while (csv.Read())
{
int step = csv.GetField<int>("Step");
double magnetization = csv.GetField<double>("Magnetization");
int energy = csv.GetField<int>("Energy");
xAxisForSteps.Add(step);
yAxisForMagnetization.Add(magnetization);
yAxisForEnergy.Add(energy);
}
}
}
}
这给出了以下错误:
An unhandled exception of type 'CsvHelper.ReaderException' occurred in CsvHelper.dll
Additional information: The header has not been read.
You must call ReadHeader() before any fields can be retrieved by name.
IReader state:
ColumnCount: 0
CurrentIndex: -1
HeaderRecord:
IParser state:
ByteCount: 0
CharCount: 27
Row: 1
RawRow: 1
Count: 3
RawRecord:
Step,Magnetization,Energy
如何解决?
编辑:
调用csv.ReadHeader() 后出现以下错误:
An unhandled exception of type 'CsvHelper.ReaderException' occurred in CsvHelper.dll
Additional information: No header record was found.
IReader state:
ColumnCount: 0
CurrentIndex: -1
HeaderRecord:
IParser state:
ByteCount: 0
CharCount: 0
Row: 0
RawRow: 0
Count: 0
RawRecord:
【问题讨论】:
-
正如错误所述,csv 文件中的第一行是标题。 CsvHelper 将第一行视为标题,您必须先调用
ReadHeader(),然后助手才能检索其后的行。 -
您是否尝试过错误消息中建议的解决方案?
You must call ReadHeader() before any fields can be retrieved by name -
@Roe,我应该在哪里称呼它?在 while 循环中?
-
当错误消息中清楚地给出答案时,我感到很惊讶,但如果用户的声誉超过 16K,则更是如此。 :P 你试过Getting Started guide了吗?表头应该只读一次,当然不是每一行都读;那没有意义。
-
@JonasH,是的。我很困惑在哪里调用它。