private static extern bool DLL_TBApiScaleCoordinates(ref long handle, ref data_block data, ref int x, ref int y);
        private void button1_Click(object sender, EventArgs e)
        {
            List <string>     data_string_raw = new List <string>(textBox1.Lines);
            List <data_block> datas           = new List <data_block>();

            for (int i = data_string_raw.Count - 1; i >= 0; i--)
            {
                string str = data_string_raw[i];
                str = str.Replace(" ", "");
                str = str.Replace("\r", "");
                str = str.Replace("\n", "");
                str = str.Replace("\t", "");
                if (str == "")
                {
                    data_string_raw.RemoveAt(i);
                }
            }
            for (int i = data_string_raw.Count - 1; i >= 0; i--)
            {
                string str = data_string_raw[i];
                str = MergeSpace(str);
                string[]   split_space = str.Split(' ');
                data_block db          = new data_block();
                db.learning_rate = double.Parse(split_space[0]);
                db.P             = double.Parse(split_space[1]);
                db.I             = double.Parse(split_space[2]);
                db.D             = double.Parse(split_space[3]);
                str = get_list(str, db.train_lossf);
                str = get_list(str, db.val_lossf);
                str = get_list(str, db.train_accf);
                str = get_list(str, db.val_accf);
                datas.Add(db);
            }
            if (File.Exists("excel.csv"))
            {
                int k = 0;
                while (File.Exists("excel.csv." + k + ".bak"))
                {
                    k++;
                }
                File.Move("excel.csv", "excel.csv." + k + ".bak");
            }
            StreamWriter sw = new StreamWriter("./excel.csv");

            for (int i = 0; i < datas.Count; i++)
            {
                sw.Write(datas[i].learning_rate + "," + datas[i].P + "," + datas[i].I + "," + datas[i].D + ", ,");
                for (int j = 0; j < datas[i].train_lossf.Count; j++)
                {
                    sw.Write(datas[i].train_lossf[j] + ",");
                }
                sw.Write(" ,");
                for (int j = 0; j < datas[i].val_lossf.Count; j++)
                {
                    sw.Write(datas[i].val_lossf[j] + ",");
                }
                sw.Write(" ,");
                for (int j = 0; j < datas[i].val_lossf.Count; j++)
                {
                    sw.Write(datas[i].val_lossf[j] + ",");
                }
                sw.Write(" ,");
                for (int j = 0; j < datas[i].val_accf.Count; j++)
                {
                    sw.Write(datas[i].val_accf[j] + ",");
                }
                sw.Write(" \r\n");
            }
            sw.Close();
            if (checkBox1.Checked)
            {
                for (int i = 0; i < datas.Count; i++)
                {
                    Table tb = new Table();
                    tb.label1.Text = "learning_rate = " + datas[i].learning_rate.ToString("G10");
                    tb.label2.Text = "P = " + datas[i].P.ToString("G10");
                    tb.label3.Text = "I = " + datas[i].I.ToString("G10");
                    tb.label4.Text = "D = " + datas[i].D.ToString("G10");

                    tb.textBox1.Text = datas[i].learning_rate.ToString("G10") + ", " +
                                       datas[i].P.ToString("G10") + ", " +
                                       datas[i].I.ToString("G10") + ", " +
                                       datas[i].D.ToString("G10");

                    tb.chart1.Titles[0].Text = "train_lossf";
                    for (int j = 0; j < datas[i].train_lossf.Count; j++)
                    {
                        tb.chart1.Series[0].Points.AddXY(j, datas[i].train_lossf[j]);
                    }
                    tb.chart1.Series[0].Points[0].Label = datas[i].train_lossf[0].ToString("G6");
                    tb.chart1.Series[0].Points[datas[i].train_lossf.Count - 1].Label = datas[i].train_lossf[datas[i].train_lossf.Count - 1].ToString("G6");

                    tb.chart2.Titles[0].Text = "val_lossf";
                    for (int j = 0; j < datas[i].val_lossf.Count; j++)
                    {
                        tb.chart2.Series[0].Points.AddXY(j, datas[i].val_lossf[j]);
                    }
                    tb.chart2.Series[0].Points[0].Label = datas[i].val_lossf[0].ToString("G6");
                    tb.chart2.Series[0].Points[datas[i].val_lossf.Count - 1].Label = datas[i].val_lossf[datas[i].val_lossf.Count - 1].ToString("G6");

                    tb.chart3.Titles[0].Text = "train_accf";
                    for (int j = 0; j < datas[i].train_accf.Count; j++)
                    {
                        tb.chart3.Series[0].Points.AddXY(j, datas[i].train_accf[j]);
                    }
                    tb.chart3.Series[0].Points[0].Label = datas[i].train_accf[0].ToString("G6");
                    tb.chart3.Series[0].Points[datas[i].train_accf.Count - 1].Label = datas[i].train_accf[datas[i].train_accf.Count - 1].ToString("G6");

                    tb.chart4.Titles[0].Text = "val_accf";
                    for (int j = 0; j < datas[i].val_accf.Count; j++)
                    {
                        tb.chart4.Series[0].Points.AddXY(j, datas[i].val_accf[j]);
                    }
                    tb.chart4.Series[0].Points[0].Label = datas[i].val_accf[0].ToString("G6");
                    tb.chart4.Series[0].Points[datas[i].val_accf.Count - 1].Label = datas[i].val_accf[datas[i].val_accf.Count - 1].ToString("G6");

                    //tb.chart1.Series.Add()
                    tb.Show();
                }
            }
            else
            {
                MessageBox.Show("Done!");
            }
            return;
        }