Ver Mensaje Individual
  #2 (permalink)  
Antiguo 03/04/2015, 18:34
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Posicionarse en el registro inicial después de una búsqueda [C]

A ver si te sirve... Si lo ves complicado te explico lo que tengas duda XD

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <windows.h>
  4.  
  5. typedef struct {
  6.     char marcado;
  7.     char ingles[30];
  8.     char espaniol[30];
  9. } Traductor;
  10.  
  11. int main () {
  12.     FILE* ptrFile;
  13.     ptrFile = fopen ( "archivo.txt", "w+" );
  14.     char buscado[30];
  15.  
  16.     if ( ptrFile == NULL ) {
  17.         printf ( "No ha sido posible abrir archivo.txt" );
  18.         return 1;
  19.     }
  20.  
  21.     Traductor temp;
  22.     Traductor t[5] = {
  23.         { 0, "door", "puerta"},
  24.         { 0, "window", "ventana"},
  25.         { 0, "rueda", "wheel"},
  26.         { 0, "main", "principal"},
  27.         { 0, "out", "salida"}
  28.     };
  29.     //Nos genera un archivo con el contenido de t ya que abrimos con el atributo w+, asi nos centramos
  30.     //solo en su funcionamiento =). Tambien podemos escribir en el...El puntero siempre estará al final tras escribir en el.
  31.     fwrite ( t, sizeof ( Traductor ) * 5, 1, ptrFile );
  32.    
  33.     printf ( " Entre con una palabra en ingles a buscar en el\nregistro(La palabra debe existir en la estructura t, o no XD ).\n" );
  34.     scanf ( "%29[^\n]%*c", buscado );
  35.  
  36.     long nRegistros;
  37.     fseek ( ptrFile, 0, SEEK_END ); // Colocar el cursor al final del fichero
  38.     nRegistros = ftell ( ptrFile ) / sizeof ( Traductor ); // Tamaño en registros
  39.     printf ( "Hay %d registros en el fichero.\n", nRegistros );    
  40.    
  41.     int contador = 0;
  42.     rewind ( ptrFile );    
  43.     while ( fread ( &temp, sizeof ( Traductor ), 1, ptrFile ) ) {
  44.         //Si la palabra existe en el fichero
  45.         if ( strcmp ( temp.ingles, buscado ) == 0 ) {
  46.             strcpy(temp.ingles, "CAMBIADO!INGLES"); //si encontramos la palabra ponemos eso en su lugar XD
  47.            
  48.             printf ( "\nLa palabra esta en el registro numero %d del fichero\n", contador+1 );
  49.            
  50.             fseek(ptrFile, sizeof ( Traductor )*contador, SEEK_SET);
  51.            
  52.             fwrite ( &temp, sizeof ( Traductor ), 1, ptrFile );            
  53.             break;
  54.         }
  55.        
  56.         contador ++;
  57.         //Si la palabra NO existe en el fichero
  58.         if ( contador == nRegistros ){
  59.             printf("\nLa palabra no se encuentra en ninguno de los %d registros del fichero\n", nRegistros);
  60.             break;
  61.         }
  62.     }
  63.  
  64.     fclose ( ptrFile );
  65.     getchar();
  66.     return  0;
  67. }

Suerte XD