如何使用具有不同 headers 的多个记录类型的 Filehelpers 附加到 CSV 文件?
How do I append to a CSV file using Filehelpers with multiple record types that have distinct headers?
如问题所述,我试图使用 FileHelpers 库生成一个 CSV 文件和一个报告文件。报告文件可能具有不同的(但有限的)inputs/data 结构,因此我的 CSV 生成方法未明确键入。 CSV 包含所有报告数据以及报告的 header 信息。对于我的 header,我使用 class object 属性,因为它们的描述性足以满足我的最终使用目的。
我的相关代码片段如下:
// File location, where the .csv goes and gets stored.
string filePath = Path.Combine(destPath, fileName);
// First, write report header details based on header list
Type type = DetermineListType(headerValues);
var headerEngine = new FileHelperEngine(type);
headerEngine.HeaderText = headerEngine.GetFileHeader();
headerEngine.WriteFile(filePath, (IEnumerable<object>)headerValues);
// Next, append the report data below the report header data.
type = DetermineListType(reportData);
var reportDataEngine = new FileHelperEngine(type);
reportDataEngine.HeaderText = reportDataEngine.GetFileHeader();
reportDataEngine.AppendToFile(filePath, (IEnumerable<object>)reportData);
执行此操作时,CSV 已成功生成,但 .AppendToFile() 方法不会添加 reportDataEngine.HeaderText。从文档中我没有看到 .AppendToFile() 的这个功能,我想知道是否有人对此有已知的 work-around 或者关于如何输出两个不同 [=33= 的 header 的建议] objects 在单个 CSV 文件中使用 FileHelpers。
但在单个 CSV 文件中,所需的输出看起来像这样(这显然是一个连续的 CSV;不是表格)
Report_Name
Operator
Timestamp
Access Report
User1
14:50:12 28 Dec 2020
UserID
Login_Time
Logout_Time
User4
09:33:23
10:45:34
User2
11:32:11
11:44:11
User4
15:14:22
16:31:09
User1
18:55:32
19:10:10
我还查看了 FileHelpers 中的 MultiRecordEngine,虽然我认为这可能有帮助,但我无法根据示例弄清楚如何以我上面所需的方式实际编写多记录 CSV 文件;如果可能的话。
谢谢!
最好的方法是合并列并做一个大 table 然后让你的 类 匹配你需要在阅读时将它们分开的列。 CSV 仅允许第一行定义列名,并且根据您的用例这是可选的。看看 CSVHelper https://joshclose.github.io/CsvHelper/ 它有很多内置功能和很多示例。如果您需要其他帮助,请告诉我。
如问题所述,我试图使用 FileHelpers 库生成一个 CSV 文件和一个报告文件。报告文件可能具有不同的(但有限的)inputs/data 结构,因此我的 CSV 生成方法未明确键入。 CSV 包含所有报告数据以及报告的 header 信息。对于我的 header,我使用 class object 属性,因为它们的描述性足以满足我的最终使用目的。
我的相关代码片段如下:
// File location, where the .csv goes and gets stored.
string filePath = Path.Combine(destPath, fileName);
// First, write report header details based on header list
Type type = DetermineListType(headerValues);
var headerEngine = new FileHelperEngine(type);
headerEngine.HeaderText = headerEngine.GetFileHeader();
headerEngine.WriteFile(filePath, (IEnumerable<object>)headerValues);
// Next, append the report data below the report header data.
type = DetermineListType(reportData);
var reportDataEngine = new FileHelperEngine(type);
reportDataEngine.HeaderText = reportDataEngine.GetFileHeader();
reportDataEngine.AppendToFile(filePath, (IEnumerable<object>)reportData);
执行此操作时,CSV 已成功生成,但 .AppendToFile() 方法不会添加 reportDataEngine.HeaderText。从文档中我没有看到 .AppendToFile() 的这个功能,我想知道是否有人对此有已知的 work-around 或者关于如何输出两个不同 [=33= 的 header 的建议] objects 在单个 CSV 文件中使用 FileHelpers。
但在单个 CSV 文件中,所需的输出看起来像这样(这显然是一个连续的 CSV;不是表格)
Report_Name | Operator | Timestamp |
---|---|---|
Access Report | User1 | 14:50:12 28 Dec 2020 |
UserID | Login_Time | Logout_Time |
---|---|---|
User4 | 09:33:23 | 10:45:34 |
User2 | 11:32:11 | 11:44:11 |
User4 | 15:14:22 | 16:31:09 |
User1 | 18:55:32 | 19:10:10 |
我还查看了 FileHelpers 中的 MultiRecordEngine,虽然我认为这可能有帮助,但我无法根据示例弄清楚如何以我上面所需的方式实际编写多记录 CSV 文件;如果可能的话。
谢谢!
最好的方法是合并列并做一个大 table 然后让你的 类 匹配你需要在阅读时将它们分开的列。 CSV 仅允许第一行定义列名,并且根据您的用例这是可选的。看看 CSVHelper https://joshclose.github.io/CsvHelper/ 它有很多内置功能和很多示例。如果您需要其他帮助,请告诉我。