Autor
|
Tema: Lectura de archivo secuencial a acceso directo (Leído 3,919 veces)
|
josri
Desconectado
Mensajes: 13
|
Hola saludos a todos, vengo para ver si me pueden hechar un cable, mi problema es el siguiente, tengo el codigo para poder leer un archivo secuencial, pero me falta escribir ese mismo archivo a uno de acceso directo y poder consultar el de acceso directo pero solo me quedo hasta la lectura del archivo secuencial ... #include <stdio.h> #include <string.h>
int main(){ FILE *archivo=NULL; char nombreArchivo [15]; char contenido [128]; char nombre [50]; char paterno [50]; char materno [50]; char licenciatura[50]; char matricula[15];
printf("\nNombre de archivo: "); scanf("%s",&nombreArchivo); archivo = fopen(nombreArchivo,"r");
while(archivo == NULL){ printf("El archivo no pudo abrirse"); printf("\n\nNombre de archivo: "); scanf("%s",&nombreArchivo); archivo = fopen(nombreArchivo,"r"); }
while(!feof(archivo)){
fscanf(archivo,"%[^,],%[^,],%[^,],%[^,],%[^\n]\n",&nombre,&paterno,&materno,&licenciatura,&matricula); printf("\nNombre:%s",nombre); printf("\nA.Paterno:%s",paterno); printf("\nA.Materno:%s",materno); printf("\nLicenciatura:%s",licenciatura); printf("\nMatricula:%s",matricula); printf("\n----------------------------------\n"); } fclose(archivo); system("pause"); return 0; }
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Los cambios que requiere el programa son muchos. Lo primero que debes hacer es eliminar la inclusión del encabezado <string.h> ya que no es necesario, también hay que eliminar la pausa ya que no es parte del programa. Y salvo casos excepcionales no se debe utilizar la función "feof" para controlar la lectura mediante un bucle, esto porque la función retorna verdadero (diferente de cero) solo después que una función de lectura falla. Un archivo compuesto por lineas de texto plano no permite el acceso aleatorio primero porque varia la longitud de cada linea y segundo porque en ese modo no puede utilizarse la función "fseek" (no en la misma forma que un archivo abierto en modo "b"). ¿Ya han visto el uso de estructuras? Porque para el acceso aleatorio lo usual es 1) Abrir el archivo en modo binario y 2) Escribir/Leer utilizando las funciones fwrite/fread, el objeto en cuestión es de tipo "struct x" el cual representa un registro. Un programa que puede tomarse como base es: #include <stdio.h> #include <stdlib.h> struct registro { char contenido [128]; char nombre [50]; char paterno [50]; char materno [50]; char licenciatura[50]; char matricula[15]; }; int main(void) { FILE *entrada; char nom_archivo[32]; struct registro reg; puts("Nombre del archivo:"); scanf("%31s", nom_archivo ); if ((entrada = fopen(nom_archivo , "rb")) == NULL ){ return EXIT_FAILURE; } while(fread(® , sizeof reg , 1, entrada ) == 1){ printf("Nombre: %s\n", reg. nombre); printf("A.Paterno: %s\n", reg. paterno); printf("A.Materno: %s\n", reg. materno); printf("Licenciatura: %s\n", reg. licenciatura); printf("Matricula: %s\n", reg. matricula); } return EXIT_SUCCESS; }
Ese seria el equivalente para tener acceso aleatorio pero, como ya te había comentado, primero debemos saber si ya manejan estructuras. Por supuesto lo primero que debes hacer es, mediante una operación similar, escribir los datos en el archivo. Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
josri
Desconectado
Mensajes: 13
|
Hola gracias por la ayuda, mira segun yo avance un poco pero me quedo trabado en una parte... para empezar el programa toma un archivo de texto que tiene como contenido algo mas o menos asi: juan hernandez,perez,computacion,009090 jose,soto,leon,quimica,22222 . . etc. el programa lo que hace es un archivo nuevo y pasa la informacion del anterior al nuevo como archivo de acceso directo para que quede todo la informacion seguida en una sola linea, claro con los espacios de cada cadena, pero ahora mi problema es que a la hora de pasaar los datos al archivo nuevo solo pasa el ultimo alumno y lo que quiero es que se pasen todos los alumnos del archivo, les muestro el codigo que llevo... /* PROGRAMA DE CREACIÓN Y ESCRITURA EN UN ARCHIVO DE ACCESO DIRECTO */ #include <stdlib.h> #include <stdio.h> char menu(); FILE *archivo=NULL; void insertarAlumno(); void buscarAlumno(); char nombreArchivo [15]; void crearArchivo();
typedef struct{ char nombre[25]; char apellidoPaterno[25]; char apellidoMaterno[25]; char licenciatura[40]; char matricula[15]; }Alumno;
Alumno alu;
int main(){ int opcion = 0;
while(opcion != 3){
printf("Programa de manejo de alumnos: "); printf("\n1. Crear un nuevo archivo de alumnos"); printf("\n2. Cargar el archivo de acceso directo"); printf("\n3. Salir"); printf("\nQue opcion deseas: "); scanf("%d",&opcion);
if(opcion == 1){ crearArchivo(); }
else if(opcion == 2){ insertarAlumno(); }
else if(opcion ==3){ printf("Fin del programa"); }
else{ printf("\nOpcion no válida"); }
}
}
void crearArchivo(){ FILE *archivoDirecto; archivoDirecto=fopen("alumnosDirecto.txt","w"); fclose(archivoDirecto); }
void insertarAlumno(){
FILE *archivoDirecto; int idAlumno;
archivoDirecto=fopen("alumnosDirecto.txt","a"); printf("\nNombre de archivo que desa cargar: "); scanf("%s",&nombreArchivo); archivo = fopen(nombreArchivo,"r"); while(!feof(archivo)){
fscanf(archivo,"%[^,],%[^,],%[^,],%[^,],%[^\n]\n",&alu.nombre,&alu.apellidoPaterno,&alu.apellidoMaterno,&alu.licenciatura,&alu.matricula); } fseek(archivoDirecto,idAlumno*sizeof(Alumno),SEEK_SET);
fwrite(&alu,sizeof(Alumno),1,archivoDirecto); fclose(archivoDirecto); }
Sospecho que mi error se encuentra en esta parte pero no se muy bien... while(!feof(archivo)){ }
|
|
|
En línea
|
|
|
|
josri
Desconectado
Mensajes: 13
|
Ya he solucionado el problema, gracias rir3760 por la informacion
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Error al poner una estructura al leer un archivo de acceso directo
.NET (C#, VB.NET, ASP)
|
javier234-
|
8
|
6,565
|
2 Febrero 2011, 23:39 pm
por javier234-
|
|
|
Problema en codigo. Escritura y Lectura de un archivo secuencial
Programación C/C++
|
traviatØ
|
1
|
3,552
|
26 Octubre 2012, 17:17 pm
por rir3760
|
|
|
Problema de exec secuencial de archivos[C]
Programación C/C++
|
MrJava
|
0
|
1,662
|
4 Abril 2013, 16:24 pm
por MrJava
|
|
|
No puedo lanzar archivo .com mediante acceso directo (.pif) en modo minimizado.
Windows
|
Hacking_philosophus
|
0
|
2,118
|
23 Marzo 2015, 14:05 pm
por Hacking_philosophus
|
|
|
archivo secuencial de texto a archivo for random aleatorio
Programación Visual Basic
|
corlo
|
1
|
2,839
|
14 Enero 2016, 22:35 pm
por XresH
|
|