2015-04-22 164 views
1

我需要幫助,試圖把一個大的文本文件〜1000行,並將其逐行放入一個字符串數組中。將文本文件逐行寫入字符串數組

例子:

string[] s = {firstLineHere, Secondline, etc}; 

我也想辦法找到的第一個字,只是該行的第一個字,而一旦第一個字就發現,複製整個行。只找到第一個字或每一行!

+2

'System.IO.File.ReadAllLines()'它不是一行行,但否則應該執行作業 – Plutonix

+0

@PraveenPaulose,在我發佈和刪除評論後才意識到它。 –

+1

您可以提供更多關於您爲什麼認爲〜1000行是大文檔的信息嗎?這些線條非常長嗎? –

回答

1

有一種內置的方法來實現您的要求。

string[] lines = System.IO.File.ReadAllLines(@"C:\sample.txt"); 

如果你想逐行讀取文件中的行

List<string> lines = new List<string>(); 
using (StreamReader reader = new StreamReader(@"C:\sample.txt")) 
{ 
    while (reader.Peek() >= 0) 
    { 
     string line = reader.ReadLine(); 
     //Add your conditional logic to add the line to an array 
     if (line.Contains(searchTerm)) { 
      lines.Add(line); 
     } 
    } 
} 
+0

之前使用過的最大的文本文件,這種方式不適用於我的搜索,我試圖找到第一個單詞,一旦找到,將其餘的行放入一個字符串。有沒有其他方法? –

+3

@The_Reich:那麼你應該寫一個描述你所需要的問題。這是非常糟糕的形式。 –

+3

@The_Reich請更新您的問題,準確說明您正在嘗試做什麼,否則您將無法獲得所需的答案。 – Tim

1

您可以File.ReadAllLines一點點的LINQ合併完成這個(以完成除的註釋中規定的問題普利文的回答

string[] identifiers = { /*Your identifiers for needed lines*/ }; 

string[] allLines = File.ReadAllLines("C:\test.txt"); 

string[] neededLines = allLines.Where(c => identifiers.Contains(c.SubString(0, c.IndexOf(' ') - 1))).ToArray(); 

或使其更多的是一個內襯:

string[] lines = File.ReadAllLines("your path").Where(c => identifiers.Contains(c.SubString(0, c.IndexOf(' ') - 1))).ToArray(); 

這將爲您提供文檔中所有行的數組,它們以您在標識符字符串數組中定義的關鍵字開始。

0

您可以使用的另一個選項是讀取每條單獨的行,同時將該行分割爲多個段,並僅將第一個元素與提供的搜索詞進行比較。我已經提供了下面一個完整的工作演示:

解決方案:

class Program 
{ 
    static void Main(string[] args) 
    { 
     // Get all lines that start with a given word from a file 
     var result = GetLinesWithWord("The", "temp.txt"); 

     // Display the results. 
     foreach (var line in result) 
     { 
      Console.WriteLine(line + "\r"); 
     } 

     Console.ReadLine(); 
    } 

    public static List<string> GetLinesWithWord(string word, string filename) 
    { 
     List<string> result = new List<string>(); // A list of strings where the first word of each is the provided search term. 

     // Create a stream reader object to read a text file. 
     using (StreamReader reader = new StreamReader(filename)) 
     { 
      string line = string.Empty; // Contains a single line returned by the stream reader object. 

      // While there are lines in the file, read a line into the line variable. 
      while ((line = reader.ReadLine()) != null) 
      { 
       // If the line is white space, then there are no words to compare against, so move to next line. 
       if (line != string.Empty) 
       { 
        // Split the line into parts by a white space delimiter. 
        var parts = line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); 

        // Get only the first word element of the line, trim off any additional white space 
        // and convert the it to lowercase. Compare the word element to the search term provided. 
        // If they are the same, add the line to the results list. 
        if (parts.Length > 0) 
        { 
         if (parts[0].ToLower().Trim() == word.ToLower().Trim()) 
         { 
          result.Add(line); 
         } 
        } 
       } 
      } 
     } 

     return result; 
    } 
} 

當樣品文本文件可能包含:

怎能我知道你在保持
球死亡的靈魂,
當所有的時間都可以枯萎睡覺
我們踩在塵土之中嗎?

因爲我會感到不斷的痛苦
如果我遇到你的溫柔的存在不是;
也沒有聽到我愛的聲音,也沒有再讀
在你最溫柔的目光中溫柔的思想。

你自己溫順的心不會要求我在那裏嗎?
那個最愛我的心是誰給的?
我在地球上的名字永遠在你的祈禱中,
難道它會從你的舌頭放逐在天堂嗎?

在天上的生命呼吸風拂草地,
在光榮球的輝煌,無拘無束的心靈
和較大的動作,
你願意忘記,這裏加入了我們的愛情?

通過所有的暴風雨過去住的愛,
,怯生生地跟我嚴厲自然孔,
和更深的增長,投標到最後,
必用的生活到期,並沒有更多?

比我的快樂多了,還有更大的光線,
在那裏等待着你;因爲你已經屈從於你的意願
在對正義的歡迎致敬中,
並且愛護所有,並且善良的生病。

對我來說,我居住的骯髒的關懷,
收縮和消耗我的心,因爲熱量的滾動;
憤怒已經留下了它的疤痕 - 地獄之火
已經在我的靈魂上留下了可怕的傷疤。

然而,儘管你wear'st天空的榮耀,
你不再保持相同的可愛的名字,
同樣公平的周到額頭,溫柔的眼睛,
可愛天上的甜蜜氣氛,又是同一?

你必不教我,在這平靜的家,
,我學會了在this--
智慧病得很智慧,這就是愛 - 直到我成爲
在幸福的土地你的伴侶合?

你想獲取每一行,其中行的第一個字是「」通過調用像這樣的方法的話:

var result = GetLinesWithWord("The", "temp.txt"); 

你的測試結果則是以下幾點:

死者的遊魂,
通過所有的暴風雨過去住的愛,
同樣公平的你ghtful眉頭,又溫柔的眼睛,
我在this--
學到了生病智慧是愛智慧 - 直到我成爲

希望這回答你的問題充分足夠。

+0

這是什麼方法可以稱爲@James Shaw,當我將「單詞」設置爲我想查找的單詞時,它似乎沒有返回任何單詞! –

+0

@The_Reich我已經更新了我提供的解決方案,以便更清晰。爲了測試它,用上面的代碼替換你現有的程序類。請讓我知道你是否需要任何進一步的幫助。 –

+0

非常感謝! –