• Viernes 19 de Abril de 2024, 17:00

Autor Tema:  Eliminar palabras repetidas  (Leído 6180 veces)

badyalberto

  • Miembro activo
  • **
  • Mensajes: 77
    • Ver Perfil
Eliminar palabras repetidas
« en: Domingo 1 de Noviembre de 2009, 21:07 »
0
Código: C#
  1.  
  2. // Programa que lee un fichero de texto y llena una lista con las palabras que contiene sin repetirlas. Despues mostraslas por pantalla.
  3.  
  4. using System;
  5. using System.IO;
  6.  
  7. public class Ejercicio
  8. {
  9.    
  10.     public static void Main()
  11.     {
  12.  
  13.         StreamReader sr = new StreamReader("J:\ASI2\EDD\palabras.txt"); // declaracion de la variable sr de lectura
  14.        
  15.         char[] delimiterChars = { ' ', ',', '.', ':', 't' };
  16.        
  17.         string linia = sr.ReadLine();
  18.  
  19.         while ( linia != null ) // lee la linia
  20.         {
  21.             string[] words = linia.Split(delimiterChars);
  22.            
  23.             Console.WriteLine("{0} words in text:", words.Length);
  24.            
  25.             Array.Sort(words);
  26.             //foreach (string s in words)
  27.             for( int i=0;i<=words.Length;i++)
  28.             {  
  29.                 Console.WriteLine(words[i]);
  30.                 if ( words[i] != words[i+1]){
  31.                  
  32.                     i++;
  33.                 }
  34.                 Console.ReadKey(); 
  35.             }
  36.             linia = sr.ReadLine();
  37.         }
  38.         sr.Close();
  39.        
  40.         Console.ReadKey(); 
  41.     }
  42.    
  43. }
  44.  
  45.  

Como puedo hacer para que no se me cierre el programa, al final de leer las palabras,pero es q ahora tengo q estar dandole al enter con cada palabra.
Y otra cosa, si pongo las palabras una detras de la otra va bien, pero a la q las pongo en varias linias ya solo me lee la primera :S

javi-freelance

  • Nuevo Miembro
  • *
  • Mensajes: 19
  • Nacionalidad: es
    • Ver Perfil
    • http://www.programadorenphp.com
Re: Eliminar palabras repetidas
« Respuesta #1 en: Martes 3 de Noviembre de 2009, 02:27 »
0
Lo de que tengas que estar dándole al enter tantas veces, es porque tienes un "Console.ReadKey();" dentro del for().
Sácalo de ahí y ponlo al final.

mrjuan

  • Miembro activo
  • **
  • Mensajes: 34
  • Nacionalidad: co
    • Ver Perfil
Re: Eliminar palabras repetidas
« Respuesta #2 en: Miércoles 4 de Noviembre de 2009, 16:19 »
0
Hola, ke mas.
Primero ke todo uno saluda, es mas agradable ke llegar diciendo necesito esto o tal cosa no me funciona,
y segundo:
he mirado tu codigo y lo modifique un poco segun tus especificaciones y le agregue unas lineas de codigo de mas para que modifique tambien el TXT...

