ARKcc.Form1.loadFile C# (CSharp) Method

loadFile() private method

private loadFile ( ) : bool
return bool
        private bool loadFile()
        {
            // read entities from file
            string path = "entities.txt";

            // check if file exists
            if (!File.Exists(path))
            {
                MessageBox.Show("Entities-File 'entities.txt' not found.", "Error");
                this.Close();
                return false;
            }
            else
            {
                clearAll();
                string[] rows;
                rows = File.ReadAllLines(path);
                string[] parameters;
                List<string> categories = new List<string>();
                // default category
                categories.Add("Items");
                int i = 0;
                foreach (string row in rows)
                {
                    if (row.Length > 1 && row.Substring(0, 2) != "//")
                    {
                        if (row.Substring(0, 1) == "!")
                        {
                            if (!Int32.TryParse(row.Substring(1), out localFileVer))
                            {
                                localFileVer = 0; // file-version unknown
                            }
                        }
                        else
                        {
                            // if new category
                            if (row.Substring(0, 1) == "-")
                            {
                                int level = 1;
                                while (row.Length > level && row.Substring(level, 1) == "-") { level++; }
                                int currentLevel = categories.Count();
                                if (currentLevel >= level)
                                {
                                    categories.RemoveRange(level - 1, 1 + currentLevel - level);
                                }
                                categories.Add(row.Substring(level).Trim());

                                // check if category is already in treeview, else add
                                TreeNode node;
                                TreeNodeCollection nodes;
                                switch (categories[0].ToLower())
                                {
                                    case "commands":
                                        nodes = this.treeViewCommands.Nodes;
                                        break;
                                    case "creatures":
                                        nodes = this.treeViewCreatures.Nodes;
                                        break;
                                    case "items":
                                        nodes = this.treeViewItems.Nodes;
                                        break;
                                    default:
                                        nodes = null;
                                        break;
                                }
                                bool nodeExists;
                                if (nodes != null)
                                {
                                    for (int n = 0; n < categories.Count; n++)
                                    {
                                        node = null;
                                        nodeExists = false;
                                        if (nodes.Count > 0)
                                        {
                                            node = nodes[0];
                                        }
                                        while (node != null)
                                        {
                                            if (node.Text == categories[n])
                                            {
                                                if (n == categories.Count - 1)
                                                {
                                                    nodeExists = true;
                                                    break;
                                                }
                                                nodes = node.Nodes;
                                                nodeExists = true;
                                                break;
                                            }
                                            node = node.NextNode;
                                        }
                                        if (!nodeExists)
                                        {
                                            // add new node alphabetically
                                            int nn = 0;
                                            while (nn < nodes.Count && String.Compare(nodes[nn].Text, categories[n], true) < 0) { nn++; }
                                            nodes.Insert(nn, categories[n]);
                                            break;
                                        }
                                    }
                                }
                            }
                            else
                            {
                                parameters = row.Split(',');
                                if (parameters.Count() > 1)
                                {
                                    int n = 1;
                                    this.entities.Add(new Entity() { name = parameters[0].Trim() + (parameters[1].Trim().Length + (parameters.Count() > 2 ? parameters[2].Trim().Length : 0) == 0 ? " (NO ID OR BP GIVEN!)" : ""), id = parameters[1].Trim(), bp = (parameters.Count() > 2 ? parameters[2].Trim() : ""), category = string.Join("\\", categories), maxstack = (parameters.Count() > 3 ? (int.TryParse(parameters[3].Trim(), out n) ? n : 1) : 1) });
                                    i++;
                                }
                            }
                        }
                    }
                }
                // sort entities
                entities.Sort(delegate (Entity x, Entity y)
                {
                    if (x.name == null && y.name == null) return 0;
                    else if (x.name == null) return -1;
                    else if (y.name == null) return 1;
                    else return x.name.CompareTo(y.name);
                });

                this.treeViewCommands.ExpandAll();
                this.treeViewCreatures.ExpandAll();
                this.treeViewItems.ExpandAll();
                filterList(2, "Commands");
                filterList(1, "Creatures");
                filterList(0, "Items");
                return true;
            }
        }