Hola rdv316.
Otro ejemplo con una función que te permite buscar una palabra en ambos idiomas:
Código C:
Ver original#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define SPA 'e'
#define ENG 'i'
typedef struct {
char marcado;
char ingles[30];
char espaniol[30];
} Traductor;
// Busca palabras en archivo
long int searchWord( FILE* fp, char* word, char lang );
int main( ) {
FILE *fp;
Traductor tr;
char lang, str[30];
long int position;
if( ( fp
= fopen ( "traductor.dat", "rb+" ) ) == NULL
) { return EXIT_FAILURE;
}
// datos
strcpy( str
, "window" ); // palabra buscada lang = ENG; // idioma (tendrías que filtrar la entrada a: SPA o ENG)
position = searchWord ( fp, str, lang ); // buscar
// posicionarse en palabra buscada y mostrar
if ( position != -1 ) {
fseek ( fp
, position
- sizeof(tr
) , SEEK_SET
); fread ( &tr
, sizeof(tr
), 1, fp
); printf ( "%c %s %s\n\n", tr.
marcado, tr.
espaniol, tr.
ingles ); } else
printf ( "Palabra no encontrada" ); return EXIT_SUCCESS;
}
/* Busca en el archivo una palabra en inglés o español ( preserva posición )
Parámetros: puntero al archivo, palabra a buscar, idioma
Devuelve: la posición en el archivo o -1 si no existe */
long int searchWord( FILE* fp, char* word, char lang ) {
Traductor tr;
long int mark, pos;
// guardar posición actual
// posicionar al inicio
// buscar
if (lang == 'e' ) {
while ( fread ( &tr
, sizeof ( tr
), 1, fp
) && strcmp ( tr.
espaniol, word
) ); pos
= ( strcmp ( tr.
espaniol, word
) == 0 ) ? ftell ( fp
) : -1; } else {
while ( fread ( &tr
, sizeof ( tr
), 1, fp
) && strcmp ( tr.
ingles, word
) ); pos
= ( strcmp ( tr.
ingles, word
) == 0 ) ? ftell ( fp
) : -1; }
// restaurar posición previa
fseek ( fp
, mark
, SEEK_SET
); // resultado
return pos;
}
Saludos.