コード例 #1
0
        void CheckForSharp(AdjacencyListReader listReader)
        {
            var line = listReader.ReadNextLine();

            if (line != "#")
            {
                throw new ParserException("Parsing .txt file error.\n" + $"Wrong file format, no sharp in line: {listReader.CurrentLineIndex}. ");
            }
        }
コード例 #2
0
        void SetAmoutOfVertex(AdjacencyListReader listReader)
        {
            var line       = listReader.ReadNextLine();
            var readResult = int.TryParse(line, out int verdsNumber);

            if (readResult == false || verdsNumber < 1)
            {
                throw new ParserException("Parsing .txt file error.\n" + $"Invalid amount of verds, line: {listReader.CurrentLineIndex}.");
            }
            listReader.AmoutOfVertex = verdsNumber;
        }
コード例 #3
0
        static List <int>[] CreateAdjacencyList(AdjacencyListReader reader)
        {
            var adjacencyList = new List <int> [reader.AmoutOfVertex];

            for (int i = 0; i < adjacencyList.Length; i++)
            {
                adjacencyList[i] = new List <int>();
            }
            var firstLine         = reader.ReadNextLine();
            var splittedFirstLine = firstLine.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
            var n = int.Parse(splittedFirstLine[0]);

            for (int i = 0; i < n; i++)
            {
                var line        = reader.ReadNextLine();
                var splitedLine = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                var u           = int.Parse(splitedLine[0]) - 100;
                var v           = int.Parse(splitedLine[1]) - 100;
                adjacencyList[u].Add(v);
            }
            return(adjacencyList);
        }
コード例 #4
0
        List <int>[] ReadAdjacencyListWith(AdjacencyListReader listReader)
        {
            var adjacencyList = new List <int> [listReader.AmoutOfVertex];
            var separator     = "->";

            for (int i = 0; i < adjacencyList.Length; i++)
            {
                adjacencyList[i] = new List <int>();
                var line = listReader.ReadNextLine();

                if (line == null)
                {
                    throw new ParserException("Parsing .txt file error.\n" + $"Wrong file format, empty line {listReader.CurrentLineIndex}.");
                }
                else if (line == "#")
                {
                    throw new ParserException("Parsing .txt file error.\n" + $"Invalid amount of verds line {listReader.CurrentLineIndex}.");
                }

                var indexOfSeparator     = line.IndexOf(separator);
                var lastIndexOfSeparator = line.LastIndexOf(separator);

                if (indexOfSeparator != lastIndexOfSeparator)
                {
                    throw new ParserException("Parsing .txt file error.\n" + $"Wrong format, more than 1 arrow in line: {listReader.CurrentLineIndex}. ");
                }
                if (indexOfSeparator == 0)
                {
                    throw new ParserException("Parsing .txt file error.\n" + $"No verd's value in line: {listReader.CurrentLineIndex}. ");
                }
                else if (indexOfSeparator == -1)
                {
                    throw new ParserException("Parsing .txt file error.\n" + $"Wrong format, no arrow in line: {listReader.CurrentLineIndex}. ");
                }

                var splitedLine = line.Split(new string[] { separator }, StringSplitOptions.RemoveEmptyEntries);
                Array.ForEach(splitedLine, x => x.Trim());

                if (splitedLine.Length > 2)
                {
                    throw new ParserException("Parsing .txt file error.\n" + $"Wrong format, more than 1 arrow in line: {listReader.CurrentLineIndex}. ");
                }
                else if (splitedLine[0] == "")
                {
                    throw new ParserException("Parsing .txt file error.\n" + $"No verd's value in line: {listReader.CurrentLineIndex}. ");
                }

                var verd = ReadIntFromString(splitedLine[0], listReader.CurrentLineIndex);
                if (verd != i)
                {
                    throw new ParserException("Parsing .txt file error.\n" + $"Invalid verd's order, they should be ordered by ascending in line: {listReader.CurrentLineIndex}. ");
                }

                if (splitedLine.Length == 2)
                {
                    // Parsing line after arrow sign.
                    var secondLine = splitedLine[1];
                    if (secondLine != "")
                    {
                        var verdsLine = secondLine.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                        if (verdsLine.Length != 0)
                        {
                            for (int j = 0; j < verdsLine.Length; j++)
                            {
                                int v = ReadIntFromString(verdsLine[j], listReader.CurrentLineIndex);
                                if (v > adjacencyList.Length - 1)
                                {
                                    throw new ParserException("Parsing .txt file error.\n" + $"Invalid value of the verd in line: {listReader.CurrentLineIndex}.");
                                }
                                adjacencyList[i].Add(v);
                            }
                        }
                    }
                }
            }
            return(adjacencyList);
        }