2017-10-12 37 views
3

我試圖將所有數據從sample_data.txt寫入t_sdata.txt,除了可找到用戶在textbox (txt_key)上輸入的字符串所在的行之外。將除特定行以外的所有行復制到文本文件

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

所以,如果我在文本框中輸入0002t_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

+0

不確定這裏會發生什麼,因爲你在線寫入StreamWriter的行if(dataline == null)。邏輯上說,對於dataline中的所有行,如果dataline爲null,寫一行 - 沒有意義,或者我錯過了什麼? –

回答

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)); 
+2

不錯,建議也許.StartsWith()會比.Contains()在這種情況下更好? –

+1

@MartinDavies取決於OP想要什麼,代碼中說'StartsWith',他的文本顯示「可以找到」......我想OP會發現它。 – nvoigt

+0

也許你的意思是'File.WriteAllLines' –

相關問題