2013-06-01 58 views
1

即時通訊設法做一個代碼,通過文本文件搜索特定的短語,然後填充文本框中的行,如果短語發生在那。這段代碼沒有錯誤,但根本不起作用。任何人都知道什麼是錯的?我不太確定我所做的是否是遠程正確的。搜索文本文件中的短語,然後顯示該行

{ 
    tuitDisplayTextBox.Text = ""; 
    string[] tuitFilePath = File.ReadAllLines(Server.MapPath("~") +"/App_Data/tuitterMessages.txt"); 

    for (int i = 0; i < tuitFilePath.Length; i++) 
    { 
     if (tuitFilePath[i].Contains(searchTextBox.Text)) 
     { 
      tuitDisplayTextBox.Text += tuitFilePath[i]; 
     } 
    } 
+0

我猜這只是把最後一行放在它裏面,我是對嗎?我會發佈一個應該工作的LINQ解決方案。 –

+0

代碼不會結果什麼? – matzone

+0

code does not result anything –

回答

1

您的解決方案應該工作......匹配的最後一行,只有那一行。

雖然LINQ可以幫助你。這是一個應該可以工作的解決方案。

tuitDisplayTextBox.Text = 
    File.ReadLines(Server.MapPath("~") +"/App_Data/tuitterMessages.txt") 
     .Where(n => n.Contains(searchTextBox.Text)).Aggregate((a, b) => 
      a + Enviroment.NewLine + b); 

在這裏,它的作用是讀取文件的行爲IEnumerable<string>,然後我篩選與Where方法,這基本上意味着「如果這個元素的條件爲真,增加這個要素到要返回的東西的列表,否則不要添加它「。然後Aggregate有點複雜。基本上它是從集合中獲取前兩個項目,然後通過它們傳遞一個返回值的lambda。然後用該結果和第三個元素再次調用lambda。然後,結果並用第四個元素調用它。等等。

下面是一些代碼更類似於你也將工作:

tuitDisplayTextBox.Text = ""; 
IEnumerable<string> lines = 
    File.ReadAllLines(Server.MapPath("~") +"/App_Data/tuitterMessages.txt"); 
StringBuilder sb = new StringBuilder 
foreach (string line in lines) 
{ 
    if (line.Contains(searchTextBox.Text)) 
    { 
     sb.AppendLine(line); 
    } 
} 
tuitDisplayTextBox.Text = sb.ToString(); 

這是一個有點不同。首先它將所有線路讀入IEnumerable<string>稱爲線路。然後它產生一個StringBuilder對象(基本上是一個可變的string)。之後,它會在IEnumerable<string>(我認爲在這裏更合適)中使用這些行,然後如果該行包含所需的文本,則會將該行和一個換行符添加到StringBuilder對象。之後,它將您的文本框的文本設置爲所有這些結果,方法是獲取StringBuilder實例的string表示形式。

如果你真的一個for循環,這裏的修改,以使用一個for循環的代碼:

tuitDisplayTextBox.Text = ""; 
string[] lines = 
    File.ReadAllLines(Server.MapPath("~") +"/App_Data/tuitterMessages.txt"); 
StringBuilder sb = new StringBuilder 
for (int i = 0; i < lines.Length; i++) 
{ 
    if (lines[i].Contains(searchTextBox.Text)) 
    { 
     sb.AppendLine(lines[i]); 
    } 
} 
tuitDisplayTextBox.Text = sb.ToString(); 
+0

不太確定這是如何工作的,我想使用類似於我的代碼,但謝謝! –

+0

@AnthonyJohnson會補充說,只是一秒鐘。 –

+0

@AnthonyJohnson稍微超過了一秒;),但它在這裏。 –

0

請注意,File.ReadAllLines打破在「\ r」或「\ n」的句子。因此,如果你搜索「你好世界」,並且這個文本在文件中被分成2行(例如「...... hello/n world」,那麼你的代碼將失敗...

因此,使用ReadAllText )返回一個字符串包含所有文件的文本 儘管如此,你可能會遇到文件編碼有時會遇到的問題,但這是另一個問題。

之後,如果找到正在搜索的文本,可以使用ReadAllLines來決定文本的位置

+0

他**的意思是**做到這一點...... –

相關問題