我想替换特定部分的一行中的特定文本。示例文本:
begin 355 weapon item_type=weapon
begin 356 armor item_type=armor
我想在第1行将item_type=weapon
替换为值item_type=none
,而不替换所有355
文本,并且不清除所有行并替换所有有1行。到目前为止,这是我的代码:
weapon
以下是我使用的实线:
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();
}
答案 0 :(得分:2)
这不是在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);
在记事本中再次打开文件。