时间:2018-06-14 12:57:23

标签: c# winforms file

好的,可能之前有人问过,但我找不到明确的答案。

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

我有一个带有Genesis第1章的txt文件,然后我有几个txt文件是Genesis第一章,但是每个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/

1 个答案:

答案 0 :(得分:1)

您可以使用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);