c#中的文本输入解析器
本文关键字:输入 文本 | 更新日期: 2023-09-27 17:47:49
我有一个如下格式的文本文件:
L O A D C A S E 1 O F 2 ...
J O I N T D I S P L A C E M E N T S (global)
Joint X-dsp Y-dsp Z-dsp X-rot Y-rot Z-rot
1 0.0 0.0 0.0 0.0 0.0 -0.001712
2 0.000646 -0.021756 0.0 0.0 0.0 -0.001339
3 0.003562 -0.038487 0.0 0.0 0.0 -0.000727
4 0.006478 -0.041661 0.0 0.0 0.0 0.000104
5 0.009536 -0.036266 0.0 0.0 0.0 0.000720
6 0.012595 -0.022824 0.0 0.0 0.0 0.001326
7 0.014724 0.0 0.0 0.0 0.0 0.001948
8 0.010000 -0.018686 0.0 0.0 0.0 -0.001117
9 0.009354 -0.036887 0.0 0.0 0.0 -0.000829
10 0.005767 -0.041661 0.0 0.0 0.0 0.000060
11 0.002180 -0.035866 0.0 0.0 0.0 0.000798
12 0.000051 -0.020695 0.0 0.0 0.0 0.001210
M E M B E R E N D F O R C E S (local)
Member Joint Nx Vy Vz Txx Myy Mzz
1 1 -16.138t 0.002 0.0 0.0 0.0 0.011
1 2 16.138t -0.002 0.0 0.0 0.0 0.017
2 2 -72.907t 0.003 0.0 0.0 0.0 0.013
2 3 72.907t -0.003 0.0 0.0 0.0 0.023
3 3 -72.909t -0.000 0.0 0.0 0.0 -0.009
3 4 72.909t 0.000 0.0 0.0 0.0 0.005
4 4 -76.455t -0.000 0.0 0.0 0.0 -0.007
4 5 76.455t 0.000 0.0 0.0 0.0 0.003
5 5 -76.453t -0.001 0.0 0.0 0.0 -0.010
5 6 76.453t 0.001 0.0 0.0 0.0 0.000
6 6 -53.226t -0.002 0.0 0.0 0.0 -0.018
6 7 53.226t 0.002 0.0 0.0 0.0 -0.008
7 1 108.570c -0.001 0.0 0.0 0.0 -0.011
7 8 -108.570c 0.001 0.0 0.0 0.0 -0.004
8 2 -76.765t -0.004 0.0 0.0 0.0 -0.024
8 8 76.765t 0.004 0.0 0.0 0.0 -0.021
9 2 80.278c -0.000 0.0 0.0 0.0 -0.006
9 9 -80.278c 0.000 0.0 0.0 0.0 -0.000
10 3 -39.997t -0.002 0.0 0.0 0.0 -0.014
10 9 39.997t 0.002 0.0 0.0 0.0 -0.016
11 4 -23.720t -0.000 0.0 0.0 0.0 0.004
11 9 23.720t 0.000 0.0 0.0 0.0 -0.007
12 4 -0.001t 0.000 0.0 0.0 0.0 0.002
12 10 0.001t -0.000 0.0 0.0 0.0 0.001
13 4 -18.706t 0.000 0.0 0.0 0.0 -0.003
13 11 18.706t -0.000 0.0 0.0 0.0 0.005
14 5 -10.000t 0.001 0.0 0.0 0.0 0.007
14 11 10.000t -0.001 0.0 0.0 0.0 0.008
15 6 32.845c 0.000 0.0 0.0 0.0 0.006
15 11 -32.845c -0.000 0.0 0.0 0.0 -0.000
16 6 -53.223t 0.002 0.0 0.0 0.0 0.012
16 12 53.223t -0.002 0.0 0.0 0.0 0.010
17 7 75.273c 0.000 0.0 0.0 0.0 0.008
17 12 -75.273c -0.000 0.0 0.0 0.0 -0.001
18 8 16.142c 0.005 0.0 0.0 0.0 0.025
18 9 -16.142c -0.005 0.0 0.0 0.0 0.030
19 9 89.682c 0.000 0.0 0.0 0.0 -0.007
19 10 -89.682c -0.000 0.0 0.0 0.0 0.008
20 10 89.682c -0.000 0.0 0.0 0.0 -0.009
20 11 -89.682c 0.000 0.0 0.0 0.0 0.003
21 11 53.228c -0.002 0.0 0.0 0.0 -0.016
21 12 -53.228c 0.002 0.0 0.0 0.0 -0.010
有没有C#库可以用来解析这种格式的信息?
谢谢。
否。
你可以使用.NET的字符串库很容易地自己解析它
例如字符串。拆分
这里有一个关于使用Linq导入表格数据的非常有趣的方法。
它简单而优雅,只需要一个从文件中生成行的Enumerable方法:
public static IEnumerable<string> ReadLinesFromFile(string filename)
{
using (StreamReader reader = new StreamReader(filename))
{
while (true)
{
string s = reader.ReadLine();
if (s == null)
break;
yield return s;
}
}
}
然后进行查询:
var jointDisplacements = from line in ReadLinesFromFile(@"c:'import.txt")
let item = line.Split(new char[] { ''t' })
select new
{
Joint = Convert.ToInt32(item[0]),
X-dsp = Convert.ToDouble(item[1]),
Y-dsp = Convert.ToDouble(item[2]),
Z-dsp = Convert.ToDouble(item[3]),
X-rot = Convert.ToDouble(item[4]),
Y-rot = Convert.ToDouble(item[5]),
Z-rot = Convert.ToDouble(item[6])
};
现在,您有一个匿名对象列表,这些对象具有文件中的值,表示为每个对象的属性。
如果文件中包含列标题,则应跳过第一行。。。
Regex可以提供很好的帮助。
http://filehelpers.sourceforge.net/可能是有用的。它不会完全自动。您需要做一些工作来将文件的不同部分分解为不同的流,这些流可以传递给FileHelperEngine类,该类将解析固定格式的数据。
看起来像固定长度格式吗?
经过一些预处理,您可以使用OLEDB驱动程序使用标准API获取数据:
- http://www.codeproject.com/KB/database/ReadTextFile.aspx
有人创建了一个使用XML文件配置格式的示例:
- https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-6156780.html