解析迁移脚本

时间:2015-08-18 06:25:43

标签: c# parsing migration

我有一个输入文本文件,其中包含以下详细信息:

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名称。 / p>

重要的是告诉你,我正在从一个文本文件中逐行读取此文件,我正在使用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 个答案:

答案 0 :(得分: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 - 你可以轻松地添加一些逻辑填写属性)