2017-05-03 1 views
0

그래서 숫자를 검색하고자하는 텍스트 파일이 있고 그 파일을 찾으면 출력 된 메시지 번호를 찾은 다음 찾을 수 없습니다.텍스트 파일을 사용한 선형 검색 C#

현재 텍스트 파일을 문자열로 읽고 사용자에게 검색하려는 번호를 물어 봤습니다. 내가 붙어있는 부분은 문자열에 대한 선형 검색 코드입니다. 다른 파일에 단어가 포함될 수 있기 때문에 문자열을 찾고 싶습니다. 지금까지

코드 :

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

나는 선형 검색을위한 몇 가지 코드를 볼 수 있지만 내 예에 제대로 적용하는 방법을 잘하지 않았다. 어떻게 작동하는지 이해하지만 올바른 순서로 코드를 가져 오는 것이 문제입니다. 너무 좋은 C#에서 코딩. 어떤 도움이라도 대단히 감사 할 것입니다. 감사합니다

일반 선형 검색 코드 :

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

가 어떻게 변경합니까 내 정렬?

답변

0

당신은 일치의 검색 문자열의 배열을 통해 루프가 필요합니다. 정규식을 사용하여 일치하는지 확인하십시오.

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!"); 
+0

오류가 발생했습니다 정규식을 찾을 수 없습니다 – Russsu

+0

using using using System.Text.RegularExpressions; .cs 파일의 맨 위에. –

+0

고쳐주었습니다. – Russsu

1

당신은 손에서 작업을 overcomplicated 한, 단순히 선형 검색 또는 Linq을 사용하는 루프를 사용

static int Search(string[] list, string elementSought) 
{ 
    return list.ToList().FindIndex(s => s == elementSought); 
} 
+0

어떻게 당신은 당신이 그것을 발견 줄 알아? ... :-) – JuanR

+1

@Juan은을 수용 할 수 있도록 답을 편집했다. –

+0

@Juan OP는 언급하지 않았다. 배열의 언급 된 선형 검색 만. 라인 #s에 관한 아무것도. –

1

당신은 Array.IndexOf을 사용할 수 있습니다. 항목이 배열에서 발견되지 않으면 -1을 반환하고 그렇지 않으면 첫 번째 항목의 인덱스를 반환합니다.

예 (콘솔 응용 프로그램)

static void Main(string[] args) 
    { 
     string[] list = {"xxx", "yyy", "aaa", "bbb"}; 
     var found = Search(list, "gggg"); 
    } 

    static bool Search(string[] list, string elementSought) 
    { 
     var index = Array.IndexOf(list, elementSought); 

     var found = index != -1; 

     return found; 
    }