Estructura de Datos y Algoritmos Año 2016 Ejemplo Rutina Lectura - Operaciones El código que se presenta a continuación es una guı́a para programar una rutina que permita leer datos desde un archivo de texto. void L e c t u r a A r c h i v o O p e r a c i o n e s ( ) { FILE ∗ f p ; i f ( ( f p = f o p e n ( ‘ ‘ O p e r a c i o n e s . t x t ’ ’ , ‘ ‘ r ’ ’ ) )==NULL) p r i n t f ( ‘ ‘ERROR : no s e pudo a b r i r e l a r c h i v o \n ’ ’ ) ; else { while ( ! ( f e o f ( fp ) ) ) { f s c a n f ( fp , ‘ ‘ % d ’ ’ , &Cod Op ) ; i f ( Cod Op ==1 ) | | ( Cod Op ==2 ) { / ∗ s i e s un i n g r e s o o una e l i m i n a c i ó n l e e r t o d a l a i n f o r m a c i ó n de un a r t ı́ c u l o ∗ / f g e t s ( CodArt , 8 , f p ) ; ( ∗ ) f g e t s ( Art , 5 2 , f p ) ; f g e t s ( Marca , 6 2 , f p ) ; f s c a n f ( fp , ‘ ‘ % f ’ ’ , &V a l o r ) ; f s c a n f ( fp , ‘ ‘ % i ’ ’ , &C a n t ) ; f g e t s ( Club , 7 2 , f p ) ; / ∗ Donde CodArt , A r t , Marca , V a l o r , Cant , Club c o r r e s p o n d e n a l a i n f o r m a c i ó n g u a r d a d a en e l a r c h i v o O p e r a c i o n e s . t x t en l a p o s i c i ó n c o r r i e n t e ∗ / . / ∗ I n v o c a r l o s p r o c e d i m i e n t o s que c o r r e s p o n d a n ∗ / . } else{ f g e t s ( CodArt , 8 , f p ) ; / ∗ s i e s una c o n s u l t a l e e r s ó l o e l c ó d i g o de p r o d u c t o ∗ / . / ∗ I n v o c a r l o s p r o c e d i m i e n t o s que c o r r e s p o n d a n ∗ / . } } } p r i n t f ( ‘ ‘ La s e c u e n c i a de o p e r a c i o n e s ha f i n a l i z a d o \n ’ ’ ) ; f c l o s e ( fp ) ; } (*) La función fgets lee sólo strings desde un archivo, por lo tanto si se usa para leer números éstos son considerados strings y no valores numéricos, si se los quiere operar como números hay que transformarlos en tales o leerlos con otra función (por ejemplo fscanf ). El fgets lee como último caracter el “\n”, por lo tanto para que NO dé error al comparar lo que se leyó con lo que se guarda el “\n”, éste deberá ser reemplazado por “\0”. char *fgets(char *s, int n, FILE *stream); donde n es la cantidad de caracteres que se quieren leer, s la variable donde se lee y file el archivo desde donde se lee. int fscanf(FILE *stream, const char *format[, address, ...]) donde format es el string de formato de lo que se va a leer (entero, flotante, string, etc.), address la variable donde se lee y file el archivo desde donde se lee. Departamento de Informática - U.N.S.L. 1