コード例 #1
0
ファイル: WKTReader.cs プロジェクト: rosspickard/ArcShapeFile
        /// <summary>
        /// Opens the WKT file and loads all the data into the reader's nodes
        /// </summary>
        /// <param name="filename">The name of the WKT file to load</param>
        public void Read(string filename)
        {
            if (!System.IO.File.Exists(filename))
            {
                throw new Exception("WKT File does not exist");
            }
            LevelList = new ArrayList();
            mvarNodes = new WKTNodes();

            try
            {
                string inData = System.IO.File.ReadAllText(filename);
                // Remove unwanted characters
                inData = inData.Replace("\t", "");
                inData = inData.Replace("\n", "");
                inData = inData.Replace("\r", "");
                inData = inData.Replace(", ", ",");


                int majLevel = 0;

                while (inData != "")
                {
                    int brkPos = inData.IndexOf("[");
                    if (brkPos == -1)
                    {
                        return;
                    }

                    string valName = (inData.Substring(0, brkPos)).Trim();
                    if (valName.Contains(","))
                    {
                        valName = valName.Substring(valName.IndexOf(",") + 1);
                    }
                    string innerText = LoadParameterFromWKT(valName, inData);
                    string param     = null;
                    inData = (inData.Substring(brkPos + 2 + innerText.Length)).Trim();

                    if (innerText.Contains("["))
                    {
                        brkPos = innerText.IndexOf("[");
                        brkPos = innerText.LastIndexOf(",", brkPos);
                        param  = (innerText.Substring(0, brkPos)).Trim();
                    }
                    else
                    {
                        param = innerText;
                    }

                    majLevel++;
                    mvarNodes.Add("Top", valName, innerText, param, "");
                }

                FindAllLevels();
            }
            catch { }
        }
コード例 #2
0
ファイル: WKTReader.cs プロジェクト: rosspickard/ArcShapeFile
        /// <summary>
        /// Returns all the nodes in the WKT string that match
        /// </summary>
        /// <param name="TagName">"The name of the Tag (e.g. DATUM)</param>
        public WKTNodes GetNodesbyName(string TagName)
        {
            WKTNodes getNodes = new WKTNodes();

            // Iterate through all the nodes and their children to find the match
            foreach (string testLevel in LevelList)
            {
                string[] splitLevels = testLevel.Split('.');
                WKTNode  retNode     = mvarNodes[Convert.ToInt32(splitLevels[0])];
                for (int i = 1; i < splitLevels.Length - 1; i++)
                {
                    retNode = retNode.Children[Convert.ToInt32(splitLevels[i])];
                }
                if (retNode.TagName.ToUpper() == TagName.ToUpper())
                {
                    getNodes.Add(retNode);
                }
            }
            return(getNodes);
        }
コード例 #3
0
ファイル: WKTReader.cs プロジェクト: rosspickard/ArcShapeFile
        internal void Add(string Parent, string Name, string InnerText, string Parameters, string Level)
        {
            //create a new object
            string[] paramList;
            WKTNode  objNewMember = default(WKTNode);

            objNewMember = new WKTNode();
            WKTNodes Kids = new WKTNodes();

            sLevel = Level;
            Counter++;

            //set the properties passed into the method
            objNewMember.TagName    = Name.Replace("\"", "");
            objNewMember.InnerText  = InnerText;
            objNewMember.ParentName = Parent;
            objNewMember.Children   = Kids;
            //if (Parent == "Top")
            //{ objNewMember.Level = Level; }
            //else
            objNewMember.Level = Level + "." + Counter.ToString();


            if (Parameters != null)
            {
                paramList = Parameters.Split(',');
                if (paramList[0].StartsWith("\""))
                {
                    objNewMember.AttributeName = paramList[0].Replace("\"", "");
                }
                else
                {
                    objNewMember.Attributes.Add(paramList[0].Trim());
                }
                for (int i = 1; i < paramList.Length; i++)
                {
                    // TO DO: Because the paramList is an ArrayList there is no reason why everything has to be
                    // Stored as a string.
                    objNewMember.Attributes.Add(paramList[i].Replace("\"", "").Trim());
                }
            }

            List.Add(objNewMember);

            while (InnerText != null)
            {
                int    brkPos  = InnerText.IndexOf("[");
                string valName = null;
                string subText = null;
                string param   = null;
                if (brkPos > -1)
                {
                    valName = (InnerText.Substring(0, brkPos)).Trim();
                    if (valName.Contains(","))
                    {
                        valName = (valName.Substring(valName.LastIndexOf(",") + 1)).Trim();
                    }
                    subText   = LoadParameterFromWKT(valName, InnerText);
                    InnerText = (InnerText.Substring(brkPos + 2 + subText.Length)).Trim();
                    if (InnerText.StartsWith(","))
                    {
                        InnerText = InnerText.Substring(1);
                    }
                    InnerText = InnerText.Trim();

                    if (subText.Contains("["))
                    {
                        brkPos = subText.IndexOf("[");
                        brkPos = subText.LastIndexOf(",", brkPos);
                        param  = subText.Substring(0, brkPos).Trim();
                    }
                    else
                    {
                        param   = subText;
                        subText = null;
                    }
                }
                else
                {
                    param     = InnerText;
                    InnerText = null;
                }
                if (InnerText == "")
                {
                    InnerText = null;
                }

                objNewMember             = (WKTNode)List[List.Count - 1];
                objNewMember.hasChildren = true;
                objNewMember.Children.Add(objNewMember.TagName, valName, subText, param, objNewMember.Level);
            }
        }