替换一行中的特定文本
本文关键字:文本 一行 替换 | 更新日期: 2023-09-27 18:37:02
我想替换特定部分的一行中的特定文本。 示例文本:
begin 355 weapon item_type=weapon
begin 356 armor item_type=armor
我想将item_type=none
item_type=weapon
替换为第 1 行的值355
,而无需替换其中的所有文本weapon
并且不清理所有行并全部替换为 1 行。这是我到目前为止的代码:
private void button2_Click(object sender, EventArgs e)
{
var data = File
.ReadLines("itemdata.txt")
.Where(x => x.Contains(itemSrchtxt.Text))
.Take(1)
.SelectMany(x => x.Split(''t'))
.Select(x => x.Split('='))
.Where(x => x.Length > 1)
.ToDictionary(x => x[0].Trim(), x => x[1]);
StreamReader reader = new StreamReader(Directory.GetCurrentDirectory() + @"'itemdata.txt");
string content = reader.ReadLine();
reader.Close();
content = Regex.Replace(content, data["item_type"], textitem_type.Text);
StreamWriter write = new StreamWriter(Directory.GetCurrentDirectory() + @"'itemdata.txt");
write.WriteLine(content);
write.Close();
}
这是我使用的真实行:
item_begin questitem 783 [_alankells_receipt] item_type=questitem
这在 LINQ 中不是,但 LINQ 看起来有点矫枉过正:
var lines = File.ReadAllLines(Directory.GetCurrentDirectory() + @"'itemdata.txt");
if (lines.Length > 0)
{
var fields = lines[0].Split(''t');
if (fields.Length >= 4 && fields[1] == "355" && fields[3] == "item_type=weapon")
fields[3] = "item_type=none";
lines[0] = string.Join("'t", fields);
}
File.WriteAllLines(Directory.GetCurrentDirectory() + @"'itemdata.txt", lines);
完成测试
创建一个名为 C:'temp't.txt
的文件。在记事本中打开它并将其粘贴到:
begin 355 weapon item_type=weapon
begin 356 armor item_type=armor
确保有一个选项卡('t
)而不是355和武器之间的空格,并且在356和装甲之间的第二行相同(当我复制粘贴时,选项卡显示为空格)。保存文件并关闭记事本。
运行以下代码(我使用 LinqPad):
var lines = File.ReadAllLines(@"C:'temp't.txt");
if (lines.Length > 0)
{
var fields = lines[0].Split(''t');
if (fields.Length >= 4 && fields[1] == "355" && fields[3] == "item_type=weapon")
fields[3] = "item_type=none";
lines[0] = string.Join("'t", fields);
}
File.WriteAllLines(@"C:'temp't.txt", lines);
在记事本中再次打开该文件。