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

Comparing lines of string in one text file against another text file, and displaying an an error when a non-match occurs

我是 C# 的新手,我正在努力解决一个我认为在概念上应该非常简单的问题,但我就是无法理解。

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

NR_118889.1 Amycolatopsis azurea strain NRRL 11412 16S ribosomal RNA, partial sequence GGTCTNATACCGGATATAACAACTCATGGCATGGTTGGTAGTGGAAAGCTCCGGCGT

NR_118899.1 Actinomyces bovis strain DSM 43014 16S ribosomal RNA, partial sequence GGGTGAGTAACACGTGAGTAACCTGCCCCNNACTTCTGGATAACCGCTTGAAAGGGTNGCTAATACGGGATATTTTGGCCTGCT

NR_074334.1 Archaeoglobus fulgidus DSM 4304 16S ribosomal RNA, complete sequence >NR_118873.1 Archaeoglobus fulgidus DSM 4304 strain VC-16 16S ribosomal RNA, complete sequence >NR_119237.1 Archaeoglobus fulgidus DSM 4304 strain VC-16 16S ribosomal RNA, complete sequence
ATTCTGGTTGATCCTGCCAGAGGCCGCTGCTATCCGGCTGGGACTAAGCCATGCGAGTCAAGGGGCTT

args[1] 是一个带有一些序列 ID 的查询文本文件:

NR_118889.1

NR_999999.1

NR_118899.1

NR_888888.1

所以当程序是 运行 时,我想要的只是在 args[0] 中找不到的序列 ID 来自 args[ 1]待显示。

NR_999999.1 找不到

NR_888888.1 找不到

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

提前感谢您的帮助。

你可以试试这个。

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

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();
}

这有效,但它只处理文件的第一行...

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);
                        }
                    }
                }
                    }
                }
var saved_ids = new List<String>();
foreach (String args1line in File.ReadLines(args[1]))
                {

                    foreach (String args2line in File.ReadLines(args[2]))
                    {

                        if (args1line.Contains(args2line))
                        {
                            saved_ids.Add(args2line);


                        }



                    }

                }

                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))
                                        {

                                            saved_ids.Add(line2);
                                            break;


                                        }


                                        if (!line1.StartsWith(">"))
                                        {
                                            break; 
                                        }

                                        if (saved_ids.Contains(line1))
                                        {

                                            break;
                                        }

                                        if (saved_ids.Contains(line2))
                                        {
                                            break;
                                        }


                                        if (!line1.Contains(line2))
                                        {
                                            saved_ids.Add(line2);
                                            WriteLine("The sequence ID {0} does not exist", line2);



                                        }





                                    }








                                    if (line2 == null)
                                    {
                                        sr2.DiscardBufferedData();
                                        sr2.BaseStream.Seek(0, System.IO.SeekOrigin.Begin);
                                        continue;
                                    }
                                }
                            }
                        }