2016-03-19 10 views
0

私は現在C#を学習しています。私が学んでいる本の練習の1つは、独自の単語と定義を追加できる辞書コンソールプログラムの種類を作ることです。コードでは、ユーザーが単語とその単語の定義を入力すると、それぞれを別のテキストファイルに入れます。私が持っている問題は、ユーザーが以前に追加した単語を検索するときに、その単語を対応する定義で印刷するプログラムが必要であるということです。だから私は定義テキストファイルのどこにその単語の対応する定義が始まって終わるのかを知り、それを印刷するプログラムが必要です。.txtファイルのテキストと別の.txtファイルの他のテキストをリンクすることはできますか? C#

私は自分自身を明確にしなかった場合、私はちょうど学ぶために始めている、これが可能であるか知っているか、同じ結果を得るためのより良い方法があります場合は、ええ...

申し訳ありません。

using System; 
using System.IO; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading; 
using System.Threading.Tasks; 

namespace ConsoleApplication8 
{ 
    class Program 
    { 
     #region Static variables and stuff 

     static string palabra; 
     static string definicion; 
     static string PalabrasContenido; 
     static string DefinicionesContenido; 
     static int opcion; 

     static bool palabraborrada = false; 
     static bool palabraborrada0 = false; 

     static FileStream PalabraStream = new FileStream("Palabras.txt", FileMode.Append); 
     static FileStream DefinicionStream = new FileStream("Definiciones.txt", FileMode.Append); 
     static byte[] PalabraBytes = new byte[100]; 
     static byte[] DefinicionBytes = new byte[5000]; 

     //static StreamReader PalabrasSR = new StreamReader("C:\\Users\\Dani\\Documents\\Visual Studio 2015\\Projects\\ConsoleApplication8\\ConsoleApplication8\\bin\\Debug\\Palabras.txt"); 

     #endregion 

     static void ShowMenu() 
     { 
      Console.WriteLine("________________________________________________________"); 
      Console.WriteLine(""); 
      Console.WriteLine("Por favor escoje tu opcion."); 
      Console.WriteLine("________________________________________________________"); 
      Console.WriteLine(""); 
      Console.WriteLine("1 - Agregar palabra."); 
      Console.WriteLine("2 - Buscar palabra."); 
      Console.WriteLine("3 - Mostrar palabras."); 
      Console.WriteLine("4 - Borrar palabra."); 
      Console.WriteLine("5 - Salir."); 
     } 

     static void AskChoice() 
     { 
      Console.WriteLine(""); 
      Console.WriteLine(""); 
      int.TryParse(Console.ReadLine(), out opcion); 
     } 

     static void AddWord() 
     { 
      PalabrasContenido = File.ReadAllText("C:\\Users\\Dani\\Documents\\Visual Studio 2015\\Projects\\ConsoleApplication8\\ConsoleApplication8\\bin\\Debug\\Palabras.txt"); 
      PalabraStream = new FileStream("Palabras.txt", FileMode.Append); 
      DefinicionStream = new FileStream("Definiciones.txt", FileMode.Append); 

      Console.Clear(); 
      Console.WriteLine("Ingresa palabra a agregar...\n"); 
      palabra = Console.ReadLine().ToLower() + " "; 
      Console.WriteLine(""); 

      if (PalabrasContenido.Contains(palabra)) 
      { 
       Console.Clear(); 
       Console.WriteLine("\n--La palabra '{0}' ya existe en El Diccionario.--\n", palabra); 
       Console.WriteLine("Volviendo al menu..."); 
       Thread.Sleep(3000); 
      } 
      else 
      {    
       Console.WriteLine("Ingresa definicion...\n"); 
       definicion = Console.ReadLine() + " "; 
       Console.WriteLine(""); 

       PalabraStream.Write(Encoding.ASCII.GetBytes(palabra), 0, palabra.Length); 

       DefinicionStream.Write(Encoding.ASCII.GetBytes(definicion), 0, definicion.Length); 

       PalabraStream.Close(); 
       DefinicionStream.Close(); 
       Console.Clear(); 
       Console.WriteLine("--La palabra ha sido agregada con exito--\n"); 
       Console.WriteLine("Volviendo al menu..."); 
       Thread.Sleep(3000); 
      } 
     } 

     static void SearchWord() 
     { 
      PalabrasContenido = File.ReadAllText("C:\\Users\\Dani\\Documents\\Visual Studio 2015\\Projects\\ConsoleApplication8\\ConsoleApplication8\\bin\\Debug\\Palabras.txt"); 
      DefinicionesContenido = File.ReadAllText("C:\\Users\\Dani\\Documents\\Visual Studio 2015\\Projects\\ConsoleApplication8\\ConsoleApplication8\\bin\\Debug\\Definiciones.txt"); 

      Console.Clear(); 
      Console.WriteLine("Ingresa palabra a buscar...\n"); 
      palabra = Console.ReadLine().ToLower(); 

      if (PalabrasContenido.Contains(palabra)) 
      { 
       PalabraStream = new FileStream("Palabras.txt", FileMode.Open); 

       Console.Clear(); 
       Console.WriteLine("\nDefinicion de: {0}", palabra); 
       Console.WriteLine("________________________________________________________\n"); 
       Console.WriteLine("{0}", definiciones[palabra]); 
       Console.WriteLine("________________________________________________________\n"); 
       Console.WriteLine("Pulsa enter para continuar..."); 
       Console.ReadLine(); 
       PalabraStream.Close(); 
      } 
      else 
      { 
       Console.Clear(); 
       Console.WriteLine("\n--La palabra ingresada no ha sido encontrada--\n"); 
       Console.WriteLine("Pulsa enter para continuar..."); 
       Console.ReadLine(); 
       Console.WriteLine(""); 
      } 
     } 

