2016-03-19 13 views
0

Şu anda C# öğreniyorum ve öğrenmek için okuyorum kitaptan egzersizleri biri kendi kelime ve tanımları ekleyebilirsiniz hangi bir sözlük konsolu programı yapmaktır. Kullanıcı kelimeyi girdiğinde ve söz konusu sözcük için tanımlandığında, her birinde farklı bir metin dosyasına koyuyorum. Benim sahip olduğum problem, kullanıcılar daha önce eklediği bir kelimeyi ararken, ilgili kelimeyi bu kelimeyi karşılık gelen bir tanımla basmak için programa ihtiyaç duyuyorlar. Bu yüzden, tanımların metin dosyasında, bu kelimenin başındaki ve sonundaki karşılık gelen tanımın nerede olduğunu bilmek için programa ihtiyacım var, ve sonra bunu yazdır. Bu mümkün ise veya bilmiyorumMetni bir .txt dosyasından başka bir metinle başka bir .txt dosyasından bağlayabilir miyim? C#

evet orada aynı sonucu elde etmek için daha iyi bir yol var ama eğer ...

Üzgünüm Anlatabildim Sadece öğrenmeye başladım yapmadığı durumlarda: Şunları yapabilirsiniz

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

Düzenlemenizi geri çevirdim. Eğer yeni kodunuzu bir çözüm olarak göndermek istiyorsanız, bunu tıpkı başkaları gibi bir cevap olarak yazarak doğru şekilde yapın. ** ** sorunuzu ** yanıtlamak için ** sorunuzu düzenlemek uygun değildir. Burada kendi sorunuzu cevaplamak kabul edilebilir - aslında, nasıl yapılacağına adanmış bir [yardım/cevap] bölümü var. –

cevap

0

: P ve üzgün İngilizcem (benim anadil değil)

Gonna burada (o ispanyolca öyle bazıları) kodu koymak büyük değilse! C# ile çalışmak için kullanabileceğiniz harika bir tür var, dictionary denilen yeterince eğlenceli!

Sözlük bir şeyle başka bir şeyle eşleşiyor. Eşleştirdiğiniz şey key olarak adlandırılır ve eşleştirdiğiniz şey value olarak adlandırılır. Öyleyse, örneğinde kelimeler (anahtarlar) kendi tanımlarına (değerler) eşleştiriyorsunuz.

Yapmanız gereken şey, her iki dosyaya da yüklemeniz (zaten yaptığınızı düşündüğüm gibi) ve sonra bunları sözlüğe eklemektir.

Bir sözlüğüne dosyaları yüklemek ve kullanmak nasıl bir örnek:

  • Sen orada emin olmak gerekir:
    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" 
    

    size çelme olabilecek bir kaç şey

    iki dosyanın her birinde tanımları olduğu gibi tam olarak aynı sayıda sözcük
  • Aynı kelimeyi iki kez ekleyemezsiniz - tuşlar benzersizdir! Sözcükle ilişkili tanımı değiştirebilir veya sözcüğü kaldırabilir ve yeni bir tanımla yeniden ekleyebilirsiniz - ancak sözlüğünde önceden bulunan bir anahtarı ekleyemezsiniz.
+0

Teşekkürler dostum, sözlük sınıfını çoktan biliyordum ama bu metin dosyasıyla birlikte kullanabileceğimi düşünmemiştim. Sonunda, sadece bir sözlük ekledikten çok daha fazlasını yapmak zorunda kaldım ama yine de: P – Danielpik

İlgili konular