Сравнение строк строки в одном текстовом файле с другим текстовым файлом и отображение ошибки при несовпадении - PullRequest
0 голосов
/ 28 сентября 2019

Я относительно новичок в C # и пытаюсь разобраться с проблемой, которая, на мой взгляд, должна быть довольно простой по своей концепции, но я просто не могу ее понять.

Я сейчас пытаюсьвыводить сообщение на консоль, когда программа запускается из командной строки с двумя аргументами, если идентификатор последовательности не существует в текстовом файле, полном идентификаторов последовательностей и последовательностей ДНК, для текстового файла запроса, полного идентификаторов последовательностей.Например, args [0] - это текстовый файл, содержащий 41534 строки последовательностей, что означает, что я не могу загрузить весь файл в память .:

NR_118889.1 Amycolatopsis azurea штамм NRRL11412 16S рРНК, частичная последовательность GGTCTNATACCGGATATAACAACTCATGGCATGGTTGGTAGTGGAAAGCTCCGGCGT

NR_118899.1 АсНпотусез Бови штамм DSM 43014 16S рРНК, частичная последовательность GGGTGAGTAACACGTGAGTAACCTGCCCCNNACTTCTGGATAACCGCTTGAAAGGGTNGCTAATACGGGATATTTTGGCCTGCT

NR_074334.1 Archaeoglobus fulgidus DSM 4304 16S рРНК, полная последовательность> NR_1188730,1 Archaeoglobus fulgidus DSM 4304 штамм VC-16 16S рРНК, полная последовательность> NR_119237.1 Archaeoglobus fulgidus DSM 4304 штамм VC-16 16S рРНК, полная последовательность
ATTCTGGTTGATCCTGCCAGAGGCCGCTGCTATCCGGCTGGGACTAAGCCATGCGAGTCAAGGGGCTT

** 1016args [1] - текстовый файл запроса с некоторыми идентификаторами последовательности:

NR_118889.1

NR_999999.1

NR_118899.1

NR_888888.1

Поэтому при запуске программы все, что мне нужно, это идентификаторы последовательности, которые не были найдены в args [0] из args [1] для отображения.

NR_999999.1 не может быть найдено

NR_888888.1 можетне может быть найдено

Я знаю, что это, вероятно, очень просто, и я потратил слишком много времени, пытаясь выяснить это сам, до такой степени, что я хочу попросить о помощи.

Заранее благодарю за любую помощь.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2019

Это работает, но обрабатывает только первую строку файлов ...

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);
                        }
                    }
                }
                    }
                }
0 голосов
/ 28 сентября 2019

Вы можете попробовать это.

Загружает содержимое каждого файла и сравнивает друг с другом.

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