Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#检查txt是否包含字符串,并输出其下方的行_C#_Visual Studio_Artificial Intelligence - Fatal编程技术网

C#检查txt是否包含字符串,并输出其下方的行

C#检查txt是否包含字符串,并输出其下方的行,c#,visual-studio,artificial-intelligence,C#,Visual Studio,Artificial Intelligence,我正在开发一个聊天机器人 我有一个txt文件,其中包含Q、a、Q、a、Q、a格式的问题和答案: 狗是猫 不,他们不是 猫是狗 不,他们不是 我需要检查文本文件是否包含输入,然后将输出值设置为问题下一行的答案。这是我到目前为止所拥有的 static string path = Path.Combine(Directory.GetCurrentDirectory(), "memory.txt"); static IEnumerable<string> lines = F

我正在开发一个聊天机器人 我有一个txt文件,其中包含Q、a、Q、a、Q、a格式的问题和答案:

狗是猫

不,他们不是

猫是狗

不,他们不是

我需要检查文本文件是否包含输入,然后将输出值设置为问题下一行的答案。这是我到目前为止所拥有的

    static string path = Path.Combine(Directory.GetCurrentDirectory(), "memory.txt");

    static IEnumerable<string> lines = File.ReadLines(path);
    static string inputValue;
    static string outputValue = " ";

        while (!shutdown)
        {
            Console.Write("User: ");
            inputValue = Console.ReadLine();
            inputValue = inputValue.ToLower();
            inputValue = inputValue.Trim(new Char[] { ' ', '.', ',', ':', ';', '*' });
            StringComparison comp = StringComparison.OrdinalIgnoreCase;

            if (inputValue == "hi" || inputValue == "hello" || inputValue == "greetings")
            {
                outputValue = "Hi";
            }
            else if (inputValue.Contains("how are you"))
            {
                outputValue = "Good";
            }
            else
            {

                if (File.ReadAllLines(path).Contains(inputValue))
                {
                    outputValue = //This is what i have to figure out
                }
                else
                {

                }

            }

            Console.Write("Computer: ");
            Console.WriteLine(outputValue);
            outputValue = " ";
        }
    }
static string path=path.Combine(Directory.GetCurrentDirectory(),“memory.txt”);
静态IEnumerable lines=File.ReadLines(路径);
静态字符串输入值;
静态字符串outputValue=“”;
而(!关机)
{
Console.Write(“用户:”);
inputValue=Console.ReadLine();
inputValue=inputValue.ToLower();
inputValue=inputValue.Trim(新字符[]{',',',',':',';','*');
StringComparison comp=StringComparison.OrdinalIgnoreCase;
如果(inputValue==“你好”| | inputValue==“你好”| | inputValue==“问候语”)
{
outputValue=“Hi”;
}
else if(inputValue.Contains(“你好”))
{
outputValue=“良好”;
}
其他的
{
if(File.ReadAllLines(path).Contains(inputValue))
{
outputValue=//这是我必须弄清楚的
}
其他的
{
}
}
控制台。写入(“计算机:”);
Console.WriteLine(输出值);
outputValue=“”;
}
}
//将文件加载到列表中
列表行=File.ReadAllLines(路径);
//了解问题的位置
int question_position=lines.IndexOf(inputValue);
//检查是否找到问题,以及问题下方是否有一条带答案的线
如果(问题位置>=0&&lines.Count()>问题位置+1)
{
//将答案分配给outputValue
outputValue=行[问题位置+1];
}
//将文件加载到列表中
列表行=File.ReadAllLines(路径);
//了解问题的位置
int question_position=lines.IndexOf(inputValue);
//检查是否找到问题,以及问题下方是否有一条带答案的线
如果(问题位置>=0&&lines.Count()>问题位置+1)
{
//将答案分配给outputValue
outputValue=行[问题位置+1];
}
我建议使用Linq,
边滑雪

outputValue = File
  .ReadLines(path)
  .SkipWhile(line => line != inputValue)
  .Skip(1)
  .FirstOrDefault();

if (outputValue != null) {
  //TODO: outputValue has been found, put relevant code here  
}
我建议使用Linq,
SkipWhile

outputValue = File
  .ReadLines(path)
  .SkipWhile(line => line != inputValue)
  .Skip(1)
  .FirstOrDefault();

if (outputValue != null) {
  //TODO: outputValue has been found, put relevant code here  
}

不要使用
File.ReadAllLines
,因为这样会将整个文件读入内存。逐行读取,而不是读取整个文件。问题可能在第一行,那么为什么要将整个文件读入内存呢

string outputValue = "";
var lines = System.IO.File.ReadLines( path );
foreach( var thisLine in  lines) 
{
   if( thisLine.Contains( inputValue ) ) 
   {
      // Get the answer from the next line
      var answer = lines.Take( 1 ).FirstOrDefault();
      if( !string.IsNullOrWhiteSpace( answer ) ) 
      {
         outputValue = answer;
      }
   }
}

关于
ReadAllLines
ReadLines
之间的区别,您可以阅读我的答案,了解更多详细信息。不要使用
File.ReadAllLines
,因为这样会将整个文件读入内存。逐行读取,而不是读取整个文件。问题可能在第一行,那么为什么要将整个文件读入内存呢

string outputValue = "";
var lines = System.IO.File.ReadLines( path );
foreach( var thisLine in  lines) 
{
   if( thisLine.Contains( inputValue ) ) 
   {
      // Get the answer from the next line
      var answer = lines.Take( 1 ).FirstOrDefault();
      if( !string.IsNullOrWhiteSpace( answer ) ) 
      {
         outputValue = answer;
      }
   }
}

你可以阅读我的答案,了解更多关于
ReadAllLines
ReadLines

之间区别的详细信息。我不认为这相当于
人工智能
我正在开发的聊天机器人。我不认为这相当于
人工智能
我正在开发的聊天机器人排序。它无法将字符串[]转换为它无法转换字符串[]我更多的是寻找一个if语句,但感谢我尝试了你的建议。我对foreach语句主要是在内部有困难。我更多的是寻找一个if语句,但感谢我尝试了你的建议。我对foreach语句主要是在内部有困难。