• Domingo 15 de Diciembre de 2024, 21:05

Autor Tema:  Necesito Ayuda Por Favor Es Urgente  (Leído 2995 veces)

(¯`·._.·`DarkAngeL`·._.·´

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Necesito Ayuda Por Favor Es Urgente
« en: Miércoles 30 de Noviembre de 2005, 10:05 »
0
Alguien sabe como le hago para cargar de un archivo .txt a un arbol... gracias desde ya

pitukilloloco

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Necesito Ayuda Por Favor Es Urgente
« Respuesta #1 en: Miércoles 30 de Noviembre de 2005, 10:59 »
0
¿cuál es tu problema? ¿no sabes usar las funciones para manejar archivos de texto? ¿no sabes manipular los árboles (binarios supongo)? ¿ambos?

(¯`·._.·`DarkAngeL`·._.·´

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Necesito Ayuda Por Favor Es Urgente
« Respuesta #2 en: Jueves 1 de Diciembre de 2005, 01:39 »
0
Cita de: "pitukilloloco"
¿cuál es tu problema? ¿no sabes usar las funciones para manejar archivos de texto? ¿no sabes manipular los árboles (binarios supongo)? ¿ambos?
si ambos te gradeceria si me ayudas por favor es urgente...

ocupo cargar de un archivo .txt que tienen datos de tipo info (que son enteros y string, int cod, string nomb)... ocupo cargar ese archivo e insertarlo en un arbol binario de busqueda..

pitukilloloco

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Necesito Ayuda Por Favor Es Urgente
« Respuesta #3 en: Jueves 1 de Diciembre de 2005, 01:58 »
0
Yo te puedo ayudar en darte una guía de cómo podrías resolverlo, pero si lo que quieres es que alguien te resuelva una tarea de la escuela, entonces este no es el foro indicado, si eso es lo que quieres puedes poner tu problema en esta liga a otro foro http://www.elrincondelc.com/portal/modules...e=viewforum&f=4, el cual trata de Trabajos de clase, y quizá alguien que haya resuelto un problema similar o alguien que quiera ayudarte te proporcione el código que resuelva tu problema.

(¯`·._.·`DarkAngeL`·._.·´

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Necesito Ayuda Por Favor Es Urgente
« Respuesta #4 en: Jueves 1 de Diciembre de 2005, 07:55 »
0
Gracias por tan amable bienvenida... so no es que me resuelvan ninguna tarea es un proyecto de la universidad pero no se como hacer esa parte si se manejar arboles pero no se como cargar de un archivo los datos para insertarlos en la misma estructura ya mencionada...


Algo como esto pero algo me está faltando en el método de cargar archivo... te agradecería mucho la ayuda...



void ArbolCarrera::cargar_archivos(){  // carga todos los archivo a la lista
        ifstream Archivo_Arbol_Carrera("ArbolCarrera.txt", ios::in); //abre el archivo
        cargar_archivo(Archivo_Arbol_Carrera);
}



void ArbolCarrera::cargar_archivo(ifstream &archivo){
        if (!archivo){//si no se pudo abrir el archivo
            Application->MessageBoxA("No se pudo abrir el archivo", "Aviso");
        }else{
 
                InfoCarrera info;
                while (archivo >>info.codigo_carrera >>info.nombre_carrera)
                        Inserta(info);
                // inserta un nuevo nodo en la lista con la informacion del archivo

        }
        archivo.close(); // cierra el archivo pasado
}

pitukilloloco

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Necesito Ayuda Por Favor Es Urgente
« Respuesta #5 en: Jueves 1 de Diciembre de 2005, 23:29 »
0
Las funciones de c++ para manejar flujos nunca me han gustado y la verdad me ha dado flojera aprenderlas. Cuando hago programas para manejar archivos yo utilizo las funciones de la librería estándar <stdio.h>. Te voy a dar un ejemplo en modo consola que lee un archivo de texto desde la línea de comandos y te lo muestra en la pantalla (bueno, si no lo redireccionas a otra parte), usando estas funciones. Si otro lector pudiera darte un ejemplo pero con la librería de flujos pues bienvenido.
Código: Text
  1.  
  2. #include &#60;stdio.h&#62;
  3. #include &#60;stdlib.h&#62;
  4.  
  5. #define MAXSTR 512
  6.  
  7. int main (int argc, char *argv[])
  8. {
  9.    FILE *fp;                 /* apuntador al archivo */
  10.    char cadena[MAXSTR + 1];
  11.  
  12.    /* verifica que se le dio un nombre de archivo desde la línea de comandos */
  13.    if (argc != 2) {
  14.       fprintf (stderr, &#34;&#092;nDebe proporcinarse el nombre del archivo.&#092;n&#34;);
  15.       exit (EXIT_FAILURE);
  16.    }
  17.  
  18.    /* abre y al mismo tiempo verifica que el archivo exista */
  19.    if ((fp = fopen (argv[1], &#34;r&#34;)) == NULL) {
  20.       fprintf (stderr, &#34;&#092;nError al abrir el archivo %s.&#092;n&#34;, argv[1]);
  21.       exit (EXIT_FAILURE);
  22.    }
  23.  
  24.    while (!feof (fp)) { /* mientra no se alcance el fin de archivo */
  25.       fgets (cadena, MAXSTR, fp);
  26.       printf (&#34;%s&#34;, cadena);
  27.    }
  28.  
  29.    fclose (fp);   /* cierra el archivo */
  30. }
  31.  
  32.  
  Sabiendo leer las líneas de un archivo de texto, sólo es cuestión de ver cómo están los datos dispuestos en él para interpretarlos y escribirlos en las variables adecuadas.
   Por ejemplo, si vas a insertar números enteros al árbol y estos vienen uno tras otro, separados por espacios en cada línea, entonces, suponiendo que tengo una función void Inserta (int num) que inserta un número en el árbol, esta podría ser una manera de hacerlo
Código: Text
  1.  
  2. int numero;
  3. char *p = cadena;
  4. while (1) {
  5.    for (&#59; *p && *p != '&#092;n' && *p == ' '; p++) /* salta todos los espacios */
  6.      &#59;
  7.    if (!*p || *p == '&#092;n')
  8.       break;
  9.    if (sscanf (p, &#34;%d&#34;, &numero) == 1)
  10.       Inserta (numero);
  11.    for (&#59; *p && *p != '&#092;n' && *p != ' '; p++) /* busca el siguiente espacio */
  12.      &#59;
  13. }
  14.  
  15.  
  Con respecto al árbol binario ¿ya sabes cómo se programa o necesitas ayuda?

(¯`·._.·`DarkAngeL`·._.·´

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Necesito Ayuda Por Favor Es Urgente
« Respuesta #6 en: Viernes 2 de Diciembre de 2005, 21:27 »
0
Gracias me sirvio tu ayuda, pero ahora me falta un detalle el archivo no solo carga un numero o una lista de numeros sino que carga numero y nombre y necesito saber como separar el numero y el nombre para poderlos insertar

Gracias.. genio :smartass:

pitukilloloco

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Necesito Ayuda Por Favor Es Urgente
« Respuesta #7 en: Sábado 3 de Diciembre de 2005, 08:42 »
0
Bueno, eso depende de como van a estar los datos del número y el nombre en las líneas que componen el archivo. Por ejemplo, los sistemas de gestión de bases de datos antiguos traían una opción (seguramente los de ahora también los traen pero no sé si funcionan igual) para pasar una tabla a un archivo de texto plano (o sea sin formato). Entonces si, por ejemplo, la tabla se componia con registros cuyos campos eran nombre, un dato entero y un dato en punto flotante, un registro como este
Citar
Miguel de Cervantes y Saavedra, 1547, 3.1416
lo pasaba a una línea de texto de esta manera
Citar
"Miguel de Cervantes y Saavedra", "1547", "3.1416"
y así, el siguiente registro de la tabla, lo convertía a esta línea de texto con los campos entrecomillados y la añadía al archivo de texto.

   Vamos a suponer que el archivo de texto del que tu quieres leer los datos para pasarlos al árbol binario tenga este formato, o sea, un entero entrecomillado, una coma, y después un nombre entrecomillado en cada línea, entonces este es el fragmento de un código que extrae estos campos.
Código: Text
  1.  
  2. #define MAXSTR 512
  3.  
  4. int i, numero;
  5. char *p = cadena, nombre[MAXSTR];
  6.  
  7. for (; *p && *p != '&#092;&#34;'; p++) /* busca las comillas que comienzan el numero */
  8.   &#59;
  9. p++;
  10. sscanf (p, &#34;%d&#34;, &numero);
  11. for (; *p && *p != '&#092;&#34;'; p++) /* busca las comillas que finalizan el numero */
  12.   &#59;
  13. for (p++; *p && *p != '&#092;&#34;'; p++) /* busca las comillas que comienzan el nombre */
  14.   &#59;
  15. for (p++, i = 0; *p && *p != '&#092;&#34;'; i++, p++)
  16.    nombre[i] = *p;
  17. nombre[i] = '&#092;0';
  18. Inserta (numero, nombre);
  19.  
  20.