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

时间:2017-10-12 15:41:10

标签: c# linq

我正在尝试将sample_data.txt中的所有数据写入t_sdata.txt,但可以找到用户在textbox (txt_key)上输入的字符串的行。

[sample data]
key,item,qty
0001,Apple,5
0002,Orange,10
0003,Grapes,15

因此,如果我在文本框中输入0002,则t_sdata.txt应包含:

[sample output data]
key,item,qty
0001,Apple,5
0003,Grapes,15

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

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);
    }
}

我一直在玩SkipWhile/TakeWhile位,但我显然做错了。

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

1 个答案:

答案 0 :(得分: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)));

针对您的文件格式稍微更好的解决方案是实际分隔不同的字段,因此025 匹配0220,Test,5

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