     static void ShowWords() 
     { 
      Console.Clear(); 
      PalabraStream = new FileStream("Palabras.txt", FileMode.Open); 

      if (PalabraStream.Length > 0) 
      {   
       Console.WriteLine("________________________________________________________\n"); 
       Console.WriteLine("Palabras encontradas:"); 
       Console.WriteLine("________________________________________________________\n"); 

       PalabraStream.Read(PalabraBytes, 0, (int)PalabraStream.Length); 

       Console.WriteLine(Encoding.ASCII.GetString(PalabraBytes)); 

       PalabraStream.Close(); 

       Console.WriteLine("\n\nPulsa enter para continuar..."); 
       Console.ReadLine(); 
      } 
      else 
      { 
       Console.WriteLine("________________________________________________________\n"); 
       Console.WriteLine("Palabras encontradas:"); 
       Console.WriteLine("________________________________________________________\n"); 
       Console.WriteLine("\n--No se han encontrado palabras.--\n"); 
       Console.WriteLine("Pulsa enter para continuar..."); 

       PalabraStream.Close(); 

       Console.ReadLine(); 
       Console.WriteLine(""); 
      } 
     } 

     static void DeleteWord() 
     { 
      Console.Clear(); 
      Console.WriteLine("\nIngresa palabra a borrar...\n"); 
      palabra = Console.ReadLine().ToLower(); 

      palabraborrada = definiciones.Remove(palabra); 
      palabraborrada0 = diccionario.Remove(palabra); 

      if (palabraborrada == true && palabraborrada0 == true) 
      { 
       Console.Clear(); 
       Console.WriteLine("\n--La palabra ha sido borrada con exito.--\n"); 
       Console.WriteLine("Volviendo al menu..."); 
       Thread.Sleep(3000); 
      } 

      else 
      { 
       Console.Clear(); 
       Console.WriteLine("\n--La palabra no existe.--\n"); 
       Console.WriteLine("Volviendo al menu..."); 
       Thread.Sleep(3000); 
      } 
     } 

     static void Exit() 
     { 
      Console.Clear(); 
      Console.WriteLine("\n--Gracias por usar El Diccionario.--\n"); 
      Console.WriteLine("Pulsa enter para continuar..."); 
      Console.ReadLine(); 
      Console.WriteLine(""); 
     } 

     static void InvalidInput() 
     { 
      Console.WriteLine("\n--Opcion invalida.--\n"); 
      Console.WriteLine("Pulsa enter para continuar...\n"); 
      Console.ReadLine(); 
     } 

     static void Main(string[] args) 
     { 
      Console.WriteLine("Bienvenido a Tu diccionario.\n"); 

      PalabraStream.Close(); 
      DefinicionStream.Close(); 

      do 
      { 
       //Presentar menu y limpiar consola 
       Console.Clear(); 
       ShowMenu(); 

       //Pedir opcion 
       AskChoice(); 

       if (opcion == 1) 
       { 
        //Añadir palabra 
        AddWord(); 

       } 
        if (opcion == 2) 
        { 
         //Buscar palabra 
         SearchWord(); 

        } 

        if (opcion == 3) 
        { 
         //Mostrar palabras 
         ShowWords(); 
        } 

        if (opcion == 4) 
        { 
         DeleteWord(); 
        } 

        if (opcion == 5) 
        { 
         Exit(); 
        } 

        if (opcion > 5 || opcion < 1) 
        { 
         InvalidInput(); 
        } 
      } 
      while (opcion != 5); 
     } 
    } 
} 
+0

私はあなたの編集を元に戻しました。新しいコードをソリューションとして投稿したい場合は、他の誰かと同じように答えとして投稿することで、正しくコードを投稿してください。 **質問**を編集して**回答**を投稿するのは適切ではありません。あなた自身の質問に答えることはここで受け入れられます - 実際、そうする方法に専念する[ヘルプ/自己回答]セクションがあります。 –

答えて

0

することができます:Pと私の英語が最大でない場合は申し訳ありません(それは私の母国語ではありません)

ゴナ(それはスペイン語でのITの一部)、ここでのコードを入れて! C#はあなたがこれでうまく動作するのに使うことができる素晴らしいタイプです。それは十分にdictionaryと呼ばれています!

辞書は何か他のものにマップします。あなたがマップしているものはkeyと呼ばれ、マップするものはvalueと呼ばれます。したがって、あなたの例では、単語(キー)をその定義(値)にマッピングしています。

だから、あなたがしなければならないことは、両方のファイルをロードして(あなたがすでにやっていると思うように)、それを辞書に追加することです。

あなたが辞書にファイルをロードし、それを使用することができる方法の例は次のとおりです。

string[] words = File.ReadAllLines("Palabras.txt"); 
string[] definitions = File.ReadAllLines("Definiciones.txt"); 

Dictionary<string, string> dictionary = new Dictionary<string, string>(); 

for(int i = 0; i < words.Length; i++) 
{ 
    dictionary.Add(words[i], definitions[i]); 
} 

string output = dictionary["programmer"]; // "A person who writes computer programs" 

あなたをつまずかもいくつかのこと:

  • あなたがそこにあることを確認する必要があります2つのファイルのそれぞれに定義があるのとまったく同じ数の単語
  • 同じ単語を2回追加することはできません - キーは一意です!単語に関連付けられた定義を変更したり、単語を削除して新しい定義で追加したりすることはできますが、すでに辞書に含まれているキーは追加できません。
+0

おかげさまで、私はすでに辞書クラスを知っていましたが、私はこのテキストファイルのすべてでこのクラスを使用できるとは思いませんでした。結局私は辞書を追加するだけではなく、それ以上のことをしなくてはなりませんでした。 – Danielpik

関連する問題