如何使用FileHelpers将固定长度文本文件读取到DataTable中?
用FileHelpers将固定长度TXT读取到DataTable的方法
要把FileHelpers读取到的实体列表转成DataTable,有两种实用方法:
方法一:使用FileHelpers内置的DataTableConverter(最简方案)
FileHelpers自带DataTableConverter类,能直接将读取到的实体数组转成DataTable,无需手动处理列和行。
完整代码示例
Imports FileHelpers Imports FileHelpers.DataLink <FixedLengthRecord(FixedMode.AllowMoreChars)> Public Class Customer <FieldFixedLength(2)> Public CustId As String <FieldFixedLength(34)> Public Name As String <FieldFixedLength(70)> Public ID As String End Class Sub Main() ' 读取固定长度TXT到Customer数组 Dim engine = New FixedFileEngine(Of Customer)() Dim customerList As Customer() = engine.ReadFile(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\test.txt") ' 使用转换器转成DataTable Dim converter As New DataTableConverter(engine) Dim dt As DataTable = converter.ToDataTable(customerList) ' 此时dt就是填充好的DataTable,可直接使用 End Sub
方法二:手动创建DataTable并填充(自定义性更强)
如果需要对DataTable的列名、数据类型做自定义调整,或者处理特殊字段,可以手动构建DataTable并逐行填充:
完整代码示例
Imports FileHelpers <FixedLengthRecord(FixedMode.AllowMoreChars)> Public Class Customer <FieldFixedLength(2)> Public CustId As String <FieldFixedLength(34)> Public Name As String <FieldFixedLength(70)> Public ID As String End Class Sub Main() ' 读取固定长度TXT到Customer数组 Dim engine = New FixedFileEngine(Of Customer)() Dim customerList As Customer() = engine.ReadFile(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\test.txt") ' 创建DataTable并定义列 Dim dt As New DataTable() dt.Columns.Add("CustId", GetType(String)) dt.Columns.Add("Name", GetType(String)) dt.Columns.Add("ID", GetType(String)) ' 遍历Customer列表,填充DataTable行 For Each cust As Customer In customerList Dim row As DataRow = dt.NewRow() row("CustId") = cust.CustId row("Name") = cust.Name.Trim() ' 可选:去除固定长度字段的多余空格 row("ID") = cust.ID dt.Rows.Add(row) Next ' 此时dt就是填充好的DataTable End Sub
注意事项
- 方法一中的
DataTableConverter会自动根据实体类字段生成对应列,列名与字段名一致,数据类型匹配实体字段。 - 方法二中可灵活处理字段,比如对固定长度字符串做去空格处理、修改列名或调整数据类型。
内容的提问来源于stack exchange,提问作者user21251281
相关产品推荐
相关产品推荐

