我必须解析(C#)一个 .CSV
文件,其中包含变量“宽度”和 2 行标题信息(第一行是名称,第二行是单位)。
数据如下:
示例1.CSV:
"timestamp","NAME_1","NAME_2","NAME_3","NAME_4"
"ms","unit_1","unit_2","unit_3","unit_4"
0.01,1.23,4.56,7.89,0.12
0.02,1.23,4.66,7.89,0.11
0.03,1.23,4.76,7.89,0.11
0.04,56.23,4.86,7.89,0.12
示例2.CSV:
"timestamp","NAME_1","NAME_2","NAME_3","NAME_4","NAME_5",...,"NAME_N"
"ms","unit_1","unit_2","unit_3","unit_4","unit_5",...,"unit_N"
0.01,1.23,4.56,7.89,0.12,0.13,...,0.27
0.02,1.23,4.66,7.89,0.12,0.13,...,0.22
0.03,1.23,4.76,7.89,0.11,0.13,...,0.24
0.04,56.23,4.86,7.89,0.12,0.13,...,0.29
N 是表格的“宽度”(值最大可达 128 或更大)。我打算使用Filehelpers .
我想过使用[FieldOptional()]
- 但这变得非常不方便,特别是当“宽度”可变时......
我当前的尝试看起来像
[IgnoreFirst(2)]
[DelimitedRecord(",")]
public sealed class LogData
{
public Double ts;
public Double Field1;
[FieldNullValue(0.0)]
[FieldOptional()]
public Double Field2;
[FieldNullValue(0.0)]
[FieldOptional()]
public Double Field3;
// and so on
}
任何有关“如何解决可变宽度”的帮助 - 以更优雅的方式解决问题 - 提前非常感谢!
本
最佳答案
如果您打算将文件转换为 DataTable,有一个更好的选择
请使用FileHelpers库的CsvEngine。请参阅下面的代码片段:
using (MemoryStream stream = new MemoryStream(_fileContent)) //file content can be file as byte array
{
TextReader reader = new StreamReader(stream);
string path = "C:\\Sample.csv";
CsvEngine csvEngine = new CsvEngine("Model", ',', path);
var dataTable = csvEngine.ReadStreamAsDT(reader);
//Do whatever with dataTable
}
这里的示例文件可以是 csv 文件,也可以是包含要处理的 csv 文件 header 的文本文件。 DataTable 的列将根据示例文件的标题命名
干杯
关于c# - filehelpers - 解析可变行长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23108931/