private void button4_Click(object sender, EventArgs e)
        {
            try
            {
                string excelPath = textBox2.Text;
                string sheet     = textBox4.Text.Trim();
                string center    = textBox3.Text.Trim();
                if (string.IsNullOrEmpty(excelPath) || string.IsNullOrEmpty(sheet))
                {
                    return;
                }

                DataTable dt = ExcelManager.ReadExcelToDataTable(excelPath, sheet);
                if (dt.Rows.Count <= 1 || dt.Columns.Count <= 1)
                {
                    Console.WriteLine("None Item Information.");
                    return;
                }
                int outOrin = 0;
                switch (comboBox1.Text)
                {
                case "In":
                    outOrin = 1;
                    break;
                }
                string        defaultPortName = "defaultPortName";
                string        defaultPortID   = "50000";
                List <string> columnNames     = new List <string>()
                {
                    "A653PortName", "DestUDP"
                };

                string[] centerArray = new string[] { "CENTER", "LIB", "LOB", "ROB", "RIB" };

                string[] portNameArray = new string[dt.Rows.Count - 1];
                string[] portIDArray   = new string[dt.Rows.Count - 1];


                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    string columnName = dt.Rows[0][i].ToString().Trim();

                    switch (columnName)
                    {
                    case "A653PortName":
                        for (int j = 1; j < dt.Rows.Count; j++)
                        {
                            string data = dt.Rows[j][i].ToString().Trim();
                            if (string.IsNullOrEmpty(data))
                            {
                                data = defaultPortName;
                            }
                            portNameArray[j - 1] = data;
                        }
                        break;

                    case "DestUDP":
                        for (int j = 1; j < dt.Rows.Count; j++)
                        {
                            string data = dt.Rows[j][i].ToString().Trim();
                            if (string.IsNullOrEmpty(data))
                            {
                                data = defaultPortID;
                            }
                            portIDArray[j - 1] = data;
                        }
                        break;
                    }
                }
                richTextBox1.AppendText(string.Format("name:{0} -> id:{1}\n", portNameArray.Length, portIDArray.Length));

                Dictionary <string, LineData> portInfo = new Dictionary <string, LineData>();
                StringBuilder sb = new StringBuilder();
                sb.Append(string.Format("[{0}]", sheet));
                sb.Append("\n");
                for (int i = 0; i < dt.Rows.Count - 1; i++)
                {
                    string name = portNameArray[i];
                    string id   = portIDArray[i];
                    if (portInfo.ContainsKey(name))
                    {
                        richTextBox1.AppendText(string.Format("sane port name:{0}\n", name));
                        continue;
                    }
                    string centerinfo = center;
                    if (outOrin == 0)
                    {
                        Random rd    = new Random(i);
                        int    index = rd.Next(0, 5);
                        centerinfo = centerArray[index];
                    }
                    LineData line = new LineData(true, id, name, centerinfo, outOrin.ToString(), i);
                    portInfo.Add(name, line);
                    sb.Append(line.ToString());
                    sb.Append("\n");
                }
                sb.Append(string.Format("[END_OF_{0}]", sheet));

                FileInfo info      = new FileInfo(excelPath);
                string   dic       = info.Directory.FullName;
                string   writepath = Path.Combine(dic, string.Format("{0}_config_file_Center.ini", sheet));
                if (File.Exists(writepath))
                {
                    File.Delete(writepath);
                }
                using (StreamWriter sw = new StreamWriter(File.Open(writepath, FileMode.OpenOrCreate, FileAccess.Write)))
                {
                    sw.Write(sb.ToString());
                }

                richTextBox1.AppendText("End.\n");
            }
            catch (Exception error)
            {
                richTextBox1.SelectionColor = Color.Red;
                richTextBox1.AppendText(string.Format("Error:{0}\n", error.Message));
            }
        }
        private void button5_Click(object sender, EventArgs e)
        {
            string path = this.textBox5.Text;

            if (string.IsNullOrEmpty(path))
            {
                richTextBox1.SelectionColor = Color.Red;
                richTextBox1.AppendText("文件路径不能为空!");
                return;
            }


            Dictionary <string, List <LineData> > allPortID = new Dictionary <string, List <LineData> >();

            Dictionary <string, List <string> > samePortID = new Dictionary <string, List <string> >();

            allPortID.Clear();
            samePortID.Clear();

            List <LineData> lins = new List <LineData>();

            int start = 0;

            int.TryParse(comboBox2.Text, out start);
            start = start * 1000;
            int lineIndex = 0;

            using (StreamReader sr = new StreamReader(File.Open(path, FileMode.Open, FileAccess.Read)))
            {
                string line = string.Empty;

                while ((line = sr.ReadLine()) != null)
                {
                    lineIndex++;
                    LineData dt = new LineData(false, "", "", "", "", lineIndex);
                    if (line.Contains("#") || !line.Contains("="))
                    {
                        dt = new LineData(false, "", line, "", "", lineIndex);
                    }
                    else
                    {
                        string[] data1 = line.Split('=');
                        if (data1.Length == 2)
                        {
                            string   data2 = data1[1];
                            string[] data3 = data2.Split('-');
                            if (data3.Length == 3)
                            {
                                string data4 = data3[1];
                                data4 = (start++).ToString();

                                dt = new LineData(true, data4, data1[0], data3[0], data3[2], lineIndex);
                            }
                        }
                    }
                    lins.Add(dt);
                }
            }
            StringBuilder OverwriteSB = new StringBuilder();

            for (int i = 0; i < lins.Count; i++)
            {
                LineData dt = lins[i];
                OverwriteSB.Append(dt.ToString());
                if (i < lins.Count - 1)
                {
                    OverwriteSB.Append("\n");
                }
            }

            FileInfo fileInfo = new FileInfo(path);
            string   newPath  = Path.Combine(fileInfo.Directory.FullName, "new" + Path.GetFileNameWithoutExtension(fileInfo.FullName) + fileInfo.Extension);

            if (File.Exists(newPath))
            {
                File.Delete(newPath);
            }
            using (StreamWriter sw = new StreamWriter(File.Open(newPath, FileMode.OpenOrCreate, FileAccess.Write)))
            {
                sw.Write(OverwriteSB.ToString());
            }
        }
        private void button3_Click(object sender, EventArgs e)
        {
            Dictionary <string, List <LineData> > allPortID  = new Dictionary <string, List <LineData> >();
            Dictionary <string, List <string> >   samePortID = new Dictionary <string, List <string> >();

            ReadConfig(allPortID, samePortID);

            #region Overwrite
            StringBuilder OverwriteSB = new StringBuilder();
            List <int>    hasChange   = new List <int>();

            Dictionary <int, LineData> lineDataDir = new Dictionary <int, LineData>();

            List <LineData> fileData = new List <LineData>();

            int firstPortID = 0;

            foreach (KeyValuePair <string, List <LineData> > item in allPortID)
            {
                if (item.Value != null)
                {
                    if (item.Value.Count == 1)
                    {
                        int id = 0;
                        if (int.TryParse(item.Value[0].portID, out id))
                        {
                            fileData.Add(item.Value[0]);
                            if (lineDataDir.ContainsKey(id))
                            {
                                while (true)
                                {
                                    if (lineDataDir.ContainsKey(id) || allPortID.ContainsKey(id.ToString()))
                                    {
                                        id++;
                                        continue;
                                    }
                                    break;
                                }
                                lineDataDir.Add(id, item.Value[0]);
                            }
                            else
                            {
                                lineDataDir.Add(id, item.Value[0]);
                            }
                        }
                        else
                        {
                            fileData.Add(item.Value[0]);
                        }
                        continue;
                    }
                    bool isFirst = true;
                    foreach (var data in item.Value)
                    {
                        hasChange.Add(data.lineIndex);

                        if (!data.isPortID)
                        {
                            fileData.Add(data);
                        }
                        else
                        {
                            if (firstPortID <= 0)
                            {
                                bool result = int.TryParse(data.portID, out firstPortID);
                                if (!result)
                                {
                                    this.richTextBox1.AppendText("TryParse Error: " + string.Format("First:  行数:{0} -> {1}\r\n", data.lineIndex, data.ToString()));
                                }
                            }
                            int portID = firstPortID;
                            if (isFirst)
                            {
                                isFirst = false;
                                while (true)
                                {
                                    if (lineDataDir.ContainsKey(portID) || allPortID.ContainsKey(portID.ToString()))
                                    {
                                        portID = ++firstPortID;
                                        continue;
                                    }
                                    break;
                                }

                                fileData.Add(data);
                                lineDataDir.Add(portID, data);

                                continue;
                            }
                            do
                            {
                                if (lineDataDir.ContainsKey(portID) || allPortID.ContainsKey(portID.ToString()))
                                {
                                    portID = ++firstPortID;
                                    continue;
                                }
                                data.portID = portID.ToString();
                                fileData.Add(data);

                                lineDataDir.Add(portID, data);
                                firstPortID++;
                                break;
                            }while (true);
                        }
                    }
                }
            }

            fileData.Sort((x, y) => { return(x.lineIndex - y.lineIndex); });

            for (int i = 0; i < fileData.Count; i++)
            {
                LineData item = fileData[i];
                OverwriteSB.Append(item.ToString());
                if (i < fileData.Count - 1)
                {
                    OverwriteSB.Append("\n");
                }
            }
            string   path     = this.textBox1.Text;
            FileInfo fileInfo = new FileInfo(path);
            string   newPath  = Path.Combine(fileInfo.Directory.FullName, "new" + Path.GetFileNameWithoutExtension(fileInfo.FullName) + fileInfo.Extension);
            if (File.Exists(newPath))
            {
                File.Delete(newPath);
            }
            using (StreamWriter sw = new StreamWriter(File.Open(newPath, FileMode.OpenOrCreate, FileAccess.Write)))
            {
                sw.Write(OverwriteSB.ToString());
            }
            #endregion
        }