Autor
|
Tema: Archivos en Lenguaje C (Leído 2,484 veces)
|
Nachillo
Desconectado
Mensajes: 4
|
Primero que nada muchas gracias de ante mano por darse el tiempo de leer mi duda... es la primera vez que me atrevo a preguntar en un foro, por que tengo una duda sobre el Lenguaje C, Es lo siguiente es sobre los Archivos, se usar y crear archivos para guardar datos, usar el 'fprintf' y se guarda en el archivo de texto.. pero mi duda es que si lo puedo usar como una base de datos muy básica. UN EJEMPLO: -Si tuviera un programa que guarda el nombre de 10 personas y cuando terminara el programa ya se que mi archivo de texto se encuentra con los 10 nombres el problema es que cuando entro al programa nuevamente y tengo una función de buscar, con el nombre, al acceder yo el nombre, ya no puede buscar nada, solamente cuando yo no he cerrado el programa y apenas voy metiendo los 10 nombres, quisiera que pudiese leer una linea y no todo el archivo, es posible esto?? si, si es posible me podrían explicar como hacerlo, no se si me explique bien. Solo quiero que lea una parte del archivo y no todo. Muchas gracias de ante mano, soy novato en esto de la programación, me encantaría contar con ayuda de alguien. y si yo pudiera a ayudar a alguien con gusto y con mis pocos conocimientos lo haría, muchísimas gracias.. Adios...
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Lo que puedes hacer es, leer primero el archivo completo en una variable char*, y luego trabajar sobre ese archivo. Si quieres coger linea a linea, recorres el char* hasta encontrar un caracter '\n'. Una vez lo encuentres, sabes que lo que hay entre el '\n' anterior y este, es una linea. Puedes guardar la linea en otra variable, copiandola, si se te hace más fácil que trabajar con índices o con punteros.
Ve haciendolo por partes.
|
|
|
En línea
|
|
|
|
Nachillo
Desconectado
Mensajes: 4
|
MUCHISIMAS GRACIAS por contestar y dar un poco de tiempo. mira este es el código que estaba haciendo por el ejemplo que describí en mi pregunta. y me encontre con otro problema y es que Cuando agrego una persona, va bien y lo puedo buscar pero cuando agrego otra persona ya no puedo buscarla me lanza el mensaje que puse ahi que si no encontraba el nombre dijera el mensaje de ""El nombre NO existe.", como se puede solucionar el problema, Si es posible pudiera EXPLICARME que he batallado con esto de los archivos. de ante mano Muchas Gracias. // Ejemplo para el blog.
#include <stdio.h> #include <stdlib.h> #include <string.h> #define N 50 #define G 10
//Prototipos void funcion(); void agregar(); void vacio(); void cambio(); void buscar();
//Estructura typedef struct{ //Variable para saber si ya esta ocupado el lugar con un nombre. int lleno; //Variable para el nombre. char nombre[N]; //variable para almacenar su edad int edad; }Personas;
Personas per[G];
int main(){ funcion(); system("pause"); return 0; }
//Funcion para vaciar todas las estructuras y poner su vacriable lleno en 0; void vacio(){ int i; for(i=0; i < G ; i++){ per[i].lleno=0; } }
//Funcion para quitar el \n de los strings y poner \0 void cambio(char palabra[N]){ int i; for(i=0; i<N; i++){ if(palabra[i] =='\n'){ palabra[i]='\0'; } } }
//Funcion que muestra el menu y da a eligir lo que se desea hacer. void funcion(){ int op; char key; //Funcion para vaciar todas las estructuras y poner su vacriable lleno en 0; vacio(); do{ do{ printf("Elige una opcion:\n"); printf("(1) Agregar una persona.\n"); printf("(2) Buscar una persona.\n"); printf("(3) Salir.\n"); scanf("%d", &op); }while(op < 1 || op > 4); switch(op){ case 1:{ agregar(); break; } case 2:{ buscar(); break; } } if(op == 3){ printf("Has salido..\n"); break; } else{ printf("Quieres volver al menu[S/N]"); fflush(stdin); scanf("%c", &key); system("cls"); }
}while(key == 'S' || key == 's'); }
void agregar(){ int i,aux=0; char *nombre_archi="datos.txt"; //Crear archivo. FILE *archivo; //Abrir Archivo con 'a' para agregar al final. archivo=fopen(nombre_archi, "a"); for(i=0; i < G && aux==0; i++){ if(per[i].lleno==0){ printf("Escriba el nombre: "); fflush(stdin); fgets(per[i].nombre, N, stdin); //Corrige el error de fgets. cambio(per[i].nombre); fprintf(archivo,"%s..",per[i].nombre); printf("Edad: "); fflush(stdin); scanf("%d", &per[i].edad); //añadir al bloc de notas fprintf(archivo,"%d\n",per[i].edad); //Llenar esta estructura para que no se vuelva a utilizar per[i].lleno=1; //Ruta de escape aux=1; } }
}
void buscar(){ int i,aux=0; char nombretemp[N]; //Poner el bloc de notas en modo lectura. FILE* archivo; char* nombre_archi="datos.txt"; archivo=fopen(nombre_archi,"r"); printf("Introduzca nombre: "); fflush(stdin); fgets(nombretemp,N,stdin); cambio(nombretemp); for(i=0; i < G && aux == 0; i++){ if(strcmp(nombretemp,per[i].nombre)==0){ printf("Nombre: %s\n", per[i].nombre); printf("Edad: %d\n", per[i].edad); aux=1; } else{ printf("El nombre NO existe.\n"); aux=1; } } }
|
|
« Última modificación: 15 Agosto 2015, 04:16 am por Nachillo »
|
En línea
|
|
|
|
DarK_FirefoX
Desconectado
Mensajes: 1.263
Be the change you wanna see in te world
|
No entendí muy bien, pero dime si es esto:
¿El problema que tienes es que cuando agregas 1 persona, y despues la busca, la encuentra bien y te da que la encontró, luego añades otra persona e intentas buscar de nuevo (cualquiera de las 2) y no encuentra ninguna?
Te pregunto para ver si entiendo bien cual es el problema.
Salu2s
Añado PD: Utiliza las etiquetas GeSHi para publicar código de acuerdo al lenguaje de programación que estés usando. Para usarlo debes utilizar el ComboBox a la derecha del botón de cambiar el Tipo De Fuente (osea, la A roja), y seleccionar el lenguaje y luego poner tu código dentro de las etiquetas que te aparecen. Esto facilitará la lectura del código.
|
|
« Última modificación: 15 Agosto 2015, 05:07 am por DarK_FirefoX »
|
En línea
|
|
|
|
Nachillo
Desconectado
Mensajes: 4
|
Muchas gracias por contestar, Si disculpe es que no sabia como usarlo, soy nuevo recién ingrese al foro ayer. Sobre mi duda: No el problema es que cuando agrego a una persona y la busco la encuentra, pero cuando ingreso a otra y la busco me dice que no la encuentra. En pocas palabra el programa solo encuentra ala primer persona que he ingresado. Agradecería mucho que me ayudaran. // Ejemplo para el blog. #include <stdio.h> #include <stdlib.h> #include <string.h> #define N 50 #define G 10 //Prototipos void funcion(); void agregar(); void vacio(); void cambio(); void buscar(); //Estructura typedef struct{ //Variable para saber si ya esta ocupado el lugar con un nombre. int lleno; //Variable para el nombre. char nombre[N]; //variable para almacenar su edad int edad; }Personas; Personas per[G]; int main(){ funcion(); return 0; } //Funcion para vaciar todas las estructuras y poner su vacriable lleno en 0; void vacio(){ int i; for(i=0; i < G ; i++){ per[i].lleno=0; } } //Funcion para quitar el \n de los strings y poner \0 void cambio(char palabra[N]){ int i; for(i=0; i<N; i++){ if(palabra[i] =='\n'){ palabra[i]='\0'; } } } //Funcion que muestra el menu y da a eligir lo que se desea hacer. void funcion(){ int op; char key; //Funcion para vaciar todas las estructuras y poner su vacriable lleno en 0; vacio(); do{ do{ printf("Elige una opcion:\n"); printf("(1) Agregar una persona.\n"); printf("(2) Buscar una persona.\n"); }while(op < 1 || op > 4); switch(op){ case 1:{ agregar(); break; } case 2:{ buscar(); break; } } if(op == 3){ break; } else{ printf("Quieres volver al menu[S/N]"); } }while(key == 'S' || key == 's'); } void agregar(){ int i,aux=0; char *nombre_archi="datos.txt"; //Crear archivo. FILE *archivo; //Abrir Archivo con 'a' para agregar al final. archivo =fopen(nombre_archi , "a"); for(i=0; i < G && aux==0; i++){ if(per[i].lleno==0){ printf("Escriba el nombre: "); fgets(per [i ]. nombre, N , stdin ); //Corrige el error de fgets. cambio(per[i].nombre); fprintf(archivo ,"%s..",per [i ]. nombre); scanf("%d", &per [i ]. edad); //añadir al bloc de notas fprintf(archivo ,"%d\n",per [i ]. edad); //Llenar esta estructura para que no se vuelva a utilizar per[i].lleno=1; //Ruta de escape aux=1; } } } void buscar(){ int i,aux=0; char nombretemp[N]; //Poner el bloc de notas en modo lectura. FILE* archivo; char* nombre_archi="datos.txt"; archivo =fopen(nombre_archi ,"r"); printf("Introduzca nombre: "); fgets(nombretemp ,N ,stdin ); cambio(nombretemp); for(i=0; i < G && aux == 0; i++){ if(strcmp(nombretemp ,per [i ]. nombre)==0){ printf("Nombre: %s\n", per [i ]. nombre); printf("Edad: %d\n", per [i ]. edad); aux=1; } else{ printf("El nombre NO existe.\n"); aux=1; } } }
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Análisis archivos Extensiones cambiadas - Archivos camuflados - Contenido real
« 1 2 »
Software
|
Esgrimidor
|
11
|
9,734
|
24 Septiembre 2011, 01:53 am
por Esgrimidor
|
|
|
Ayuda en manejo de Archivos en Lenguaje C
Programación C/C++
|
theluigy13etv
|
3
|
3,830
|
9 Diciembre 2011, 01:28 am
por rir3760
|
|
|
Archivos dañados tras recuperación de archivos cifrados (virus policia)
Seguridad
|
marianchaparro
|
2
|
10,564
|
17 Mayo 2012, 20:06 pm
por r32
|
|
|
Lenguaje C temas (en orden) que debo aprender para dominar este Lenguaje?
Programación C/C++
|
r_fercho
|
3
|
7,157
|
8 Mayo 2014, 04:56 am
por r_fercho
|
|
|
Tutorial de archivos en lenguaje C. -
« 1 2 3 4 »
Programación C/C++
|
NOB2014
|
39
|
15,752
|
21 Septiembre 2016, 16:19 pm
por AlbertoBSD
|
|