2017-10-11 80 views
0

在我的previously asked question中,我試圖顯示文本文件中的特定行以顯示到文本框中。即使項目不存在,程序也會顯示文本文件數據c#

我試過解決Jeremy Thompson建議,甚至是pinkfloydx33(這是我堅持)建議的重構解決方案,是的兩個解決方案爲我工作,但我發現程序顯示數據,即使字符串不存在於文件。

例如。如果我輸入以下任何一項:1,01,001,2,02,002,它將繼續執行代碼並顯示數據。任何人都可以告訴我如何解決這個問題?我試圖通過限制他們的輸入來解決這個問題(例如,他們必須輸入4位數字,不多不少),但是我的問題是原始鍵的長度不同,所以我不能應用這種方法。

樣本數據

項目鍵,添加日期,產品名稱,品牌,型號

0001,10/08/2017,5s,蘋果,電話

0002,10/08/2017年,S5,三星,手機

代碼片段

string plist = @"sample_data.txt"; 

var line = File.ReadLines(plist).FirstOrDefault(l => l.Contains(txt_ik.Text)); 
if (line != null) 
{ 
    string[] parts = line.Split(','); 
    txt_data1.Text = parts[2]; 
    txt_data2.Text = parts[3]; 
    txt_data3.Text = parts[4]; 
    MessageBox.Show("It exists!"); 
} 
else 
{ 
    MessageBox.Show("Does not exist!"); 
} 

樣本圖片

編輯

很抱歉的不確定性!用戶需要輸入產品密鑰。當您點擊「提交」並且文件中存在該項目時,它應該在文本框中顯示數據。如果沒有,則會彈出消息說該項目不存在。

+0

目前還不清楚預期行爲是什麼 – DiskJunky

+0

這是否意味着'ITEM KEY'字段可以多於或少於4位?所以你可以有一個12345789的ID? – DonBoitnott

+0

@DonBoitnott是項目密鑰可以是1234567890.沒有特定的長度 – nik

回答

1

Contains返回true如果搜索文本存在於行的任何位置。 如果改變這一行:

var line = File.ReadLines(plist).FirstOrDefault(l => l.Contains(txt_ik.Text)); 

var line = File.ReadLines(plist).FirstOrDefault(l => l.StartsWith(String.Format("{0},", txt_ik.Text))); 

您確保項目鍵等於搜索項。

使用String.Format("{0},", txt_ik.Text)我們還在搜索文本中添加了一個逗號。
然後你確定第一項等於搜索文本。

+0

你是一個拯救生命的人!它現在正常工作,謝謝你傳授這些知識! – nik

+0

看起來不太靈活。如果他們輸入「02」,則嚴格匹配「02」。你不想讓它也匹配「00002」或「00000000002」嗎?你只是回到匹配逐字輸入的內容。 – DonBoitnott

+0

@DonBoitnott你問我還是OP? – MatSnow

0

然後你需要一個不同的Linq。試試這個:

var item = sa.FirstOrDefault(x => Convert.ToInt32(x.Split(',')[0]).Equals(Convert.ToInt32(txt_ik.Text))); 
if (item != null) 
{ 
} 

需要注意的是,雖然這是非常可靠的,它也比較危險,所以你會是明智的,至少它包裝在一個try-catch,但適當的檢查將是最好的。

相關問題