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

Ayuda con fscanf

Estas en el tema de Ayuda con fscanf en el foro de C/C++ en Foros del Web. Hola amigos del foro, espero me puedan ayudar..les cuento.. es buscado por internet pero aun no se que significa esta expresion.. ahi les mando el ...
  #1 (permalink)  
Antiguo 11/05/2006, 16:37
 
Fecha de Ingreso: enero-2005
Mensajes: 103
Antigüedad: 19 años, 3 meses
Puntos: 0
Ayuda con fscanf

Hola amigos del foro, espero me puedan ayudar..les cuento.. es buscado por internet pero aun no se que significa esta expresion.. ahi les mando el codigo

fileArchRutErr, es un archivo que tiene este tipo de registros
ejemplo
74;29-12-2005;3536;8.907;0;1.692;10.599;230.391;75;01-12-2005;1533773;202.513;0;38.477;240.990;0

iCatCols = 2;
do
{
iArchRutErr = fscanf(fileArchRutErr,"%[^;];%[^\n]\n",cRutErr,cRutOk);
if ((iArchRutErr == EOF) || (iArchRutErr == 0)) break;
else if (iArchRutErr != iCatCols)
{
printf("Existen [%d] columnas de %d en Registro N°[%ld]\ndel archivo [%s]\n\n",iArchRutErr,iCatCols,lCntRegs++,cArchRutErr) ;
fprintf(stderr,"Existen [%d] columnas de %d en Registro N°[%ld]\ndel archivo [%s]\n\n",iArchRutErr,iCatCols,lCntRegs++,cArchRutErr) ;
iError = 1;
break;
}
while (iArchRutErr > 0);

Mis consultas son:
1.- La expresion "%[^;];%[^\n]\n" que significa??
2.- En la variable iArchRutErr por que me queda un entero???


Saludos
Roberto.
  #2 (permalink)  
Antiguo 11/05/2006, 19:42
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
Lo que hace este formato es una esprecion regular.
es decir lee todos los caracteres o numeros que no sean ';'(Punto y coma),

si la funcion fscanf debuelve -1 o 0 es que ha llegado al final del fichero o hay un error de lectura.

te dejo este link para que estudies esto de los formatos de IO en C:
http://c.conclase.net/librerias/funcion.php?fun=fscanf2

aumentar que si la funcion de lectura fscanf tiene exito devolvera el numero de bytes leidos,
si te da error es por que tal vez el formato del fichero es incorrecto, ya que segun las expreciones Regulares seria;
"%[^;];
Se lee: Capturar todo asta encontrar un ";", el cual tienen que aparecer
%[^\n]\n"
Se lee: Capturar todo asta encontrar un salto de linea, el cual tiene que estar.

en los dos casos el caracter no sera capturado.

74;29-12-2005
3536;8.907
0;1.692
10.599;230.391
75;01-12-2005
1533773;202.513
0;38.477
240.990;0

Saludos.
  #3 (permalink)  
Antiguo 12/05/2006, 07:46
 
Fecha de Ingreso: enero-2005
Mensajes: 103
Antigüedad: 19 años, 3 meses
Puntos: 0
mmm ok.... una consulta.. a que te refieres con "aumentar que si la funcion de lectura fscanf tiene exito devolvera el numero de bytes leidos", en el caso del ejemplo que valor tomaria la variale iArchRutErr, cRutErr y cRutOk???

ojo, esto es una sola linea (o sea un registro)
74;29-12-2005;3536;8.907;0;1.692;10.599;230.391;75;01-12-2005;1533773;202.513;0;38.477;240.990;0

Saludos y gracias por responder
Roberto.
  #4 (permalink)  
Antiguo 12/05/2006, 19:49
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
hhhmmm

"aumentar que si la funcion de lectura fscanf tiene exito devolvera el numero de bytes leidos"

aumentar a mi comentario. jeje.

la funcion fscanf tienen como valor de retorno la cantidad de bytes leidos del fichero, pero si hay un error de casting entonces retornara 0, si hay un error de lectura o final de archivo, retornara la constante EOF,

por tanto la variable iArchRutErr almacena el valor retornado por fscanf, el cual si es correcto sera un numero mayor que 0. y diferente a EOF.

las otras variables tendrian los valores leidos.

segun las expreciones de lectura el fichero no cumple el formato, pero no me creas, ya que yo por lo general manejo ficheros con fostream de C++.
y nunca he tratado con estas expreciones.

el link que menciona anterior mente explica bien esto.

Saludos.
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




La zona horaria es GMT -6. Ahora son las 12:29.