• Domingo 15 de Diciembre de 2024, 11:50

Autor Tema:  Ayuda Con Fseek  (Leído 2332 veces)

mauricio2

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Ayuda Con Fseek
« en: Jueves 20 de Mayo de 2004, 16:40 »
0
hola migos bueno estoy trabajando con archivos directos que por loque vi es muy buen y tambien interesante, el scomento l oque he escrito aver que tengo mal y que debo cambiar.

do {

 gotoxy(10,6);printf("dato a buscar: ");
 scanf("%s",dato);

 printf("CONSULTA POR %s ",valor);

 fseek,(archivo,x,SEEK_SET);

 fscanf(archivo,"  %s",registro.codigo);
               
 igual= strcmp(dato,registro.codigo);
 if (igual==0)
 {
 gotoxy(10,8);printf("id:    %s",registro.codigo);
 }

}
while (! feof(archivo));

ENTENDIDO que fseek poseciona en el puntero en el archivo, en este caso
en la posicion actual, la x en realidad no se que fucnion toma ya que x sol oesta definida con int pero no le veo la funcion esa es mi primera pregunta.

2. como ven tengo la funcion strcmp que me compara dos cadenas como ven la 2 cadena sale de una estructura(registro.codigo) por lo cual genero la busqueda por ese campo de registro, como podria asignarle una variable a ese campo(registro.codigo) PARA que pueda ser dinamico POR EJEMPLO darle la entrada por scanf y decir , busquedapor :  nombre,apellido ....etc.

lo probe normal capturando el dato pero en el momento de comparar no me funciaona... algun tratamiento especial para esto?.

buen oespero pronta ayuda, muchas gracias.

un amigo

Colombia pais amado.

Rataman

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Ayuda Con Fseek
« Respuesta #1 en: Jueves 20 de Mayo de 2004, 19:45 »
0
Aunque la forma de busqueda que utilizas es bastante pobre, prueba a inicializar la x=0;, y en cada pasada del bucle, sumale 1, x++; y en el fseek, en vez de poner la x sola, pon fseek(archivo,x*sizeof(registro),0); no se si me habras entendido...

mauricio2

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Ayuda Con Fseek
« Respuesta #2 en: Viernes 21 de Mayo de 2004, 15:12 »
0
Claro que eres BASTANTE claro, y gracias por to acotacion, mi sigueinte pregunta es, con archivos directos podemos posecionarnos en el archivo, por ejemplo:
------------------------
1 dato 2 dato 3 dato
------------------------

si consulto por codigo (2 ) tendria (2 dato)

se que el se pocesiona en cada linea del archivo es verdad?

2*  se poseciaona en (3 dato)

lo otro es como podria consultar yo esos registros pero no por codigo si no por dato?

Rataman

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Ayuda Con Fseek
« Respuesta #3 en: Sábado 22 de Mayo de 2004, 10:30 »
0
Si tienes ordenado el fichero por un campo clave k es un numero, te recomiendo k busques informacion sobre la ordenacion shell y la busqueda dicotomica. Y para poder buscar por el campo dato, no te queda mas remedio que recorrer el fichero entero e ir comparando hasta que lo encuentres o se acabe el fichero

 :hola:

Comstock

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Ayuda Con Fseek
« Respuesta #4 en: Martes 25 de Mayo de 2004, 16:59 »
0
Disculpen que me meta a esta conversacion , pero me dieron algunas dudas , disculpen la ignorancia , a que se refieren al hablar de archivos directos . Si esto es solo un archivo bueno quizas pueda ayudar algo quizas no , veo que mauricio2 tiene ciertos problemas con la funcion fseek , en cuanto a esto tratare de ayudar en algo int fseek( FILE *stream, long offset, int whence); esta es el prototipo de la funcion fseek la ideal es la siguiente *stream es el puntero al archivo en este caso "archivo"  , luego viene long offset esto es la posicion donde uno se quiere  ubicar en el archivo eso si respecto al int whence este puede ser SEEK_SET, SEEK_CUR, or SEEK_END el primero nos ubicara en el comienzo del archivo , el segundo nos ubicara en la misma posicion actual , y el tercero nos ubicara en el fin del archivo .
Ej di decimos fseek(file,10,SEEK_END) nos posicionaremos en el final del archivo pero luego el long offset en este caso igual a diez nos llevara diez posiciones mas atras , para el SEEK_CUR y el SEEK_SET se contaran las posiciones hacia adelante y no para atras .
2-. En cuanto a tu segunda pregunta no logre entenderla del todo asi que me la puedes explicar un poco mas quizas te pueda ayudar ..... en todo caso luego de dormir algo tratare de revisarla de nuevo haber si entiendo .....jejejeje luego de una noche entera de programar se pierde algo de la capacidad de comprension .  

          Bueno haber espero sido de alguna ayuda , si no lo fui disculpen por la molestia .

mauricio2

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Ayuda Con Fseek
« Respuesta #5 en: Domingo 6 de Junio de 2004, 20:04 »
0
hola amigos, es muy claro lo de archivos directos mucha gracias, mi duda es la sigueinte, como puedo listar los archios directos he trabajado con FEOF para saber el finde l archivo pero mi profesor no me acepta eso diceq ue meclo archivos secuenciales con directos este es:

do{
  dir_fisica=id*sizeof(carro); // Calculo de la dir. fisica
  fseek(archivo,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo

  fscanf(archivo,"%d",&carro.id);
      
      gotoxy(17,7);
      cprintf(">> CODIGO:            %d",id);
  printf("\n\n\n\n\r<<< Oprima ENTER para el siguiente registro >>>");
  getch();

  id++;

}while(!feof(archivo));

el cuento es como los puedo listar sin FEOF :(.

LO OTRO ES ESTO:

char *valnum()
{
int car=0;
char ch;
char vcar[30];

 do
  {
   
   ch=getch();
   if((ch>=48)&&(ch<=57)||(ch==8)||(ch==13)||(ch==0x53))
   {

      if((ch==13)&&(car>0))break;
         if(ch!=13){
           vcar[car]=ch;
           vcar[car+1]='\0';
           printf("%c",ch);
           car++;
          }
   }   
 }while((car<7));
 return(vcar);
}

LAS FAMOSAS VALIDACIONES :) QUISIERA SABER POR QUE ESTO :
char *valnum()  Y NO ESTO  char valnum()


CON LA FUNCION strcpy PASO LO INGRESADO A LA FUNCION.

CUAL ES ES L ASICCI DEL RE TORNO DECARRO YA QUE SI ME EQUIVOCO NO PUEDO CORREGUIR EJEMPLO:  INGRESO  15 PERO QUIERO BORRAR EL 5 POR 3  PARA QUE EL DATO QUE INTRESO SE 13 ?  EL CUENTO ES QUE SI ME PUEDO REGRESAR PERO NO ME CAMBIA EL NUMERO QUE CORRIJO :(

esperO sus ayudas gracias.

un amigo