2016-12-03 65 views
-1

在Visual C#中,我正在執行的按鈕需要讀取.txt文件,並檢查文本文件上的每一行是否以特定字符結尾,如果是,則將該行上的名稱打印出來並打印到消息框。到目前爲止,我已經設法檢查行尾是否存在指定字符的條件,但無法獲取名稱,因爲它位於兩組數字之間。該名稱緊跟在行上的第一個字符之後,就在一組數字開始之前,因爲它們是用戶的ID。如何在文本文件的一行中獲取特定的句子?

這是到目前爲止我的代碼內按鈕:

private void button1_Click(object sender, EventArgs e) 
    { 
     string line, lastchar; 
     // Read the file and display it line by line. 
     System.IO.StreamReader file = new System.IO.StreamReader(@"rato.txt"); 
     while ((line = file.ReadLine()) != null) 
     { 
      lastchar= line.Substring(line.Length - 1, 1); 
      if (lastchar== "2") MessageBox.Show("Prints the name of the user here"); 
     } 
     file.Close(); 
    } 

這是文本文件:

1Paulo111.111.111-11addaqwe2 
2Rambo425.433-628-43ererssd3 
1Momba111.111.111-11asdsad4432 
1Mauricio111.111.111-22wwcssfd2 
1Saulo111.111.111-11qwe1231231 

使按鍵需要檢查,如果當前行與「2」結束並在行中打印名稱。例如,第一行中的名稱是Paulo,當它以「2」結尾時,「Paulo」將被打印到消息框,就像第三行和第四行一樣。否則,它會跳到下一行。 然後它將被打印在消息框中:「Paulo,Momba,Mauricio。

我該怎麼做?

+2

查找「正則表達式」(https://msdn.microsoft.com/en-us/library/hs600312(v=vs.110).aspx) –

回答

2
var names = File.ReadLines(filename) 
       .Where(line => line.EndsWith("2")) 
       .Select(line => Regex.Match(line, @"\p{L}+").Value) 
       .ToList(); 

這將返回一個包含Paulo, Momba, Mauricio.

PS列表:\p{L}:任何Unicode的信。

+0

如何打印? – Kankz

+0

@Kankz你知道如何循環列表嗎? (例如'for','foreach'等.....) –

+0

我不知道,你能向我解釋一下嗎? http://prntscr.com/deymgd – Kankz

1

我同意@ L.B的回答和推薦學習正則表達式的評論。這將是一個乾淨的方法來解決你的問題。我猜你是C#的新手,所以我會提供相應的答案。您應該查看String類的文檔。有幾種方法和屬性您可能會覺得有用。在你的情況下,我們可以看看使用String.EndsWith方法和String.IndexOfAny方法。有了這些方法,我們可以對代碼進行一些修改,使其更清晰易懂。

首先讓我們看一下這一行 - 你寫的代碼將爲你當前的字符串創建一個字符的子字符串,然後你將它與另一個字符串進行比較。你想要知道字符串是否以'2'結尾,所以我們可以使用EndsWith方法來獲取這些信息。

lastchar= line.Substring(line.Length - 1, 1); 
if (lastchar== "2") 

目前可以寫爲:

if (line.EndsWith("2")) 

現在你也想找個名字,這將分兩步走。首先,我們需要找到名稱後面的第一個非字母字符的索引,然後我們可以創建一個子字符串並將其顯示在消息框中。

var numbers = ".-".ToCharArray(); 
if(line.EndsWith("2")) 
{ 
    // Get the index of the first non-letter character after the name 
    var index = line.IndexOfAny(numbers, 1); 
    var name = line.SubString(1, index - 1); 
    MessageBox.Show(name); 
} 

如果你想知道var類型。它只是語法糖,它允許編譯器解釋類型,因此您不必編寫類型名稱。

+0

謝謝,但它沒有顯示任何內容,有什麼不對? http://prntscr.com/df9v4v – Kankz

+0

@Kankz - 我不知道。你應該通過一個調試器來檢查它,看看你是否得到了正確的數據,看它是否正在讀取文件,檢查該行的值是什麼,查看名稱的值等。從截圖中,我可以'回答這些問題。 – pstrjds

相關問題