Линейный поиск с использованием текстового файла С#

Итак, у меня есть текстовый файл, в котором я хотел бы выполнить поиск по номеру, и если он найден, то выводится номер сообщения, а если нет, то не найден.

В настоящее время я прочитал текстовый файл в строку и спросил пользователя, какой номер они хотели бы найти. Часть, на которой я застрял, — это код для линейного поиска строки. Я хочу найти строку, потому что другие файлы, которые я буду использовать, могут содержать слова.

Код Пока:

    public static void search()   // Search for values
    {
        Console.WriteLine("Enter 1 to search through days");
        int operation = Convert.ToInt32(Console.ReadLine());

        if (operation == 1)
        {

            String[] myArray = File.ReadAllLines("Data1/Day_1.txt");

            Console.WriteLine("Enter number to search");
            String myString = Console.ReadLine();
        }
    }

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

Общий код линейного поиска:

static int Search(string[] list, string elementSought)
{
bool found = false;
int max = list.Length - 1;
int currentElement = 0;

do
{
    if (list[currentElement] == elementSought)
    {
        found = true;
    }
    else
    {
        currentElement = currentElement + 1;
    }
} while (!(found == true || currentElement > max));

if (found == true)
{
    return currentElement;
}
else
{
    return -1;
}
}

Обновлять:

   public static void search()   // Search for values
    {
  Console.WriteLine("1=Day 2=Depth");
  int operation = Convert.ToInt32(Console.ReadLine());
  if (operation == 1)
        {
            String[] myArray = File.ReadAllLines("Data1/Day_1.txt");
        }

        else if (operation == 2)
        {
            String[] myArray = File.ReadAllLines("Data1/Months_1.txt");
        }


            Console.WriteLine("Enter number to search");
            String myString = Console.ReadLine();
            int i = 0;
            int j = 0;
            var regex = new Regex(myString);
            foreach (string array in myArray)
            {
                if (regex.IsMatch(array))
                {
                    i++;
                }

                else if (regex.IsMatch(array))
                {
                    j++; 
                }
            }

            if (i > 0)
            {
                Console.WriteLine("Found match! - {1} Appeared {0} time(s)",i,myString);
            }

            else if(j == 0)
            {
                Console.WriteLine("No Match for {0} in Data", myString);
            }

            Console.ReadLine();
        }

Как мне изменить его так, чтобы, если я выберу второй файл, он выбрал его как тот, который будет использоваться в качестве моего массива?


person Russsu    schedule 03.05.2017    source источник


Ответы (3)


Вам нужно перебрать массив строк в поисках совпадения. Используйте регулярное выражение для проверки соответствия.

Console.WriteLine("Enter number to search");
String myString = Console.ReadLine();

var regex = new Regex(myString);
foreach (string array in myArray)
    if (regex.IsMatch(array))
        Console.WriteLine("Found match!");
person Mitch Stewart    schedule 03.05.2017
comment
Получить ошибку Regex не найден - person Russsu; 03.05.2017
comment
Добавьте оператор использования, используя System.Text.RegularExpressions; в верхней части вашего файла .cs. - person Mitch Stewart; 03.05.2017
comment
исправил это неважно - person Russsu; 03.05.2017
comment
Как бы я сделал, чтобы это появилось один раз. Или если оно появляется только определенное количество раз, а не выписывается снова и снова? - person Russsu; 03.05.2017
comment
Вместо того, чтобы писать найденное совпадение, увеличьте переменную и запишите переменную после цикла foreach. - person Mitch Stewart; 03.05.2017
comment
Спасибо, получилось - person Russsu; 03.05.2017
comment
Застрял на этой новой части. Обновленный вопрос - person Russsu; 04.05.2017


вы слишком усложнили задачу, просто используйте цикл for для линейного поиска или используйте Linq:

static int Search(string[] list, string elementSought)
{
    return list.ToList().FindIndex(s => s == elementSought);
}
person Ousmane D.    schedule 03.05.2017
comment
А как узнать, в какой строке ты его нашел?... :-) - person JuanR; 03.05.2017
comment
@Juan отредактировал ответ, чтобы учесть это. - person Ousmane D.; 03.05.2017
comment
@Juan OP не упомянул об этом. Только упомянутый линейный поиск массива. Ничего о строке #s. - person William Xifaras; 03.05.2017
comment
@WilliamXifaras: Да, об этом не упоминалось. Однако это поиск, и если вы посмотрите на исходный алгоритм, он возвращает номер строки. - person JuanR; 03.05.2017