我需要一种明智的方法来将任意文本文件绘制到C#程序中,并生成任意匿名类型的对象,或者某种类型的复合字典。
我有一个具有代表性的文本文件,如下所示:
adapter 1: LPe11002
Factory IEEE: 10000000 C97A83FC
Non-Volatile WWPN: 10000000 C93D6A8A , WWNN: 20000000 C93D6A8A
adapter 2: LPe11002
Factory IEEE: 10000000 C97A83FD
Non-Volatile WWPN: 10000000 C93D6A8B , WWNN: 20000000 C93D6A8B有没有一种方法可以将这些信息输入到匿名类型对象或类似的结构中?
如果最后的匿名类型是手工在C#中编写的,那么它可能类似于这样:
new
{
adapter1 = new
{
FactoryIEEE = "10000000 C97A83FC",
Non-VolatileWWPN = "10000000 C93D6A8A",
WWNN = "20000000 C93D6A8A"
}
adapter2 = new
{
FactoryIEEE = "10000000 C97A83FD",
Non-VolatileWWPN = "10000000 C93D6A8B",
WWNN = "20000000 C93D6A8B"
}
}注意,由于文本文件的内容是任意的(即键可以是任何内容),一个专门的解决方案(例如,查找“FactoryIEEE”之类的名称)将无法工作。但是,文件的结构总是相同的(例如,组、冒号和逗号分隔符等的缩进)。
或者我走错路了,你有更好的主意吗?
发布于 2010-05-04 05:13:00
你走错路了。您的“匿名类型对象”数据很难构造,也很难使用。要构建它,您必须使用反射诡计。为了什么呢?
考虑一个PrintReport函数。由于ATO的使用,这个函数不会变得更简单。与之不同的是,它会变得更加复杂和缓慢,必须使用反射本身来迭代键。如果有少量固定数量的可能密钥,您的解决方案可能是有意义的。然后使用语法(如"obj.FactoryIEEE“)可能会更好。
我做这件事的方式是用一个List<Dictionary<string, string>>,或者,比如说List<AdapterRecord>,AdapterRecord在那里
class AdapterRecord
{
public string Name { get; set; }
public Dictionary<string, string> Parameters { get; set; }
}发布于 2010-05-04 05:15:38
看看这篇分为2部分的文章。它以流畅的方式解析XML文件。我认为它可以用来解析你的文本文件。
它使用C# 4动态类型来执行您想做的事情。
发布于 2010-05-04 05:13:17
看起来,即使在C# 4中也无法做到这一点。
此外,如果您不知道这些键是什么,那么任何类型的强类型访问都会很困难,那么简单的拆分+插入字典/列表/等等就更有意义了。
https://stackoverflow.com/questions/2762915
复制相似问题