2015-08-18 78 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