2015-08-18 58 views
0

我有具有以下详细信息输入文本文件:解析迁移脚本

object network Name_Personal_1 
subnet 121.224.210.111 255.255.255.224 
object network Name_Personal_07 
subnet 101.112.22.0 255.255.255.111 
object network NameAA_1 
subnet 101.16.12.11 255.255.255.111 

object-group network Name_Personal 
network-object 303.113.103.11 255.255.255.111 
network-object 400.115.104.11 255.255.255.111 
network-object 590.114.106.11 255.255.255.111 
network-object 600.116.107.11 255.255.255.111 
network-object 700.117.108.11 255.255.255.111 
network-object object Name_Personal_1 
network-object object Name_Personal_07 

object-group network NameAA 
network-object object NameAA_1 

object-group network NameBB 
network-object 500.13.500.64 255.255.255.111 
network-object 100.11.111.0 255.255.255.111 
network-object 300.11.111.0 255.255.255.111 

现在我需要做的是存储的名称,IP地址,子网掩码和组名

例如Name_Personal_1的详细信息如下:

Name: Name_Personal_1 
Ip: 121.224.210.111 
Subnet: 255.255.255.001 
Group: Name_Personal 

我无法找到如何做到的是,如果例如Name_Personal具有网络对象

120.11.1.139.64 255.255.255.111 

我需要找到该行之前的最后一次有对象组网络(名称),并在这种情况下采用名称Name_Personal,所以我把它放在Group:属性中。例如,如果我想

100.11.111.0 255.255.255.111 

下一次它是对象组网络下NameBB以后我就发现这是什么组通过寻找最后一次被读取之前有一个对象 - 群组网络所以我可以在这种情况下获得NameBB名称。

重要的是要告诉你,我是从我与一个StreamReader

StreamReader file = new StreamReader(@"C:\Users\my.name\desktop\input.txt"); 
while ((line = file.ReadLine()) != null) 
{ 
    if (line.Contains("network_object")) 
    { 
      Network n = new Network(); 
      n.Name = ""; 
      n.IPAddress = ""; 
      n.SubnetMask = ""; 
      n.GroupName = "";  
    } 
} 

所有我在阅读文本文件中获取该文件中读取一行一行的一个主类和含网络类是重要的名字IP,子网和组字符串,并且我还需要读取每行不自己输入的IP,因此程序需要获取每个IP和子网所属的组的名称。所以应用程序会遍历每一行,然后在它搜索上面搜索的名称(对象组网络(名称))时搜索网络对象。

回答

1

如果要将文件序列化到内存中,或者只是搜索网络组,则不太清楚。在此基础上:

它是对象组网络NameBB然后我下得找 它是什么组通过寻找最后一次有一个对象 - 群组 网络阅读,所以我可以前在这种情况下获得NameBB名称。

我假设你只是想抓住IP前面的object networkobject-group network

public string GetNetworkNameForIp(String ip) 
{ 
    String currentNetworkName = null; 
    using (var file = new StreamReader(@"input.txt")) 
    { 
     const string object_group_network = "object-group network "; 
     const string object_network = "object network "; 
     string line; 
     while ((line = file.ReadLine()) != null) 
     { 
      if (line.StartsWith(object_group_network)) 
       currentNetworkName = line.Substring(object_group_network.Length); 
      if (line.StartsWith(object_network)) 
       currentNetworkName = line.Substring(object_network.Length); 

      if (line.Contains(ip)) 
       return currentNetworkName; 
     } 
    } 
    return null; 
} 

测试:

GetNetworkNameForIp("100.11.111.0") 

返回 “NameBB”

GetNetworkNameForIp("121.224.210.111") 

返回 “Name_Personal_1”

如果你想反序列化,那么你可以在这个扩大方法来解析细节(因为它存储了它看到的最后一个object-group network/object network - 哟你可以很容易地添加一些逻辑来填写属性)

+0

这是非常接近我想要的,但区别是Name_Personal_1是一个IP的名称和Name_BB是一个组,所以我需要如果程序找到object_network它搜索网络对象组后的名称如上面为100.11.111.0我需要得到NameBB的返回,如您所示,但我看到一个参数字符串ip,但实际上我不会输入任何东西,我只需要读取文件几乎和你一样做搜索,但没有输入任何细节我自己去搜索,顺便说一句,谢谢你试图帮助:) – user3679986

+0

在现实中,我想抓住IP和子网,并将它们插入到我创建的对象中,该对象包含名称:IP:子网:组:(这个特定名称所在的组)这就是为什么我不能自己输入IP。对象网络或对象组网络用于帮助获取我需要的详细信息。 – user3679986