如何将结构化文本文件转换为 XML 文件 API

本文关键字:文件 转换 XML API 文本 结构化 | 更新日期: 2023-09-27 18:31:48

我有一个结构化的文本文件,每个信息都按其位置(偏移量)和长度定位,例如,这一行取自文本文件:

H00VLS1    1200    32D1    20140602080524WIRE SPEC DATA 

以下是提取数据的规则:

HEADER_ID        length(3)  offset(1)
PRODUCT_NO       length(15) offset(4)
SORT_FIELD       length(9)  offset(19)
SUFFIX           length(9)  offset(28)
PERSON_CODE      length(5)  offset(33)
PROCESS_DATE     length(8)  offset(38)
MAINTENANCE_DATE length(8)  offset(46)

最后,应用此规则后,我们得到以下数据:

HEADER_ID   PRODUCT_NO   SORT_FIELD   SUFFIX     PERSON_CODE   PROCESS_DATE   MAINTENANCE_DATE
H00         VLS1  1200   32D1         20140      60208         0607WIRE       SPEC DA

生成的 XML 文件:

<header>
<header_id>H00</header_id>
<product_no>VLS1  1200</product_no>
<sort_feild>32D1</sort_feild>
<suffix>20140</suffix>
<person_code>60208</person_code>
<process_date>0607WIRE</process_date>
<maintenance_date>SPEC DA</maintenance_date>
</header>

现在我的问题是是否有一个 C# 类或 api 可以根据长度和偏移量规则将我的文本文件转换为 xml 或 json 文件?

如何将结构化文本文件转换为 XML 文件 API

使用 LINQ to XML 执行所需的操作非常容易:

    // Read txt file into an array of strings.
    string[] source = File.ReadAllLines(@"C:'mypath'text.txt");
    // Construct xml from above source file. Use helper method to split string.
    XElement cust = new XElement("Root",
        from str in source
        let fields = SplitLine(str)
        select new XElement("header",
            new XElement("header_id", fields[0]),
            new XElement("product_no", fields[1]),
            new XElement("sort_field", fields[2]),
            new XElement("suffix", fields[3]),
            new XElement("person_code", fields[4]),
            new XElement("process_date", fields[5]),
            new XElement("maintenance_date", fields[6])
            )
        );

您可以使用带有偏移量 - 1、长度作为索引substring函数轻松拆分 txt 文件的每一行:

public static string[] SplitLine(string str)
{
     string[] s = new string[7] { 
         str.Substring(0, 3),
         str.Substring(3, 15),
         str.Substring(18, 9),
         str.Substring(27, 9),
         str.Substring(32, 5),
         str.Substring(37, 8),
         str.Substring(45, 8)
     };
     return s;
 }
使用

FileHelpers 处理文件,使用 LINQ to XML 将结果转换为 XML。