0

特定のテキストを特定の行の特定の部分に置き換えたい。テキスト例:

begin 355 weapon item_type=weapon
begin 356 armor item_type=armor

すべてのテキストを置き換えずに、1行目の値を1行に置き換え、すべての行を消去せず、すべてを1行に置き換えitem_type=weaponたいitem_type=noneです。これまでの私のコードは次のとおりです。355weapon

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
4

1 に答える 1

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 と鎧の間の 2 行目に同じスペースがないことを確認してください (コピーして貼り付けると、タブはスペースとして出てきます)。ファイルを保存し、メモ帳を閉じます。

このコードを実行します (私は 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);

メモ帳でファイルを再度開きます。

于 2013-10-28T11:10:21.703 に答える