C# 将除特定行以外的所有行复制到文本文件
我正在尝试将C# 将除特定行以外的所有行复制到文本文件,c#,linq,C#,Linq,我正在尝试将sample\u data.txt中的所有数据写入t\u sdata.txt,除了可以找到用户在文本框(txt\u键)上输入的字符串的行之外 [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 这是我现
sample\u data.txt
中的所有数据写入t\u sdata.txt
,除了可以找到用户在文本框(txt\u键)
上输入的字符串的行之外
[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
bit,但显然我做错了什么
(不确定是否相关)注意:键可以有不同的长度,01可以有不同于001的数据。您的解决方案似乎很复杂,您并不真正关心哪一行没有被选择到新文件中:
string plist = @"sample_data.txt";
string tdata = @"t_sdata.txt";
string input = "0002";
File.WriteAllLines(tdata, File.ReadLines(plist).Where(line => !line.StartsWith(input)));
对于您的文件格式,一个稍微好一点的解决方案是实际分离不同的字段,因此02
和5
不匹配0220,Test,5
:
File.WriteAllLines(tdata, File.ReadLines(plist)
.Where(line => line.Split(new char[]{ ',' }).First() != input));
不确定这里会发生什么,因为您正在联机向StreamWriter写入一行if(dataline==null)。逻辑上说,对于dataline中的所有行,如果dataline为null,则写一行-没有意义,或者我遗漏了什么?很好,可能会建议这样做。StartWith()比.Contains()更好。在这种情况下?@MartinDavies取决于OP想要什么,代码说
StartWith
,他的文本说“可以找到”。。。我想OP会找到答案的。也许你的意思是File.writeAllines
的确-事实上,我想StartsWith(input+“,”)会更好,因为键可以有不同的长度。@MartinDavies你是对的,我添加了一个改进的语句。