1

以下に示すような構造のテキスト ファイルで作業しています。
これは、日付の後の 5 文字が 1 日を表す連続した文字列の降雨データです。

0005880 W 1926 9-7777-7777-7777-7777-7777-7777-7777-7777-7777  117  130   64-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777
0005880 W 192610-7777-7777-7777-7777-7777-7777-7777-7777-7777   23-7777-7777-7777-7777    3-7777  226  462   71-7777-7777  157   76   15-7777-7777-7777-7777-7777-7777-7777
0005880 W 192611    3   20-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777   61  142-7777-7777-7777    8-7777-7777-7777-7777
0005880 W 192612-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777  132-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777-7777

年と月は、文字列内の (10, 4) と (14, 2) の位置で表されます。私の問題は、次の行が従うべき月ではない場合があることです。以下に示すように、1 か月分のデータが欠落している行を追加するコードを作成しました。

public void findGapsToolStripMenuItem_Click(object sender, EventArgs e)
    {


        TabPage tp = new TabPage();
        RichTextBox rtb = new RichTextBox();
        rtb.Dock = DockStyle.Fill;
        rtb.Multiline = true;
        rtb.AcceptsTab = true;
        rtb.WordWrap = false;





        Stream myStream;
        OpenFileDialog openFileDialog1 = new OpenFileDialog();

        if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            if ((myStream = openFileDialog1.OpenFile()) != null)
            {


                tp.Controls.Add(rtb);
                tabControl1.TabPages.Add(tp);


                string strfilename = openFileDialog1.FileName;
                string[] lines = File.ReadAllLines(strfilename);
                string[] pathArr = strfilename.Split('\\');
                string[] fileArr = pathArr.Last().Split();
                string filen = fileArr.Last().ToString();



                tp.Text = filen;

                int pyear = 0;
                int pmon = 0;
                int imon = 0;
                int iyear = 0;


                foreach (string line in lines)
                {
                    string missing = "-9999";
                    string year = line.Substring(10, 4);
                    string mon = line.Substring(14, 2);
                    iyear = Convert.ToInt32(year);
                    imon = Convert.ToInt32(mon);


                    if (pyear == 0)
                    {
                        pyear = iyear;
                        pmon = imon;

                        rtb.AppendText(line + "\n");

                    }
                    else
                    {
                        int pt = pyear * 12 + pmon;
                        int t = iyear * 12 + imon;
                        if ((pt + 1) == t)
                        {

                            rtb.AppendText(line + "\n");
                        }
                        else
                        {

                            rtb.AppendText("Missing Months =" + (t - pt) + "\n");

                        }

                        if (line.Contains(missing))
                        {
                            rtb.AppendText("Missing Days" + "\n");


                        }


                        pyear = iyear;
                        pmon = imon;
                    }

                    rtb.SelectAll();
                    rtb.SelectionAlignment = HorizontalAlignment.Left;
                    rtb.SelectionFont = new Font("Consolas", 10);








                }

            }

        }


    }

私の質問は、欠落している月または日の前の日付までの開始日という名前のテキスト ファイルに、欠落している月または日の前のすべての行をエクスポートする方法はありますか。例1926.9.1926.10.txt。次に、欠落している次の月または日の前に、データの次のセクションのファイルを続行します。したがって、本質的に、ギャップのない年または月のデータを含む複数のテキスト ドキュメントになります。また、すべてのテキスト ファイルが作成される最初の 14 文字 (iE 0005880 W) である駅番号のフォルダーを自動的に作成するようにしたいと思います。

アップデート

 public void findGapsToolStripMenuItem_Click(object sender, EventArgs e)
    {


        TabPage tp = new TabPage();
        RichTextBox rtb = new RichTextBox();
        rtb.Dock = DockStyle.Fill;
        rtb.Multiline = true;
        rtb.AcceptsTab = true;
        rtb.WordWrap = false;





        Stream myStream;
        OpenFileDialog openFileDialog1 = new OpenFileDialog();

        if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            if ((myStream = openFileDialog1.OpenFile()) != null)
            {


                tp.Controls.Add(rtb);
                tabControl1.TabPages.Add(tp);


                string strfilename = openFileDialog1.FileName;
                string[] lines = File.ReadAllLines(strfilename);
                string[] pathArr = strfilename.Split('\\');
                string[] fileArr = pathArr.Last().Split();
                string filen = fileArr.Last().ToString();
                string pat = @"C:\Test\" + filen;
                System.IO.Directory.CreateDirectory(pat);
                int i;





                tp.Text = filen;

                int pyear = 0;
                int pmon = 0;
                int imon = 0;
                int iyear = 0;
                int j = 1;


                foreach (string line in lines)
                {
                    using (StreamWriter sw = new StreamWriter(@"C:\Test\" + filen+".txt"))
                    {



                        string missing = "-9999";
                        string year = line.Substring(10, 4);
                        string mon = line.Substring(14, 2);
                        iyear = Convert.ToInt32(year);
                        imon = Convert.ToInt32(mon);
                        string filepath = @"C:\Test\" + year + "." + mon+".txt";

                        if (pyear == 0)
                        {

                            File.CreateText(filepath);
                            pyear = iyear;
                            pmon = imon;

                            rtb.AppendText(line + "\n");

                            sw.WriteLine(line);


                        }
                        else
                        {

                            File.CreateText(filepath);
                            int pt = pyear * 12 + pmon;
                            int t = iyear * 12 + imon;
                            if ((pt + 1) == t)
                            {

                                rtb.AppendText(line + "\n");
                                sw.WriteLine(line);


                            }
                            else
                            {

                                string path = pat + "\\" + year + "." + mon + ".txt";
                                File.CreateText(path);

                                rtb.AppendText("Missing Months =" + (t - pt) + "\n");

                            }

                            if (line.Contains(missing))
                            {

                                string path = pat + "\\" + year + "." + mon + ".txt";
                                File.CreateText(path);
                                rtb.AppendText("Missing Days" + "\n");


                            }


                            pyear = iyear;
                            pmon = imon;


                        }

                        rtb.SelectAll();
                        rtb.SelectionAlignment = HorizontalAlignment.Left;
                        rtb.SelectionFont = new Font("Consolas", 10);




                    }
                }







            }


        }
    }
4

1 に答える 1