elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda T_T - Ejercicio de Archivos en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda T_T - Ejercicio de Archivos en C  (Leído 2,385 veces)
palacio29

Desconectado Desconectado

Mensajes: 103


Ver Perfil
Ayuda T_T - Ejercicio de Archivos en C
« en: 25 Septiembre 2016, 19:42 pm »

Hola

Tengo un problema con un ejercicio de informatica. Me resulta imposible.
Lo que tengo que hacer es leer de un archivo txt que tengo en mi computadora que tiene el siguiente formato

37785443,agustin,francia
377685532,Pablo Rodriguez,Nicaragua

Osea el formato viene siendo DNI,Nombre,Pais. Esos datos guardados en un txt, cada dato separado con una coma.

Lo que tengo que hacer es agarrar ese archivo y mostrarlo por pantalla.
Hasta ahora hice lo siguiente

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7.    FILE*arch;
  8.    arch=fopen("C:\\Users\\PC\\Desktop\\personas2.txt","r");
  9.    int i=0,j=0,documento=0;
  10.    char aux,l;
  11.    char nombre[50]={0};
  12.    char pais[50]={0};
  13.  
  14.    while (!feof(arch))
  15.    {
  16.  
  17.        fscanf(arch,"%d",&documento);
  18.        fgetc(arch);
  19.        aux=fgetc(arch);
  20.        l=aux;
  21.        while (l!=',' && l!='\n' && i<50)
  22.        {
  23.  
  24.              nombre[i]=l;
  25.  
  26.  
  27.           aux=fgetc(arch);
  28.           l=aux;
  29.           i++;
  30.        }
  31.        nombre[i]='\0';
  32.        i=0;
  33.        aux=fgetc(arch);
  34.        l=aux;
  35.  
  36.        while (l!=',' && l!='\n' && i<50)
  37.        {
  38.  
  39.             pais[i]=l;
  40.  
  41.  
  42.             aux=fgetc(arch);
  43.             l=aux;
  44.             i++;
  45.        }
  46.        pais[i]='\0';
  47.        i=0;
  48.        printf("%d\t%s\t%s\n",documento,nombre,pais);
  49.    }
  50.    fclose(arch);
  51.  
  52.  
  53.  
  54.  
  55.    return 0;
  56. }
  57.  

El problema es que siempre me queda mal, o no me imprime un nombre, o imprime mal el país. Trato con varios valores y siempre la pifia
Lo que trato de hacer es que primero tome el documento y luego vaya tomando letra por letra hasta una coma y ahi poner \0.
Desde ayer que estoy con esto y no lo puedo sacar bien


En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Ayuda T_T - Ejercicio de Archivos en C
« Respuesta #1 en: 25 Septiembre 2016, 21:58 pm »

Puedes usar funciones como strtok o strstr?

Saludos


En línea

palacio29

Desconectado Desconectado

Mensajes: 103


Ver Perfil
Re: Ayuda T_T - Ejercicio de Archivos en C
« Respuesta #2 en: 26 Septiembre 2016, 03:44 am »

Puedes usar funciones como strtok o strstr?

Saludos

Hola

Disculpa la demora. Ya lo hice y me salio pero tengo una duda que quizas lo sabes.

Este es el codigo finalizado. Basicamente saque el documento con el fprintf y para el nombre y el pais use dos while, cada parte  la guardaba en un arreglo y sacaba cada caracter con fgetc.
El problema es que supongamos que tengo esta linea en el archivo txt

37481881,pablo,argentina.

