我有两个文件。首先包含ca. 20行。
202 0021.ccc1.2e3b DYNAMIC Gi1/0/31
202 0023.246b.dd96 DYNAMIC Gi1/0/16
202 0023.246e.2e41 DYNAMIC Gi2/0/16
另一个(我把IP涂黑了,估计1000行):
Internet 172.ZZ.XX.01 1 0021.ccc1.2e3b ARPA VlanXXX
Internet 172.ZZ.XX.02 0 0023.246e.2e41 ARPA VlanXXX
Internet 172.ZZ.XX.03 3 0023.246b.dd96 ARPA VlanXXX
现在我需要合并我获得端口,MAC和IP的两个文件:
172.ZZ.XX.03 0023.246b.dd96 Gi2/0/16
172.ZZ.XX.02 0023.246e.2e41 Gi1/0/16
172.ZZ.XX.01 0021.ccc1.2e3b Gi1/0/31
所以基本上我需要浏览第一个文件并在第二个文件中找到MAC的等效文件。然后打印/输出这三个值。
我用Dictionaries和Hashtables试了一下,但它很复杂,而且我有点卡住了。有没有简单的方法来完成这项任务?
另外一个复杂的事实是,在第一个文件中,一个接口/端口可能会出现多次,而在第二个文件中,同一个MAC可能不止一次。
编辑:我的尝试请求
我将每行放入List(第一个文件是TargetSwitch,第二个CoreSwitch),然后调用InitHashtable将数据放入两个哈希表中。之后,我通过迭代哈希表以一种时髦的方式找到匹配。 Ports meight也不正确,因为它需要第一个mac-Adress的通讯员
private void InitHashtable()
{
foreach (string line in ListEntryTargetSwitch)
{
htTargetSwitch.Add(line.Split(delim, StringSplitOptions.RemoveEmptyEntries)[1], line.Split(delim, StringSplitOptions.RemoveEmptyEntries)[3]);
}
foreach (string line in ListEntryCoreSwitch)
{
if (line.Split(delim, StringSplitOptions.RemoveEmptyEntries)[3] != "Incomplete")
{
htCoreSwitch.Add(line.Split(delim, StringSplitOptions.RemoveEmptyEntries)[1], line.Split(delim, StringSplitOptions.RemoveEmptyEntries)[3]);
}
}
}
private void FindMatches()
{
StreamWriter sw = new StreamWriter(_txtResult3, false);
foreach (string mac in htCoreSwitch.Values)
{
if (htTargetSwitch[mac] != null)
{
sw.WriteLine(mac + " " + htTargetSwitch[mac] + " " + htCoreSwitch.Keys.OfType<string>().FirstOrDefault(s => htCoreSwitch[s] == mac));
}
}
sw.Close();
}
答案 0 :(得分:1)
你应该得到这样的东西
class r1
{
public String f1, f2, f3, f4;
public r1(string line)
{
//TODO: Parse line to fields
}
}
class r2
{
public String f1, f2, f3, f4, f5, f6;
public r2(string p)
{
// TODO: Complete member initialization
}
}
class r3
{
public String f1, f2, f3;
public String ToString()
{
//TODO: Implement
return String.Format("{0} {1} {2}", f1, f2 ,f3);
}
}
class c1
{
public static void main()
{
String path1 = "file1.txt";
Dictionary<String, r1> file1_parsed = new Dictionary<string, r1>();
StreamReader sr = new StreamReader(path1);
while (!sr.EndOfStream)
{
String line = sr.ReadLine();
r1 record = new r1(line);
file1_parsed.Add(record.f2, record);
}
sr.Close();
String path2 = "file2.txt";
String path3 = "file3.txt";
sr = new StreamReader(path2);
StreamWriter result_file = new StreamWriter(path3);
while (!sr.EndOfStream)
{
r2 record = new r2(sr.ReadLine());
result_file.WriteLine(new r3 {
f1=record.f2,
f2=record.f4,
f3=file1_parsed[record.f4].f4
});
}
sr.Close();
result_file.Flush();
result_file.Close();
}
}
答案 1 :(得分:0)
请按照以下步骤操作:
定义一个类c1
,其中包含line1中单行的所有信息。
对于file2中的一行,它将导致类c2
将file1中的所有行解析为c1
列表
将所有行格式file2解析为c2
使用c1
个对象中的关键MAC编号构建字典。
现在循环浏览c1
个对象,使用MAC编号在字典中找到匹配的c2
对象,并打印出来自c1
并匹配c2
的所有必需信息