我有一个结构化的文本文件,每个信息都按其位置(偏移量)和长度定位,例如,这一行取自文本文件:
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文件?
答案 0 :(得分:0)
使用FileHelpers处理您的文件,使用LINQ to XML将结果转换为XML。
答案 1 :(得分:0)
// 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])
)
);
您可以使用substring
函数轻松拆分txt文件的每一行,偏移量为1,长度为索引:
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;
}