c# - filehelpers - 解析可变行长度

标签 c# csv width line filehelpers

我必须解析(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/

相关文章:

c# - 使用 async-await 进行数据库查询——这如何节省线程?

c# - .NET 转换通用列表

python - 使用 pandas 解析 csv 与将数据存储在数据库中(sqlite 或 mssql)

css - 试图在每一行显示 3 个元素

html - 使用 Bootstrap 的全宽导航栏

c# - 无法为 AuthenticateAsServer 指定证书链?

python - csv.Error : iterator should return strings, 不是字节

api - 将Stripe API中的数据写入golang的CSV文件中

canvas - 如何更改画架中的位图宽度和高度?

c# - 将字符串值转换为十六进制十进制