我有一个输入文本文件,其中包含以下详细信息:
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所在的组的名称和子网下降。因此,应用程序将通过每一行,然后当它使用网络对象时,它会在上面搜索名称(对象组网络(名称))。
答案 0 :(得分:1)
如果您想将文件序列化到内存中,或者只是搜索网络组,则不是很清楚。基于此:
这是在对象组网络NameBB下,然后我必须找到 通过查找最后一次有对象组来查找它是什么组 在读取网络之前,我可以在这种情况下获得NameBB名称。
我假设您只想抓住IP之前的object network
或object-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
- 你可以轻松地添加一些逻辑填写属性)