C/Visual C - CFile y Seek

 
Vista:

CFile y Seek

Publicado por Marcelo (9 intervenciones) el 20/03/2006 22:23:57
Alguien me podria dar una idea de como hacer esto? Tengo un archivo TXT con n cantidad de registros, necesito recorrerlo. Como harian para avanzar a traves de los registros, y controlar cuando se llega al final? Estoy queriando hacerlo pero hay algo con lo que no doy. Desde ya muchas gracias.

Marcelo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:CFile y Seek

Publicado por ISAIAS DUQUE GOMEZ (46 intervenciones) el 21/03/2006 03:36:22
recorrerlo en que forma?... exactamente que quieres hacer,

//aqui, lo que hago es buscar un dato en un archivo, no si esto te ayude
struct reg
{
int matricula;
char nombre[15];
}
dato;

FILE *archivo;

void busca()
{
int aux;
clrscr();
archivo=fopen("C:\\agenda.txt","rt");
if(archivo==NULL)
{
printf("no s epuede leer");
}
else
{
printf("introduce matricula a bsccar: ");scanf("%d",&aux);
do
{
fread(&dato,sizeof(dato),1,archivo);
if(aux==dato.matricula)
{
//muestras datos
}
}
while(!feof(archivo));
}
fclose(archivo);
getch();
}

lo que haces es , introduces la matricula, entonces, hjace un recorrido por todo el archivo buscando el registro, lee, compara si lo encuentra lo muestra, espero que me hayas entendido
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:CFile y Seek

Publicado por ISAIAS DUQUE GOMEZ (46 intervenciones) el 21/03/2006 03:43:35
disculpa no habia visto que decias usando FSEEK

agenda.edo=1 lo uso cuando day de altas, para especificar que el dato existe,, para poder hacer la baja logica..

si te interesa, mandame un correo, te puedo ayudar en archivos, ahi contactame, suerte

suponemos que tu estructura es :

struct reg
{
int pos,edo;
char nom[15],email[15],cel[15];
int pos_fis;
}
agenda;

void centra(int fila, char *texto)
{
gotoxy((80-strlen(texto))/2,fila);printf("%s",texto);
}

//CONSULTA

void consulta()
{
int aux,band=0;
clrscr();
FILE *archivo;
archivo=fopen("C:\\AGENDA_T.txt","rt");
if(archivo==NULL)
{
centra(24,"NO SE ENCONTRO EL ARCHIVO DE LECTURA");
}
else
{
centra(4,"CONSULTA TELEFONICA");
gotoxy(3,8);printf("Introduce el numero de registro: ");
scanf("%d",&aux);
agenda.pos_fis=(aux-1)*sizeof(agenda);
fseek(archivo,agenda.pos_fis,SEEK_SET);
//busca en el archivo
fread(&agenda,sizeof(agenda),1,archivo);
if(agenda.edo==1)
{
if(aux==agenda.pos)
{
band=1;
gotoxy(3,11);printf("Registro");
gotoxy(20,11);printf("Nombre");
gotoxy(32,11);printf("Email");
gotoxy(60,11);printf("Celular");
gotoxy(5,13);printf("%d",agenda.pos);
gotoxy(20,13);printf("%s",agenda.nom);
gotoxy(32,13);printf("%s",agenda.email);
gotoxy(60,13);printf("%s",agenda.cel);
}
}
if(!band)
{
centra(24,"NO SE ENCONTRO ESE REGISTRO");
}
}
fclose(archivo);
getch();
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:CFile y Seek

Publicado por Marcelo (9 intervenciones) el 21/03/2006 15:10:35
Gracias Isaias por responder. Te comento, estoy trabajando con eVC 4, y estoy usando la clase CFile. lo que necesitaba ver es como recorrer un archivo de texto, recuperar la info por linea, entonces, avanzar por registro. seria como una base de datos. Desde ya agradezco tu interes.
Marcelo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:CFile y Seek

Publicado por Marcelo (9 intervenciones) el 23/03/2006 13:13:26
bueno, era cuestion de leer mucho para entender. pude resolver el tema, y les transcribo mi codigo, por si le sirve a alguien:

// f es el identificador del archivo abierto
//utilizo una estructura (xp) que contiene appelido[20], nombre[20] y edad[3]

nPos = 0; //variable declarada previamente

while (nPos < f.GetLength())
{

f.Seek(nPos,CFile::begin);
nPos+=sizeof(xp); //voy cargando la nueva posicion del puntero.
f.Read(&xp,sizeof(xp));

if (CString(Apellido)==CString(xp.Apellido) && CString(Nombre)==CString(xp.Nombre))
{
AfxMessageBox(TEXT("El registro ya esta ingresado. Verifique"));
nret = 1;
break;
}

}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar