文本文件逐行进入字符串数组

时间:2015-04-22 21:10:16

标签: c#

我需要帮助,尝试将大型文本文档~1000行并逐行放入字符串数组中。

示例:

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

我还想要一种方法来找到第一个单词,只找到该行的第一个单词,并且一旦找到第一个单词,就复制整行。只查找第一个单词或每行!

3 个答案:

答案 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");

您的结果应如下所示:

死者的无形灵魂,
过去所有风雨过去的爱情,
同样公平周到的眉头,温柔的眼睛,
我在这方面学到了很多的智慧 - 爱的智慧 - 直到我成为

希望这足以充分回答你的问题。