2016-03-19 4 views
0

Also lerne ich gerade C# und eine der Übungen aus dem Buch, das ich lese, um zu lernen, ist eine Art Wörterbuchprogramm, in dem Sie Ihre eigenen Wörter und Definitionen hinzufügen können. Im Code, wenn der Benutzer das Wort und die Definition für das Wort eingibt, gebe ich jedes in eine andere Textdatei ein. Das Problem, das ich habe, ist, dass, wenn der Benutzer nach einem Wort sucht, das er zuvor hinzugefügt hat, ich das Programm benötige, um dieses Wort mit seiner entsprechenden Definition zu drucken. Also brauche ich das Programm, um zu wissen, wo in der Definitionstextdatei die entsprechende Definition für dieses Wort beginnt und endet, und dann das auszudrucken.Kann ich Text aus einer TXT-Datei mit anderem Text aus einer anderen TXT-Datei verknüpfen? C#

Ich weiß nicht, ob dies möglich ist, oder wenn es einen besseren Weg, um das gleiche Ergebnis zu erhalten, aber ja ...

Sorry, wenn ich nicht ich klar Ich fange nur zu lernen: P und sorry, wenn mein Englisch ist nicht das größte (es ist nicht meine Muttersprache)

gehend, den Code hier setzen (einige davon es auf spanisch):

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

Ich habe Ihre Bearbeitung zurückgesetzt. Wenn Sie Ihren neuen Code als Lösung posten möchten, tun Sie dies richtig, indem Sie ihn als Antwort posten, genau wie jeder andere auch. Bearbeiten Sie Ihre ** Frage **, um eine ** Antwort ** zu posten, ist nicht angemessen. Hier ist es akzeptabel, Ihre eigene Frage zu beantworten - in der Tat gibt es einen Abschnitt [help/self-answer], der dafür zuständig ist. –

Antwort

0

Sie können! C# hat einen großartigen Typ, mit dem man damit arbeiten kann, komischerweise heißt es dictionary!

Ein Wörterbuch verknüpft etwas mit etwas anderem. Die Sache, die Sie abbilden, wird key genannt und die Sache, der Sie zuordnen, wird value genannt. In Ihrem Beispiel ordnen Sie Wörter (Schlüssel) ihren Definitionen (Werten) zu.

Also, was Sie tun müssen, laden Sie in beiden Dateien (wie ich denke, dass Sie bereits tun) und fügen Sie sie dann in das Wörterbuch.

Ein Beispiel, wie Sie die Dateien in einem Verzeichnis laden konnte und es verwenden, ist:

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" 

ein paar Dinge, die Sie nach oben auslösen kann:

  • Sie sicherstellen müssen, dass es genau die gleiche Anzahl von Wörtern wie es Definitionen in jeder der beiden Dateien gibt
  • Sie können nicht das gleiche Wort zweimal hinzufügen - Schlüssel sind einzigartig! Sie können die dem Wort zugeordnete Definition ändern oder das Wort entfernen und mit einer neuen Definition neu hinzufügen. Sie können jedoch keinen Schlüssel hinzufügen, der bereits im Wörterbuch enthalten ist.
+0

Danke dude, ich kannte die Wörterbuchklasse schon, aber ich dachte nicht, dass ich sie mit all diesen Textdateien verwenden könnte. Am Ende musste ich viel mehr tun als nur ein Wörterbuch hinzuzufügen, aber trotzdem: P – Danielpik

Verwandte Themen