我需要幫助,試圖把一個大的文本文件〜1000行,並將其逐行放入一個字符串數組中。將文本文件逐行寫入字符串數組
例子:
string[] s = {firstLineHere, Secondline, etc};
我也想辦法找到的第一個字,只是該行的第一個字,而一旦第一個字就發現,複製整個行。只找到第一個字或每一行!
我需要幫助,試圖把一個大的文本文件〜1000行,並將其逐行放入一個字符串數組中。將文本文件逐行寫入字符串數組
例子:
string[] s = {firstLineHere, Secondline, etc};
我也想辦法找到的第一個字,只是該行的第一個字,而一旦第一個字就發現,複製整個行。只找到第一個字或每一行!
有一種內置的方法來實現您的要求。
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);
}
}
}
之前使用過的最大的文本文件,這種方式不適用於我的搜索,我試圖找到第一個單詞,一旦找到,將其餘的行放入一個字符串。有沒有其他方法? –
@The_Reich:那麼你應該寫一個描述你所需要的問題。這是非常糟糕的形式。 –
@The_Reich請更新您的問題,準確說明您正在嘗試做什麼,否則您將無法獲得所需的答案。 – Tim
您可以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();
這將爲您提供文檔中所有行的數組,它們以您在標識符字符串數組中定義的關鍵字開始。
您可以使用的另一個選項是讀取每條單獨的行,同時將該行分割爲多個段,並僅將第一個元素與提供的搜索詞進行比較。我已經提供了下面一個完整的工作演示:
解決方案:
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--
學到了生病智慧是愛智慧 - 直到我成爲
希望這回答你的問題充分足夠。
這是什麼方法可以稱爲@James Shaw,當我將「單詞」設置爲我想查找的單詞時,它似乎沒有返回任何單詞! –
@The_Reich我已經更新了我提供的解決方案,以便更清晰。爲了測試它,用上面的代碼替換你現有的程序類。請讓我知道你是否需要任何進一步的幫助。 –
非常感謝! –
'System.IO.File.ReadAllLines()'它不是一行行,但否則應該執行作業 – Plutonix
@PraveenPaulose,在我發佈和刪除評論後才意識到它。 –
您可以提供更多關於您爲什麼認爲〜1000行是大文檔的信息嗎?這些線條非常長嗎? –