Tablas Hash

Iniciado por r[Ø]cket, 21 Octubre 2009, 16:55 PM

0 Miembros y 1 Visitante están viendo este tema.

r[Ø]cket

hola
lo que sucede es q nesecito hacer una especie de diccionario con las tablas hash, con la que el usuario ingrese la clave (una palabra de un txt) y el debe darle el valor (la definicion de la palabra), ya logre q lea el txt pero no puedo ingresar otra clave que no sea la primera, de lo contrario no retorna nada

este es el codigo q e hecho


using System;
using System.Collections;
using System.IO;


namespace dicc
{
class Program
{

static void Main(string[] args)
{

/* Crea una tabla Hash */
Hashtable tabla = new Hashtable();
try
{
using (StreamReader sr = new StreamReader("dicc.txt"))
{
string linea;
char[] separador = { ':' };

while ((linea = sr.ReadLine()) != null)
{

string[] datos = linea.Split(separador);
string Claves = datos[0];
string Valores = datos[1];
tabla.Add(Claves, Valores);
Console.WriteLine("oprima la Clave y enter");

if (Claves == Console.ReadLine())
Console.WriteLine("{0}: {1}", Claves, Valores);

}

}
}

catch (Exception e)
{
Console.WriteLine("Error en el Archivo:");
Console.WriteLine(e.Message);
}


}
}
}


espero q puedan ayudarme

MANULOMM

no entiendo el problema.
Tienes un archivo .txt que contienes palabras asi:

Palabra1:Definicion1
Palabra2:Definicion2
Palabra3:Definicion3


quieres llevar el contenido del archivo a una tabla hash, en donde la palabra sera la clave y la definición el valor.

lo que no entiendo es por que haces esto:

Console.WriteLine("oprima la Clave y enter");

if (Claves == Console.ReadLine())
Console.WriteLine("{0}: {1}", Claves, Valores);


con que fin? ya tienes los dos valores en la tabla hash para que pides la clave? eso deberia estas por fuera del while cuando termine de leer el archio y de llenar la tabla hash.
lo que quieres que que fuera del while haces otro while en donde pides la clave y haces un Find a la tabla hash para retornar el valor.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia


r[Ø]cket

;D tienes razon Juan Manuel  no dejo q se carge la tabla, pero a la hora de hacer el otro while donde pida la clave y la imprima (la definicion) no se como plantearla

MANULOMM

#3
te pongo el code para que lo mires.  :rolleyes: :rolleyes: :rolleyes:
Código (csharp) [Seleccionar]

           Dictionary<string, string> tabla = new Dictionary<string, string>();
           try
           {
               using (StreamReader sr = new StreamReader(Environment.CurrentDirectory + "\\Diccionario.txt"))
               {
                   string linea = string.Empty;
                   while ((linea = sr.ReadLine()) != null)
                   {
                       string[] datos = linea.Split(':');
                       //Adicionamos la clave en mayusculas para que no interfiera con la busqueda.
                       string clave = datos[0].ToUpper();
                       string valor = datos[1];
                       tabla.Add(clave, valor);
                   }
               }
               Console.WriteLine("Digite la clave que desea buscar o teclee \"EXIT\" para salir");
               string Comando = Console.ReadLine().ToUpper();
               //Si se teclea "EXIT" se cierra el programa.
               while (Comando.ToUpper() != "EXIT")
               {
                   if (tabla.ContainsKey(Comando))
                   {
                       string valor = tabla[Comando];
                       Console.WriteLine("La definición para {0} es: {1}", Comando, valor);
                   }
                   else
                   {
                       //La Clave no existe.
                       Console.WriteLine("La clave buscada no existe.");
                   }
                   Console.WriteLine("Oprima una tecla para realizar otra busqueda");
                   Console.ReadLine();
                   Console.Clear();
                   Console.WriteLine("Digite la clave que desea buscar o teclee \"EXIT\" para salir");
                   Comando = Console.ReadLine().ToUpper();
                   
               }
           }
           catch (Exception e)
           {
               Console.WriteLine("Error en el archivo: ");
               Console.WriteLine(e.Message);
           }

tiene algunas mejorillas como por ejemplo, en vez de utilizar una clase Hashtable utilice una clase Dictionary que cumple con la funcionalidad pero es generica y me gusta mas.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia


r[Ø]cket

;-) Juan Manuel GRACIAS!!....en verdad me has ayudado mucho, ademas que esta bien sencillo y explicado que hasta yo  entiendo el codigo. Era justo lo q nesecitaba

MANULOMM

de nada... jejeje  ;D ;D ;D ;D

Atentamente,

Juan Manuel Lombana
Medellín - Colombia