c# - 如何替换文本文件中以特定单词开头并以 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
.
在追加新日期之前,如何确保删除输入的旧日期?
我尝试删除此字符串并写入已删除字符串的索引,但我无法使其工作。我也尝试过使用正则表达式,但没有成功。
提前致谢!
解决方案
为了用正则表达式替换它,您可以使用
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+)?");
反而。
我宁愿建议将其解析为适当的结构并更改那里的值,而不是直接操作文本文件。
推荐阅读
- arduino - 当 iBeacon 通过蓝牙接近 esp32 时,如何让继电器打开?通过 arduino
- solidity - 单个 Chainlink HTTP GET 可以从同一个 API 返回 2 个值吗?
- node.js - 在 Node 的不同机器上将 API 调用从前端重定向到后端
- php - PHP cURL 超时和连接超时
- c++ - 如何在 C/C++ 中通过命令行传递输入(不是参数)?
- scala - 预先添加到 Scala 迭代器 - 超时?
- javascript - 如何检查 chai 中的一系列错误?
- c# - MediatR 实例化命令处理程序
- c# - EF错误的解决方法?
- excel - Excel 文件中的单词搜索