Foros del Web » Programación para mayores de 30 ;) » C/C++ »

acceso aleatorio ficheros

Estas en el tema de acceso aleatorio ficheros en el foro de C/C++ en Foros del Web. este es mi codigo FILE *pf; char cadena[4000]; int pos; printf("ingrese posicion del registro"); scanf("%d",&pos); pf=fopen("ejemplo.txt","r"); if( pf==NULL) printf("error"); else fseek(pf,pos*sizeof(cadena),SEEK_SET); fread(&cadena,sizeof(cadena),1,pf); printf("el registro es: ...
  #1 (permalink)  
Antiguo 23/10/2011, 11:19
 
Fecha de Ingreso: septiembre-2011
Mensajes: 25
Antigüedad: 12 años, 7 meses
Puntos: 0
acceso aleatorio ficheros

este es mi codigo

FILE *pf;
char cadena[4000];
int pos;
printf("ingrese posicion del registro");
scanf("%d",&pos);
pf=fopen("ejemplo.txt","r");
if( pf==NULL)
printf("error");
else
fseek(pf,pos*sizeof(cadena),SEEK_SET);
fread(&cadena,sizeof(cadena),1,pf);
printf("el registro es: %c",cadena[4000]);

quiero leer un registro en la posicion que yo ingreso por teclado y me lo muestre por pantalla, pero no me muestra nada
  #2 (permalink)  
Antiguo 23/10/2011, 11:34
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: acceso aleatorio ficheros

Primero a que llamas registro?? En este caso es un caracter o una cadena de caracteres???
Como lo tenes hecho cada registro ocupa 4000 Caracteres, no te parece una barbaridad? Por eso te pregunto que es un registro.
Despues a la hora de imprimir, lo imprimos como si fuese un caracter, encima de una posicion del array que no existe (Los array empiezan desde el cero).

Cuando me puedas resolver esas dudas, quedara mas claro como ayudarte.

Saludos
  #3 (permalink)  
Antiguo 23/10/2011, 12:42
 
Fecha de Ingreso: septiembre-2011
Mensajes: 25
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: acceso aleatorio ficheros

tengo un archivo txt llamado ejemplo que tiene escrito
primero
segundo
tercero

a esto le llamo registro(cadad uno de las lineas escritas)

ahora quiero leer tercero y mostrarlo por pantalla
  #4 (permalink)  
Antiguo 23/10/2011, 13:39
 
Fecha de Ingreso: septiembre-2011
Mensajes: 25
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: acceso aleatorio ficheros

tengo un archivo txt llamado ejemplo que tiene escrito
primero
segundo
tercero

a esto le llamo registro(cadad uno de las lineas escritas)

ahora quiero leer tercero y mostrarlo por pantalla


/*creo q lo he corregido un poco pero aun no me sale*/

void consulta()
{
int n,
if((pf=fopen("ejemplo.txt","r"))==NULL)
{
printf("error");
}
else
printf("numero de resgistro");
scanf("%d",&n);

fseek(pf,n*sizeof(char),SEEK_SET);

fread(&cadena,sizeof(char),1,pf) ;
printf("%c",cadena[4000])
}
  #5 (permalink)  
Antiguo 23/10/2011, 14:15
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: acceso aleatorio ficheros

Con el fseek te estass moviendo segun caracteres. SI tu quieres tener el tercer registro deberias moverte muchos caracteres, no solo 3.

Ademas, tienes el problema que los registros no tienen longitud fija, asi que no puedes pegar un salto y listo.

Podrias usar fgets asi:

fgets(cadena,4000, pf)

Con fgets lees de a una linea. Prueba imprimir asi:
printf("%s",cadena)

Bueno esa es una idea. Te recomiendo estudiar un poco de arreglos, porque no estas usandolos bien, y por eso es que ni te acercas a lo que quieres.

Saludos
  #6 (permalink)  
Antiguo 23/10/2011, 14:28
 
Fecha de Ingreso: septiembre-2011
Mensajes: 25
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: acceso aleatorio ficheros

Cita:
Iniciado por sam90 Ver Mensaje
Con el fseek te estass moviendo segun caracteres. SI tu quieres tener el tercer registro deberias moverte muchos caracteres, no solo 3.

Ademas, tienes el problema que los registros no tienen longitud fija, asi que no puedes pegar un salto y listo.

Podrias usar fgets asi:

fgets(cadena,4000, pf)

Con fgets lees de a una linea. Prueba imprimir asi:
printf("%s",cadena)

Bueno esa es una idea. Te recomiendo estudiar un poco de arreglos, porque no estas usandolos bien, y por eso es que ni te acercas a lo que quieres.

Saludos

ya puse lo que me recomiendas pero ahora solo me sale primero

enverdad nesecito ayuda a entender esto
  #7 (permalink)  
Antiguo 23/10/2011, 15:49
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: acceso aleatorio ficheros

Por supuesto que solo va a salir primero si lo dejas asi no mas.... Deberias leer tantas lineas como necesites... Osea si quierres la linea 3 tienes qeu :
leer linea 1
leer linea 2
leer linea 3
imprimir linea 3

Como haces esto, con un for:

for(i=0; i < n ; i++) fgets(cadena,4000, pf) ;
printf("%s",cadena);
  #8 (permalink)  
Antiguo 23/10/2011, 21:18
 
Fecha de Ingreso: septiembre-2011
Mensajes: 25
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: acceso aleatorio ficheros

Cita:
Iniciado por sam90 Ver Mensaje
Por supuesto que solo va a salir primero si lo dejas asi no mas.... Deberias leer tantas lineas como necesites... Osea si quierres la linea 3 tienes qeu :
leer linea 1
leer linea 2
leer linea 3
imprimir linea 3

Como haces esto, con un for:

for(i=0; i < n ; i++) fgets(cadena,4000, pf) ;
printf("%s",cadena);

si pongo el for , el que me va a permitir leer el registro va hacer el for y yo quiero usar la funcion fseek para ir a determinado registro
en mi prgrama lo q me piden es esto

menu
1.ingreso(ingreso de un registro uso el fgets y fputs)
2.modificar(uso fseek)
3.consultar(uso fseek)
4.mostrar(use un while(!feof(pf)))
5.salir(con un do while)
  #9 (permalink)  
Antiguo 24/10/2011, 00:52
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: acceso aleatorio ficheros

La función fseek es para archivos binarios, no de texto. En un archivo de texto, en principio, no puedes colocarte donde quieras para leer/escribir. Un archivo de texto es secuencial, lo que significa que para leer un dato determinado tienes que leer todos los anteriores, y solamente puedes añadir datos al final. Las operaciones de borrar datos, modificarlos, o insertar datos entre los ya existentes, solamente pueden hacerse mediante archivos auxiliares.

Los archivos binarios se leen/escriben mediante registros (bloques de bytes) de longitud fija. Aquí sí puedes ir directamente al registro que quieres leer/escribir.

Te sugiero repasar:

- Las opciones que te da la función fopen para apertura de ficheros.
- Las funciones fscanf, fprintf, fgets, fputs, fread, fwrite.
- Los arreglos en C.

Prueba con este código (solamente te mostrará el contenido de un archivo de texto, línea por línea):
Código C:
Ver original
  1. FILE *pFichero;
  2. char linea[100];
  3.  
  4. int main(void)
  5. {
  6.     pFichero = fopen("NombreFichero", "r");
  7.     while (!feof(pFichero))
  8.     {
  9.         fgets(linea, 100, pFichero);
  10.         printf("%s\n", linea);
  11.     }
  12.     fclose(pFichero);
  13. }

El resto quedaría como "tareas para hacer en casa"... Y ya sabes dónde estamos.

Etiquetas: ficheros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:48.