Cuando debuggeo el programa, cuando llega a la letra "o" de pablo, en vez de pasar a la coma como el proximo caracter, aparece que en la variable letra se guarda un "\r" que no se de donde viene y me obliga a hacer un if en cada while para evitar que tome el \r.
Me fije el archivo y obviamente no tiene un \r en ese lugar. Asi que no se porque me pasa eso.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    FILE*arch;
  7.    int doc;
  8.    int i=0;
  9.    int j=0;
  10.    char nombre[50];
  11.    char pais[50];
  12.    char letra;
  13.    arch=fopen("C:\\Users\\Pablo-PC\\Desktop\\personas.txt","r");
  14.    if (arch==NULL)
  15.    {
  16.        printf("Error.");
  17.    }
  18.  
  19.    printf("Documento\tNombre\t\tPais\n");
  20.    fscanf(arch,"%d,",&doc);
  21.    while(!feof(arch) && j<4)
  22.    {
  23.     letra=fgetc(arch);   ///Da la primera letra P
  24.     while(letra!=',' && i<50)
  25.     {
  26.         if (letra!='\r')
  27.         {
  28.          nombre[i]=letra;
  29.         i++;
  30.         }
  31.  
  32.         letra=fgetc(arch);
  33.     }
  34.     nombre[i]='\0';
  35.     i=0;
  36.  
  37.     letra=fgetc(arch);
  38.     while(letra!='\n')
  39.     {
  40.         if (letra!='\r')
  41.         {
  42.           pais[i]=letra;
  43.            i++;
  44.         }
  45.  
  46.         letra=fgetc(arch);
  47.     }
  48.     pais[i]='\0';
  49.     i=0;
  50.     j++;
  51.     printf("%d\t%s\t%s\n",doc,nombre,pais);
  52.    fscanf(arch,"%d,",&doc);
  53.    }
  54.  
  55.    fclose(arch);
  56.  
  57.    return 0;
  58. }
  59.  
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Ayuda T_T - Ejercicio de Archivos en C
« Respuesta #3 en: 26 Septiembre 2016, 14:32 pm »

¡Buenas!

Lo del retorno de carro no se de donde te sale. De todas formas yo lo que haría, por simplicidad de código y sabiendo que cada campo está delimitado por comas, sería leer cada línea utilizando fgets, que también extrae el salto de línea que hay al final de cada línea, (puedes suponer que cada campo tiene una cantidad menor a, por ejemplo, 100 caracteres, 300 en total), y utilizar cadenas para almacenar cada campo utilizando sscanf para hacer una lectura con formato sobre la línea leída:
Código
  1. while(fgets(linea))
  2. {
  3.    sscanf(linea,"%s,%s,%s", dni, nombre, pais);
  4.    //ahora haces lo que quieras con esos datos
  5. }
  6.  

¡Saludos!

Acabo de ver que los nombres pueden tener espacios, así que el código anterior no sirve. En lugar de sscanf tendrías que utilizar strtok, incluida en string.h, utilizando la coma como delimitador, combinada con strcpy.
« Última modificación: 26 Septiembre 2016, 14:37 pm por do-while » En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda T_T - Ejercicio de Archivos en C
« Respuesta #4 en: 26 Septiembre 2016, 14:36 pm »

Este otro hiĺo
http://foro.elhacker.net/programacion_cc/solucionadoimposible_mostrar_texto_de_un_txt_en_c-t458200.0.html
está realuzando el mismo ejercicio y ya está marcado como resuelto. Pásatr por ahí a ver si puedes resolver tus dudas.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ejercicio: .bat que distribuye archivos por su extensión
Scripting
miguelangelss4 0 2,012 Último mensaje 24 Noviembre 2007, 20:47 pm
por miguelangelss4
[Ayuda] Ejercicio C 100
Ejercicios
Dem0ny 2 6,033 Último mensaje 19 Diciembre 2007, 22:45 pm
por Dem0ny
[Ejercicio] Aca tienen un ejercicio para practicar « 1 2 3 »
Programación Visual Basic
Dreamaker 20 15,748 Último mensaje 5 Septiembre 2010, 02:57 am
por TGa.
Ayuda ejercicio de Pascal, cuando uno no lo ve claro pide ayuda
Programación General
manu3742 1 3,237 Último mensaje 31 Marzo 2011, 15:43 pm
por d(-_-)b
Ayuda Con Ejercicio
ASM
sebis 1 2,914 Último mensaje 10 Septiembre 2012, 13:12 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines