示例#1
0
 /// <summary>
 /// Определение адресов, принадлежащих сразу двум диапазонам
 /// </summary>
 /// <param name="range">Заданный диапазон адресов</param>
 /// <returns>Массив диапазонов, включающих адреса, принадлежащие только одному из диапазонов</returns>
 internal IPRange[] Exclude(IPRange range)
 {
     IPRange[] result = new IPRange[0];
     //Верхняя граница заданного диапазона попадает в данный диапазон
     if (this.Contains(range.UpperBound) && range.Contains(this.LowerBound))
     {
         Array.Resize <IPRange>(ref result, 2);
         result[0] = new IPRange(range.LowerBound, this.LowerBound);
         result[1] = new IPRange(range.UpperBound, this.UpperBound);
         return(result);
     }
     //Нижняя граница заданного диапазона попадает в данный диапазон
     if (this.Contains(range.LowerBound) && range.Contains(this.UpperBound))
     {
         Array.Resize <IPRange>(ref result, 2);
         result[0] = new IPRange(this.LowerBound, range.LowerBound);
         result[1] = new IPRange(this.UpperBound, range.UpperBound);
         return(result);
     }
     //Весь заданный диапазон попадает внутрь данного диапазона
     if (this.Contains(range.UpperBound) && this.Contains(range.LowerBound))
     {
         Array.Resize <IPRange>(ref result, 2);
         result[0] = new IPRange(this.LowerBound, range.LowerBound);
         result[1] = new IPRange(range.UpperBound, this.UpperBound);
         return(result);
     }
     //Весь данный диапазон попадает внутрь заданного диапазона
     if (range.Contains(this.UpperBound) && range.Contains(this.LowerBound))
     {
         Array.Resize <IPRange>(ref result, 2);
         result[0] = new IPRange(range.LowerBound, this.LowerBound);
         result[1] = new IPRange(this.UpperBound, range.UpperBound);
         return(result);
     }
     return(result);
 }
示例#2
0
        static void Main(string[] args)
        {
            string[]     orig = File.ReadAllLines(@"..\..\original.txt", Encoding.Default);
            string[]     subtract = File.ReadAllLines(@"..\..\subtract.txt", Encoding.Default);
            StreamWriter sw = new StreamWriter(@"..\..\result.txt");
            IPRange      ipOrig, ipSub;
            bool         excluded;

            foreach (string origItem in orig)
            {
                ipOrig   = IPRange.Parse(origItem);
                excluded = false;

                foreach (string subtractItem in subtract)
                {
                    ipSub = IPRange.Parse(subtractItem);
                    IPRange[] res = ipOrig.Exclude(ipSub);
                    if (res.Length > 0)
                    {
                        sw.WriteLine(res[0].ToString());
                        sw.WriteLine(res[1].ToString());
                        Console.WriteLine(res[0].ToString());
                        Console.WriteLine(res[1].ToString());
                        excluded = true;
                    }
                }

                if (!excluded)
                {
                    sw.WriteLine(ipOrig.ToString());
                    Console.WriteLine(ipOrig.ToString());
                }
            }
            sw.Close();
            Console.Read();
        }