Ejemplo n.º 1
0
        //###################################  MAIN PROGRAM   #########################################
        static void Main(string[] args)
        {
            Console.Clear();
            string[] input = args;
            bool     check;

            //Check if all input variables are valid. If valid check = true.
            check = Validation.ValidationInput(input);

            if (check)
            {
                // Variables to hold the arguments passed by the user
                string searchType       = input[0];
                string fileName         = input[1];
                string fullpath         = fileName;
                string searchParameter1 = input[2];
                string searchParameter2;
                if (input.Length <= 3)
                {
                    searchParameter2 = "";
                }
                else
                {
                    searchParameter2 = input[3];
                }
                // Variables used to print and save sequence in the search type: level2 and level3
                bool          printControl = false;
                int           numLines     = 0;
                bool          searchFound  = false;                          //Used to print message for sequences not found
                List <string> query        = new List <string>();
                if (searchType == "-level3")
                {
                    numLines = Function.CounLine(searchParameter1);           // Count the number of line in a file
                    query    = Function.CreateListFromFile(searchParameter1); // Save sequences found in a list to be saved in a file (-level3)
                }
                int[]    queryFound     = new int[numLines];                  //Used to print message for sequences not found (-level3)
                string[] sequencesFound = new string[numLines * 2];           //Hold the sequences found in a list (-level3)

                // Open file (input[1]) and execute the search program.
                FileStream   newFile     = new FileStream(fullpath, FileMode.Open, FileAccess.Read);
                StreamReader readFile    = new StreamReader(newFile);
                string       recordIn    = readFile.ReadLine();
                double       countDna    = 0;
                int          indexNumber = 0;

                // Search 4 using direct access
                if (searchType == "-level4")
                {
                    Search.SearchLevel_4(fileName, searchParameter1, searchParameter2, input[4]);
                }
                else
                {
                    while (recordIn != null)
                    {
                        string line = recordIn;
                        countDna = countDna + 1;

                        if (searchType == "-level1")
                        {
                            Search.SearchLevel_1(line, countDna, searchParameter1, searchParameter2);
                        }
                        else if (searchType == "-level2")
                        {
                            if (printControl)
                            {
                                Console.WriteLine(line);
                                printControl = false;
                            }
                            printControl = Search.SearchLevel_2(line, countDna, searchParameter1);
                            if (printControl)
                            {
                                searchFound = true;
                            }
                        }
                        else if (searchType == "-level3")
                        {
                            // Lines which will be included in the file
                            if (printControl)
                            {
                                sequencesFound[indexNumber] = line;
                                indexNumber++;
                                printControl = false;
                            }
                            bool controlLine = false; // Controle the line that will be save in the array.
                            for (int i = 0; i < query.Count; i++)
                            {
                                string lineFound = Search.SearchLevel_3(line, countDna, query[i]);
                                // Lines which will be included in the file
                                if (lineFound != null && controlLine == false)
                                {
                                    sequencesFound[indexNumber] = line;
                                    indexNumber++;
                                    printControl = true;
                                    controlLine  = true;
                                }
                                // Control the sequences that were not found to return an alert to the user
                                if (lineFound != null)
                                {
                                    queryFound[i] = 1;
                                }
                            }
                        }
                        else if (searchType == "-level5")
                        {
                            int count         = 0;
                            int sequenceFound = Search.SearchLevel_5(fileName, searchParameter1, countDna, line);
                            count = count + sequenceFound;
                            if (count > 0)
                            {
                                searchFound = true;
                            }
                        }
                        else if (searchType == "-level6")
                        {
                            int count         = 0;
                            int sequenceFound = Search.SearchLevel_6(searchParameter1, countDna, line);
                            count = count + sequenceFound;
                            if (count > 0)
                            {
                                searchFound = true;
                            }
                        }
                        else if (searchType == "-level7")
                        {
                            string pattern = searchParameter1.Replace("*", "[A-Z]*");  // Create a regex pattern
                            pattern = "^" + pattern + "$";                             // Create a regex pattern
                            Match patterFound = Regex.Match(line, pattern);            // Compare the pattern to each line of the file
                            if (patterFound.Success)
                            {
                                Search.SearchLevel_7(fileName, countDna);
                                searchFound = true;
                            }
                        }
                        recordIn = readFile.ReadLine();
                    }
                    readFile.Close();
                    newFile.Close();
                }

                //  Print error messages for sequences lines that exceed the number of the lines in the file
                if (searchType == "-level1")
                {
                    Validation.ValidationOutput(fileName, searchParameter1, searchParameter2, countDna);
                }
                // Write to file seqeunces found and print message for sequences not found
                if (searchType == "-level3")
                {
                    Validation.ValidationOutput(searchParameter2, query, queryFound, sequencesFound);
                }
                //  Print message for sequences not found in search -level2, 5, 6 and 7.
                if (
                    (searchType == "-level2" && searchFound != true) ||
                    (searchType == "-level5" && searchFound != true) ||
                    (searchType == "-level6" && searchFound != true) ||
                    (searchType == "-level7" && searchFound != true)
                    )
                {
                    Alerts.Alert_7(searchParameter1);
                }
            }
        }