我需要帮助,尝试将大型文本文档~1000行并逐行放入字符串数组中。
示例:
string[] s = {firstLineHere, Secondline, etc};
我还想要一种方法来找到第一个单词,只找到该行的第一个单词,并且一旦找到第一个单词,就复制整行。只查找第一个单词或每行!
答案 0 :(得分: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);
}
}
}
答案 1 :(得分:1)
你可以使用File.ReadAllLines和一个小Linq完成此任务(以完成Praveen答案评论中所述问题的补充。
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();
这将为您提供文档中所有行的数组,这些行以您在标识符字符串数组中定义的关键字开头。
答案 2 :(得分: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;
}
}
示例文本文件可能包含:
我如何知道保持中的球体 死者的无形灵魂,
当那个时候所有人都睡不着觉的时候 在我们踏上的灰尘中消失了吗?
因为我会感受到无休止的痛苦 如果在那里我没有遇见你温柔的存在;
也听不到我爱的声音,也不会再读 在你最安静的眼中,温柔的思想
你的温柔的心不会要求我吗? 那个最震撼我的心被送给了谁? 我在地上的名字永远在你的祈祷中 它会在天堂被你的舌头驱逐吗?
在被天堂呼吸的风吹来的草地上,
在辉煌的领域的辉煌,
无拘无束的思想的更大动作,
你会忘记在这里加入我们的爱吗?
过去所有风雨过去的爱情,
并且温柔地对待我更加严厉的自然, 并且更深入地增长,并且到最后的投标者 它会随着生命而到期,不再存在吗?
比我更快乐,光线更大,
在那里等着你;因为你鞠躬你的意志 在对正义统治的欢快致敬中, 并且爱所有人,并且对疾病有益
对我来说,我居住的肮脏的关心,
收缩和消耗我的心脏,加热卷轴;
愤怒已经留下了疤痕 - 地狱之火 在我的灵魂上留下了可怕的伤疤
虽然你穿着天空的荣耀,但是 你不会保持同样心爱的名字,
同样公平周到的眉头,温柔的眼睛,
在天堂里可爱的气候,还是一样吗?
在那个平静的家里,你不能教我 我在这方面学到了很多的智慧 - 爱的智慧 - 直到我成为了 在那片幸福之地,你是否适合伴侣?
并且您想要检索该行的第一个单词是&#39;&#39;的所有行。通过调用这样的方法:
var result = GetLinesWithWord("The", "temp.txt");
您的结果应如下所示:
死者的无形灵魂,
过去所有风雨过去的爱情,
同样公平周到的眉头,温柔的眼睛,
我在这方面学到了很多的智慧 - 爱的智慧 - 直到我成为
希望这足以充分回答你的问题。