【发布时间】:2014-10-26 12:13:27
【问题描述】:
我输入了如下文本数据:
AX AMDBCEFG 103.12.96.0 103.12.98.255
AX AMDBDEFG 103.11.64.0 103.13.64.255
AX AMDBEEFG 103.14.24.0 103.14.24.255
我正在寻找的输出是一个新的文本文件:
AX AMDBCEFG 103.12.96.0 103.12.96.255
AX AMDBCEFG 103.12.97.0 103.12.97.255
AX AMDBCEFG 103.12.98.0 103.12.98.255
AX AMDBDEFG 103.11.64.0 103.11.64.255
AX AMDBDEFG 103.12.64.0 103.12.64.255
AX AMDBDEFG 103.13.64.0 103.13.64.255
AX AMDBEEFG 103.14.24.0 103.14.24.255
First line 仅从输入递增 3rd Octet 即 96 to 98。Second line 从输入递增 2nd Octet 即 11 to 13。Third line 从输入 remains same .
到目前为止我所做的尝试:
我将 IP 视为字符串,然后在 . 的基础上进行拆分,这是一件非常乏味的事情。
string sFile = "D:\\input.txt";
string sNewFilePath = Path.Combine(@"D:\\Output", Path.GetFileName(sFile));
string[] arrLines = File.ReadAllLines(sFile);
using (StreamWriter writer = new StreamWriter(sNewFilePath))
{
foreach (string sLine in arrLines)
{
string[] arrTab = sLine.Split('\t');
string sIP1 = arrTab[2].Trim();
string sIP2 = arrTab[3].Trim();
string[] arrIP1 = sIP1.Split('.');
string[] arrIP2 = sIP2.Split('.');
int iOct1_IP1 = Convert.ToInt32(arrIP1[1]);
int iOct1_IP2 = Convert.ToInt32(arrIP2[1]);
int iOct2_IP1 = Convert.ToInt32(arrIP1[2]);
int iOct2_IP2 = Convert.ToInt32(arrIP2[2]);
int iOct1_Diff = iOct1_IP2 - iOct1_IP1;
int iOct2_Diff = iOct2_IP2 - iOct2_IP1;
if (iOct1_Diff > 0)
{
//loop & increment
//write lines to file
}
else if (iOct2_Diff > 0)
{
//loop & increment
//write lines to file
}
}
}
在继续之前,我发现我可以使用System.Net.IPAddress。
System.Net.IPAddress ip1 = System.Net.IPAddress.Parse(sIP1.Trim());
System.Net.IPAddress ip2 = System.Net.IPAddress.Parse(sIP2.Trim());
if (ip1.Equal(ip2))
{
//...
}
我的问题,有没有使用上述类或任何其他技术的首选方法来实现这一点?
抱歉,对用于递增 IP 地址的术语缺乏了解。
谢谢。
【问题讨论】:
-
你想归档什么?我不明白您的问题或您要解决的问题。
-
想要一个显示 IP 地址的开始和结束范围的输出文件(如示例所示)。
标签: c# string parsing text-files ip-address