2017-05-03 4 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; 
} 
} 

アップデート:私は2番目のファイルを選択した場合、それは一人として、私として使用することを選択し、そのように私はそれを変更するにはどうすればよい

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

エラーを返すRegexが見つかりません – Russsu

+0

using usingステートメント "using System.Text.RegularExpressions;" .csファイルの一番上に表示されます。 –

+0

固定しておいてください – Russsu

1

あなたは単に、線形探索のためのforループを使用し、手元の作業をovercomplicatedかLinqを使用してきました:

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

そして、どのようにあなたがいるあなたがそれを見つけた行を知っているだろうか... :-) – JuanR

+1

@Juanはそれに対応するために答えを編集しました。 –

+0

@元OPはそれを言及しなかった。配列の言及された線形検索のみ。行番号については何もありません。 –

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; 
    } 
関連する問題