将除特定行之外的所有行复制到文本文件

nik*_*nik 3 c# linq

我试图从所有数据都写入sample_data.txtt_sdata.txt除非通过对用户输入的字符串,该行textbox (txt_key)可以找到.

[sample data]
key,item,qty
0001,Apple,5
0002,Orange,10
0003,Grapes,15
Run Code Online (Sandbox Code Playgroud)

所以如果我0002在文本框中输入,t_sdata.txt应该包含:

[sample output data]
key,item,qty
0001,Apple,5
0003,Grapes,15
Run Code Online (Sandbox Code Playgroud)

这就是我现在所拥有的目前无法保存的东西:

string plist = @"sample_data.txt";
string tdata = @"t_sdata.txt";
var dataline = File.ReadAllLines(plist)
    .SkipWhile(l => !l.StartsWith(txt_key.Text))
    .TakeWhile(l => !l.StartsWith(txt_key.Text) && l != null);
using (StreamWriter w = File.AppendText(tdata))
{
    foreach (var lines in dataline)
    {
        if (dataline == null)
            w.WriteLine(lines);
    }
}
Run Code Online (Sandbox Code Playgroud)

我一直在玩,SkipWhile/TakeWhile但我显然做错了什么.

(不确定是否相关)注意:密钥可以具有不同的长度,并且01可以具有与001不同的数据

nvo*_*igt 7

您的解决方案似乎很复杂,您并不关心哪个行未被选中到新文件中:

string plist = @"sample_data.txt";
string tdata = @"t_sdata.txt";
string input = "0002";

File.WriteAllLines(tdata, File.ReadLines(plist).Where(line => !line.StartsWith(input)));
Run Code Online (Sandbox Code Playgroud)

为您的文件格式,稍微好一点的解决方案是真正分开不同的领域,所以025匹配0220,Test,5:

File.WriteAllLines(tdata, File.ReadLines(plist)
                              .Where(line => line.Split(new char[]{ ',' }).First() != input));
Run Code Online (Sandbox Code Playgroud)

  • 很好,或许会建议.在这种情况下,.StartsWith()会比.Contains()好吗? (2认同)