首页 > 解决方案 > 从txt文件中逐行返回值

问题描述

好的,这可能以前被问过,但我找不到明确的答案。

我正在为我的父亲构建一个应用程序,他想要一个圣经应用程序。它将使用语音识别。我可以毫无问题地创建整个应用程序,我只是想弄清楚是否有更简单的方法。

我有一个创世记第 1 章的 txt 文件,然后我有几个 txt 文件是创世记第 1 章,但每个 txt 文件都是一节经文。

我可以调用每个 txt 文件并阅读它没有问题。但是,如果我这样做,将会有数千个 txt 文件和数千行代码。

我知道文件是按块读取的。有没有一种方法可以让我阅读整章并阅读一行,例如:

    If (speech == "Genesis chapter one verse nine")
       {
            Bible.SpeakAsync(@"Gen1V9.txt");
       }

我知道索引将是 0 - X。x 表示文本的长度。我可以打电话给nth line

      If (speech == "Genesis chapter one verse nine")
         {
                 Bible.SpeakAsync(File.ReadLine[10](@"Gen1.txt");
         }

我省略了很多代码,但这是一个示例。我可以调用一个 txt 文件并让它读取某一行,而不是调用每个 txt 文件。如果是这样,整本圣经的长度将是固定的,所以我会知道第 9 节将永远是 txt 文件中的第 10 行。

这就是我多年来通过提取单个 txt 文件来完成的方式,但我想清理代码并尽可能使用最少的代码。

我希望这是有道理的。演讲无关紧要,我只需要找到解决方案即可获得第n行。

来源是http://www.sacred-texts.com/bib/osrc/

标签: c#winformsfile

解决方案


您可以使用File.ReadAllLines()

string[] bible = File.ReadAllLines("path-to-text-file.txt");
 Bible.SpeakAsync (bible[0]); //line one
 Bible.SpeakAsync (bible[1]); //line two

为了让它说多行(9-10-11)......:你可以这样做:

 Bible.SpeakAsync(bible[9]+bible[10]);

或者你可以有这样的功能:

void Speak(params int[] lines)
{
    string all = "";
    for(int i=0; i< lines.length; i++)
    all += bible[lines[i]];
    Bible.SpeakAsync(all);
}

然后你可以像这样使用它:

Speak(10);
Speak(9,10,11,12);

推荐阅读