Código: C#
  1.  
  2. using System;
  3. using System.IO;
  4.  
  5. public class Ejercicio
  6. {
  7.    
  8.     public static void Main()
  9.     {
  10.          
  11.         StreamReader sr = new StreamReader("J:\ASI2\EDD\palabras.txt"); // declaracion de la variable sr de lectura
  12.  
  13.             string sino = "";//variable que determina si se guardan los cambios o no
  14.  
  15.             char[] delimiterChars = { ' ', ',', '.', ':', 't' };
  16.      
  17.             string linia = sr.ReadLine();
  18.  
  19.             string[] words = linia.Split(delimiterChars);
  20.  
  21.             int j = 0;//determinara la posicion en la que se guardaran las palabras modificadas
  22.  
  23.             string[] wordsModificados=words;//guardara las palabras modificadas
  24.  
  25.            
  26.             do
  27.             {
  28.  
  29.                 while ( linia != null ) // lee la linia
  30.                 {
  31.  
  32.                     Console.WriteLine("{0} words in text:", words.Length);
  33.                    
  34.                     Array.Sort(words);
  35.  
  36.                     for( int i=0;i<words.Length;i++)
  37.                     {  
  38.                        
  39.                         if (i > 0)//Valida es es la primer Palabra de words, si no lo es:
  40.                         {
  41.                             if (words[i] == words[i - 1])//si word en la posicion actual es igual a la posicion anterior
  42.                             {
  43.                                 words[i].Remove(0);//elimina el valor de la posicion actual del words
  44.                             }
  45.                             else
  46.                             {
  47.                                 wordsModificados[j] = words[i];
  48.                                 j++;
  49.                                 Console.WriteLine(words[i]);//si no es igual lo muestra
  50.                             }
  51.                         }
  52.                         else//si es la primer palabra la muestra
  53.                         {
  54.                             wordsModificados[j] = words[i];
  55.                             j++;
  56.                             Console.WriteLine(words[i]);
  57.                         }
  58.                     }
  59.  
  60.                     linia = sr.ReadLine();//lee la siguiente linea en el txt
  61.                
  62.  
  63.                 sr.Close();
  64.  
  65.                
  66.                
  67.                     Console.Write("Desea Guardar los cambios? s/n : ");
  68.  
  69.                     sino = Console.ReadLine();
  70.  
  71.                     //modifica el archivo de texto
  72.                     if (sino == "s" || sino == "S")
  73.                     {
  74.  
  75.                         StreamWriter Escritor = File.CreateText("J:\ASI2\EDD\palabras.txt");
  76.                         for (int i = 0; i < j; i++)
  77.                         {
  78.  
  79.                             Escritor.Write(wordsModificados[i] + ",");
  80.                         }
  81.                         Console.WriteLine("Archivo Modificado");
  82.                         Escritor.Close();
  83.                         Console.ReadKey();
  84.                     }
  85.                    
  86.                     sino = "";
  87.                    
  88.                 }
  89.             }
  90.             while (sino == "s" || sino == "S");
  91.     }
  92. }
  93.  
  94.  

espero haberte sido de gran ayuda.  ;)

tannke

  • Miembro MUY activo
  • ***
  • Mensajes: 152
  • Nacionalidad: es
    • Ver Perfil
Re: Eliminar palabras repetidas
« Respuesta #3 en: Miércoles 4 de Noviembre de 2009, 17:59 »
0
buenas, espero euivocarme, a veces estoy algo espeso y no me doi cuenta. El tema esta con este ultimo codigo que posteastes.

Es posible que en la linea 61 te falte cerrar el bucle while?? osea un  " } " lo digo porque sino me esta dando la senzación que esta ocurriendo lo siguiente:

lees la primera linea y la procesas separando las palabras.

ya despues de esto entramos en los bucles,
en ellos haces todo el proceso y al terminar lees la 2ª linea y justo despues cierras el StremReader (ya no podras leer la 3ª)

continuamos dentro del bucle y pides si quieres guardar cambios, pongamos que "no" por ejemplo para continuar leyendo el resto de filas y no sobreescribir el archivo

volvemos a empezar el bucle y ya en este caso no estas procesando la segunda linea sino que estas con "words" que fue creado fuera del bucle con la primera linea y desde ahi ya no lo has vuelto a modificar.

acabas el proceso for y te encuentras con otro sr.ReadLine(); con el problema que ya habias cerrado "sr" Aqui seguramente te suelte un error.

Saludos y espero me este equivocando es que llevo todo el dia trabajando y ando algo espesito, y ahora mismo tampoco puedo provarlo no tengo el VS en este pc para verlo

Lo dicho, Saludotes