首页 > 解决方案 > 如何替换文本文件中以特定单词开头并以 C# 中的特殊字符结尾的字符串?

问题描述

我正在开发一个应用程序,它通过读取和写入文本文件来提供生产过程的管理。首先,它从文本文件中读取信息并将信息放入 datagridview 中,例如:

在此处输入图像描述

然后应该可以在更改单元格值时更新文本文件中的信息。

这是示例测试文件:

567,埃因霍温,IGT,21,剥离_e=20/05/2020,剥离_s=21/05/2020,剥离_f=,Cleaning_e=23/05/2020,Cleaning_s=27/05/2020,Cleaning_f=28/05/2020 ,Paint_e=28/05/2020,Paint_s=28/05/2020,Paint_f=29/05/2020,Cabinet_e=29/05/2020,Cabinet_s=31/05/2020,Cabinet_f=,Table_e=,Table_s=, Table_f=05/06/2020,Stand_e=05/06/2020,Stand_s=08/06/2020,Stand_f=,Display_e=08/06/2020,Display_s=11/06/2020,Display_f=,UControls_e=15/ 06/2020,UControls_s=,UControls_f=,Test_e=19/06/2020,Test_s=,Test_f=20/06/2020,Prepack_e=21/06/2020,Prepack_s=22/06/2020,Prepack_f=,Endpack_e= 27/06/2020,Endpack_s=28/06/2020,Endpack_f=,Release_e=30/06/2020,Release_s=,Release_f=,

我想要做的基本上是用单元格中输入的新日期替换文件中存储的日期。例如,我想检查字符串是否以在单元格中输入的新日期 替换它Cleaning_e=23/05/2020,开头Cleaning_e=和结尾。,Cleaning_e=12/09/2020,

我目前的代码是:

private void ExportToTextFile(int selectedDate)
        {
            string filename = dataGridView1.Rows[clickedRow].Cells[0].Value.ToString();
           // TextWriter writer = new StreamWriter($"../../{filename}.txt");
            var text = new StringBuilder();

            foreach (string s in File.ReadAllLines($"../../{filename}.txt"))
            {
               /* if (clickedColumn == 3 && selectedDate == 0)
                    text.AppendLine(s.Replace("Stripping_e=", $"Stripping_e={dataGridView1.Rows[clickedRow].Cells[clickedColumn].Value.ToString()}"));
                else if (clickedColumn == 3 && selectedDate == 1)
                    text.AppendLine(s.Replace("Stripping_s=", $"Stripping_s={dataGridView1.Rows[clickedRow].Cells[clickedColumn].Value.ToString()}"));
                else if (clickedColumn == 3 && selectedDate == 2)
                    text.AppendLine(s.Replace("Stripping_f=", $"Stripping_f={dataGridView1.Rows[clickedRow].Cells[clickedColumn].Value.ToString()}"));
                else if (clickedColumn == 3 && selectedDate == 3)
                    text.AppendLine(s.Replace("Stripping_d=", $"Stripping_d={dataGridView1.Rows[clickedRow].Cells[clickedColumn].Value.ToString()}"));
                else */if (clickedColumn == 4 && selectedDate == 0)
                {
                    text.AppendLine(s.Replace("Cleaning_e=", $"Cleaning_e={dataGridView1.Rows[clickedRow].Cells[clickedColumn].Value.ToString()}"));
                    
                }/*
                else if (clickedColumn == 4 && selectedDate == 1)
                    text.AppendLine(s.Replace("Cleaning_s=", $"Cleaning_s={dataGridView1.Rows[clickedRow].Cells[clickedColumn].Value.ToString()}"));
                else if (clickedColumn == 4 && selectedDate == 2)
                    text.AppendLine(s.Replace("Cleaning_f=", $"Cleaning_f={dataGridView1.Rows[clickedRow].Cells[clickedColumn].Value.ToString()}"));
                else if (clickedColumn == 4 && selectedDate == 3)
                    text.AppendLine(s.Replace("Cleaning_d=", $"Cleaning_d={dataGridView1.Rows[clickedRow].Cells[clickedColumn].Value.ToString()}"));*/
            }
            using (var file = new StreamWriter(File.Create($"../../{filename}.txt")))
            {
                file.Write(text.ToString());
            }

        }

在我完成后将text.AppendLine(s.Replace("Cleaning_e=",$"Cleaning_e={dataGridView1.Rows[clickedRow].Cells[clickedColumn].Value.ToString()}"));其写入文件:Cleaning_e=12/09/202023/05/2020.

在追加新日期之前,如何确保删除输入的旧日期?

我尝试删除此字符串并写入已删除字符串的索引,但我无法使其工作。我也尝试过使用正则表达式,但没有成功。

提前致谢!

标签: c#regexappendtext-files

解决方案


为了用正则表达式替换它,您可以使用

var testText = "some other stuff Cleaning_e=12/43/4555, some more ";
var newValue = "78/65/0000";
var rx = new Regex(@"Cleaning_e=(\d\d/\d\d/\d\d\d\d)?");
var result = rx.Replace(testText, $"Cleaning_e={newValue}");

这将替换日期。请注意,这会替换每次出现的 Cleaning_e 并要求日期格式准确地具有 2 2 和 4 位。如果位数不同,您可以使用

var rx = new Regex(@"Cleaning_e=(\d+/\d+/\d+)?");

反而。

我宁愿建议将其解析为适当的结构并更改那里的值,而不是直接操作文本文件。


推荐阅读