将一个文本文件中的字符串行与另一个文本文件进行比较,并在发生不匹配时显示错误

问题描述 投票:0回答:2

我对C#还是比较陌生,我正努力解决一个我认为在概念上应该很简单的问题,但我无法理解。

我目前正在尝试从带有两个参数的命令行运行程序时向控制台显示一条消息,如果在一个序列号和DNA序列的文本文件中不存在序列号,则该序列号不存在于查询文本文件中充满了序列ID。例如,args [0]是一个包含41534行序列的文本文件,这意味着我无法将整个文件加载到内存中。:

NR_118889.1青霉菌菌株NRRL 11412 16S核糖体RNA,部分序列GGTCTNATACCGGATATAACAACTCATGGCATGGTTGGTAGTGGAAAGCTCCGGCGT

NR_118899.1牛放线菌菌株DSM 43014 16S核糖体RNA,部分序列GGGTGAGTAACACGTGAGTAACCTGCCCCNNACTTCTGGATAACCGCTTGAAAGGGTNGCTAATACGGGATATTTTGGCCTGCT

NR_074334.1花粉古生菌DSM 4304 16S核糖体RNA,完整序列> NR_118873.1花粉古生菌DSM 4304菌株VC-16 16S核糖体RNA,完整序列> NR_119237.1花粉古生菌DSM 4304菌株VC-16 16S核糖体RNA,完整序列序列ATTCTGGTTGATCCTGCCAGAGGCCGCTGCTATCCGGCTGGGACTAAGCCATGCGAGTCAAGGGGCTT

args [1]是具有某些序列ID的查询文本文件:

NR_118889.1

NR_999999.1

NR_118899.1

NR_888888.1

因此,当程序运行时,我想要的只是从要显示的args [1]中的args [0]中找不到的序列ID。

NR_999999.1找不到

NR_888888.1找不到

我知道这可能非常简单,并且我花了很长时间试图独自解决这个问题,以至于我想寻求帮助。

谢谢您的协助。

c# while-loop filestream streamreader args
2个回答
0
投票

您可以尝试这个。

它加载每个文件的内容并相互比较。

static void Main(string[] args)
{
  if ( args.Length != 2 )
  {
    Console.WriteLine("Usage: {exename}.exe [filename 1] [filename 2]");
    Console.ReadKey();
    return;
  }

  string filename1 = args[0];
  string filename2 = args[1];

  bool checkFiles = true;

  if ( !File.Exists(filename1) )
  {
    Console.WriteLine($"{filename1} not found.");
    checkFiles = false;
  }

  if ( !File.Exists(filename2) )
  {
    Console.WriteLine($"{filename2} not found.");
    checkFiles = false;
  }
  if ( !checkFiles )
  {
    Console.ReadKey();
    return;
  }

  var lines1 = System.IO.File.ReadAllLines(args[0]).Where(l => l != "");
  var lines2 = System.IO.File.ReadAllLines(args[1]).Where(l => l != "");

  foreach ( var line in lines2 )
    if ( !lines1.StartsWith(line) )
    {
      Console.WriteLine($"{line} could not be found");
      checkFiles = false;
    }

  if (checkFiles)
    Console.WriteLine("There is no difference.");

  Console.ReadKey();
}

0
投票

这可行,但是只处理文件的第一行...

using( System.IO.StreamReader sr1 = new System.IO.StreamReader(args[1]))
                {
                    using( System.IO.StreamReader sr2 = new System.IO.StreamReader(args[2]))
                    {
                        string line1,line2;

                while ((line1 = sr1.ReadLine()) != null) 
                {
                    while ((line2 = sr2.ReadLine()) != null)
                    {
                        if(line1.Contains(line2))
                        {
                            found = true;
                            WriteLine("{0} exists!",line2);
                        }



                        if(found == false)
                        {
                            WriteLine("{0} does not exist!",line2);
                        }
                    }
                }
                    }
                }
© www.soinside.com 2019 - 2024. All rights reserved.