CAPÍTULO 5 MANEJO DE ARCHIVOS

Documentos relacionados
Tema 13: Manejo de archivos en lenguaje C

Tema 3: Entrada/Salida de Ficheros

Entrada y Salida de Archivos

Informática PRÀCTICA 9 Curs Práctica Nº 9: Rango y precisión de representación de números en el ordenador.

Tema 6. Gestión de ficheros en C. Programación en Lenguajes Estructurados

Laboratorio de Arquitectura de Redes. Entrada y salida estándar

LENGUAJE. Tema 8 Ficheros

Instituto Técnico Jesús Obrero 4to año Programación Profesor: Luis Vallenilla

Archivos en lenguaje C

Operaciones de E/S en ANSI C

Ficheros conceptos. Manejo de ficheros en C. Apertura del fichero Función fopen: nombre del fichero. Apertura del fichero Función fopen

Entrada/Salida. Entrada/Salida. Flujos de texto. Flujos de datos. Flujos binarios. Flujos estándares ANSI

Tema 5. Entrada y Salida

Informática Ingeniería en Electrónica y Automática Industrial

7. Manejo de Archivos en C.

Lenguaje de Programación: C++ ARCHIVOS I/O

Introducción a la Programación en C Gestión de Ficheros

Por ejemplo, para declarar un arreglo de enteros llamado a con diez elementos se hace de la siguiente forma:

Tema 3: Ficheros. Enrique Soriano. 3 de marzo de Laboratorio de Sistemas, Grupo de Sistemas y Comunicaciones, URJC

CAPITULO 4: ENTRADA Y SALIDA DE DATOS.

UNAN LEÓN Departamento de Computación. Asignatura: ALGORITMO Y ESTRUCTURA DE DATOS MANEJO DE ARCHIVOS (FICHEROS) EN C

Archivos & Cadenas CURSO DE PROGRAMACIÓN EN C. Centro de Investigación y de Estudios Avanzados del IPN. CINVESTAV - Tamaulipas.

Fundamentos de Informática 7. Introducción al manejo de archivos

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

INICIACIÓN A LA PROGRAMACIÓN EN C

Objetivos. El alumno conocerá y aplicará el concepto de archivo para el almacenamiento y recuperación de datos persistentes.

Tipos de Datos en C. Palabras reservadas en C

TEMA 7: Ficheros. TEMA 7: Ficheros Concepto de fichero

Repaso 03: Manejo de Archivos en C

Programación. Test Autoevaluación Tema 3

Tipos de Datos. Tipos de Datos Simples Estándar

En este artículo vamos a conocer los tipos de datos que podemos manejar programando en C.

TEMA 4. ELEMENTOS BÁSICOS DE PROGRAMACIÓN

Programación I Ficheros de texto

Programación Estructurada

Plataformas de Tiempo Real

Introducción a Sistemas Operativos: Ficheros

Programación I Ficheros de texto

Entrada/Salida de Archivos

TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL.

Ampliación de Sistemas Operativos Trabajo voluntario Tema 1 Francisco Charte Ojeda ENTRADA/SALIDA EN C++

Estructura de Datos: Archivos

Lenguaje C Entrada y Salida de Datos. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Capítulo 9. Lectura y escritura de ficheros

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Manipulación de archivos estructurados

Archivos. qué es un archivo?

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

06 Introducción al procesamiento de imágenes BMP con ANSI C

Entrada y salida de datos en C y C++

Una expresión es una combinación de uno o más operandos y operadores para obtener un resultado.

FILE *nombre_puntero_fichero; fopen(char_nombre_archivo,char_modo_apertura ); MODOS DE APERTURA. Abre un archivo de texto para lectura.

Lenguajes de programación

Guía práctica de estudio 12: Lectura y escritura de datos

Tipos de datos y Operadores Básicos

Laboratorio de Arquitectura de Redes. Entrada y salida por archivos en lenguaje C

PROGRAMACION ESTRUCTURADA: Tema 1. El lenguaje de programación C

Entrada/Salida. Entrada y Salida Estándar

Ficheros y Directorios

Programación En Lenguaje C

Práctica 2 - Manejo de estructuras de datos y punteros

Tema 10: Estructuras de control de entrada y salida

Flujos (streams) Programación. Licenciatura Lingüística y Nuevas Tecnologias Nadjet Bouayad-Agha

ARCHIVOS. 1. Introducción. 2. Definición de archivo. 3. Archivos de acceso secuencial. 4. Gestión de un archivo secuencial de estructuras

INTRODUCCIÓN AL LENGUAJE C

Tema 5 Archivos o Ficheros

Introducción a la Programación

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

Especificación IEEE-754, para representar valores decimales en punto flotante de simple precisión.

TEMA 9. Agenda. Ficheros

Tipos de variables. Lenguaje C. Departamento de Electrónica. Tipos de datos, variables y constantes. Fundación San Valero

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Examen Teórico (1/3 de la nota final)

Unidad 7: Procesamiento de archivos en el lenguaje C

Sistemas Operativos: Programación de Sistemas. Curso Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J.

INT 21H Función 02H Salida de Carácter LLAMADA: AH = 02H DL = Código ASCII a enviar al dispositivo de salida. DEVUELVE: NADA.

ALGORITMOS Y PROGRAMACIÓN I Unidad 3

Sistemas Operativos. Iván Bernal, Ph.D. 4. Escuela Politécnica Nacional I.

Tema 07: Tipos de datos en C & entrada y salida estándar

Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS

Tema 3: Ficheros en C++ Índice. Notas. Programación 2. Curso Notas

Formatos para prácticas de laboratorio

PUNTEROS DOBLES EN C XIII CUIEET MASPALOMAS. Sidonio Pérez Matilla EUITI de Eibar UPV

Entrada y Salida de Datos. Lectura de archivos.

FACULTAD DE INFORMATICA SISTEMAS OPERATIVOS 3º de Informática.

Informática I (2014-2) Taller Lenguaje C Prof. Sebastián Isaza Departamento de Ingeniería Electrónica Facultad de Ingeniería Universidad de Antioquia

Fundamentos de Programación

Realizar el ejercicio anterior utilizando Punteros

EJERCICIOS. Algo de C CADENAS

Formato para prácticas de laboratorio

OPERACIONES SOBRE LENGUAJES REGULARES LA UNIÓN DE LENGUAJES REGULARES

PROGRAMACIÓN ORIENTADA A OBJETOS

funciones printf scanf

ESTRUCTURAS. Struct Identificador_ tipo_estructura { Tipo miembro_1; /*Declaración de los miembros*/

Actividad Algoritmos, Estructura y Programación I. FOR, DO-WHILE

Entrada/Salida (Standard) Clase 6 Introducción a la Computación Patricia Borensztejn

CURSO DE LENGUAJE C. 4.1 Conceptos básicos de funciones 4.2 Funciones que regresan valores no enteros 4.3 Variables externas 4.4 Reglas de alcance

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Sea el siguiente programa de nombre "c0p1" para copiar archivos (por simplicidad se ha eliminado todo control de errores): Se pide:

El operador contenido ( ) permite acceder al contenido de

Transcripción:

CAPÍTULO 5 MANEJO DE ARCHIVOS Actualmente existen dos formas para manejar los archivos en lenguaje C, uno llamado de primer nivel (también llamado secuencial) y otro llamado de segundo nivel (también llamado tipo registro o de alto nivel). En el estándar UNIX tradicional, se diseño un sistema de archivos con buffer para operar sobre archivos textos y un sistema de archivos sin buffer para operar sobre archivos binarios. Finalmente el comité ANSI decidió que no había razón para que existiesen dos sistemas separados para el manejo de archivos por lo que el sistema de archivos sin buffer no forma parte del estándar propuesto. En la actualidad un gran número de compiladores soporta la operaciones de bajo nivel. En el nivel más bajo se considera el archivo como un conjunto de bytes continuos, esto sin tener en cuenta como se han grabado, un usuario puede leer la cantidad de bytes que desee no importando la posición en la cual se encuentren éstos. En el modo de más alto nivel se puede acceder a uno o varios registros, es decir, lo que se lee cada vez es una agrupación lógica. Las operaciones de primer nivel, como se las llama a las de nivel más bajo, son las más potentes. Se dice que estas operaciones son las primitivas del sistema: son las operaciones básicas. Las de segundo nivel se construyen a partir de éstas. 5.1. INSTRUCCIONES A BAJO NIVEL La siguiente tabla muestra las instrucciones de primer nivel para manejo de archivos. Todas estas funciones se encuentran definidas en el archivo io.h. Función read() write() open() close() lseek() unlink() Lee un buffer de datos Escribe un buffer de datos Abre un archivo en disco Cierra un archivo Busca un byte especificado Elimina un archivo del directorio Tabla 5.1. Funciones para manejo de archivo en bajo nivel. Apertura de archivo int open(char *nomfich,int modo) /* devuelve un numero de archivo */ Si la operación ha resultado sin fallas, open devuelve el número que ha adjudicado al archivo que acaba de abrir. Devuelve un -1 en el caso de que se produzca un error. Para esta función el modo puede tener los siguientes valores:

44 Preparado por Juan Ignacio Huircán Modo Efecto 0x01 Sólo Lectura O_RDONLY 0x02 Sólo Escritura O_WRONLY 0x04 Lectura/Escritura O_RDWR Tabla 5.2. Modos de acceso de archivo. Sin embargo, si el archivo no existe, se producirá un error. Para especificar el modo se debe recurrir entonces a otras configuraciones de bits. Definidas en fcntl.h, los principales son los siguientes: Modo O_APPEND O_CREAT O_TRUNC O_TEXT O_BINARY (0x0800) Escritura al final del archivo (0x0100) Creación si el fichero no existe (0x0200) Vacía un archivo que ya existe (0x4000) Considera loa archivo como texto. (0x8000) Considera los archivos como binarios, no existen caracteres especiales. Tabla 5.3. Modos de apertura de archivo. Cuando se vaya a crear un archivo debe especificarse un tercer argumento. Este tercer argumento indica el modo de protección, los cuales están definidos en sys\stat.h Modo de protección S_IWRITE S_IREAD S_IREAD S_IWRITE Sin protección contra escritura. Sin protección contra lectura. Lectura y escritura autorizada. Tabla 5.4. Modos de protección. Ej 5.1. Abriendo un archivo #include <io.h> int f, modo=0x01; if( (f= open("nombre1", modo))==-1) printf("no se puede abrir! "); Para este ejemplo el archivo NOMBRE1 debe existir. Si NO existe la función open devuelve -1.

Apuntes de Herramientas de Programación 45 Ej 5.2. Abriendo un archivo que no existe. #include <io.h> #include <fcntl.h> int f, modo=0x04; /* Se puede usar O_RDWR en vez de modo */ if( (f= open("nombre1", modo O_CREAT))==-1) printf("no se puede abrir! "); else printf(" Archivo Abierto!"); Para este ejemplo si el archivo NO existe lo crea. El acceso será de lectura-escritura. Todo lo que escriba en el archivo borrará la información existente. Si el modo es O_RDONLY, sólo se podrá leer. Para proteger los archivos, se pueden utilizar los modos de protección indicados, estos deben pasarse a la función open como un tercer argumento. Lectura de archivos int read(int fn, char *buf,int nbytes); Lee el número de caracteres especificados por nbytes, contados a partir de la posición actual en el archivo identificado por el número que contiene fn. Los bytes leídos se almacenan en la zona de memoria apuntada por buf. La función devuelve el número de caracteres que realmente se hayan leído. Si se produce un error devuelve -1. Si el número de caracteres leídos es inferior al número de caracteres pedidos significa que se ha llegado al final del archivo. Cada vez que se efectúa la operación read, se incrementa en nbytes el puntero de posición actual en el archivo. Escritura de archivos int write(int fn,char *buf,int nbytes); Escribe el número de caracteres especificados por nbytes, los que se deben encontrar en la zona apuntada por buf, a partir del puntero de la posición actual del archivo. Esta función devuelve el número de caracteres realmente escritos. En el caso de que se produzca un error devuelve un -1. Posicionamiento de un archivo long lseek(int fn, long desp1,int modo);

46 Preparado por Juan Ignacio Huircán Devuelve el nuevo valor del puntero de posición actual en un archivo, o sea el desplazamiento en número de bytes (en formato long) relativo al principio del archivo. Si ocurre un error retorna -1L (-1 en formato long). Cambia el valor del puntero de posicionamiento en el archivo. El desplazamiento es siempre relativo a una posición que depende del modo. Modo 0 Principio del archivo 1 Posición actual en el archivo 2 Al final del archivo Tabla 5.4. Modos de posicionamiento Se recalca que el desplazamiento es un valor long, es decir: lseek(5, 180L, 0); Se está accesando el archivo 5, a 180 caracteres respecto del principio. La definición de esta función se encuentra el prototipo io.h. Cierre de archivos int close(int fn); Siempre deben cerrarse aunque el sistema los cierra al final de la ejecución del programa. Ej 5.3. Ejemplos de apertura de archivos Un archivo se puede crear con las ordenes open, creat o creatnew. Cuando se trabaja en DOS para la creación de un archivo se debe especificar un tercer argumento. open("nombre", O_WRONLY O_CREAT O_TRUNC O_BINARY,S_IREAD S_IWRITE); Crea un archivo con nombre "NOMBRE", en modo binario. Si el archivo ya existiera, será borrado el antiguo. No tiene ninguna protección (se podrá borrar sin ningún problema). open("nombre", O_WRONLY O_CREAT O_TRUNC O_BINARY,S_IWRITE); Igual al caso anterior, pero en este caso el archivo está protegido contra escritura. open("nombre", O_WRONLY O_APPEND O_TEXT,S_IREAD,S_IWRITE); Se abrirá un archivo "NOMBRE" tipo texto, y el puntero se posicionará al final del archivo, escribirá a continuación. open("nombre", O_CREAT O_RDONLY O_TEXT);

Apuntes de Herramientas de Programación 47 Se abre el archivo "NOMBRE" tipo texto si no existe lo crea, en caso contrario lo abre pero no se modifica el escribir sobre él. 5.2. INSTRUCCIONES DE SEGUNDO NIVEL (ALTO NIVEL) En las instrucciones de segundo nivel los archivos ya no se designan por un número, sino, por un puntero a una estructura compleja llamada FILE cuya descripción se haya en el archivo stdio.h. Apertura de archivo FILE *fopen(char *nombrefich, char *modo); fopen devuelve un puntero a una estructura FILE. En el caso de existir un error devuelve NULL. El modo se especifica mediante una cadena de caracteres. Modo "r" "w" "a" "r+" Para lectura solamente. Para escritura solamente (si el archivo ya existiera lo borra). Añadir al final de un archivo que ya existe. Actualizar uno que ya existe. Ej 5.4. Para abrir un archivo binario o texto Tabla 5.5. Modos de apertura en alto nivel. FILE * fp; fp=fopen("nombre", "wb");... FILE * fp; fp=fopen("nombre", "wt");... Lectura de archivo int fread(char *p,int s,int n, FILE *fp); Lee n registros de tamaño s del archivo indicado por fp y los almacena en la zona de memoria indicada por p. fread devuelve el número de registros leidos, si este número es menor que el pedido, se ha llegado al final del archivo. Para mayor precisión se usa el feof.

48 Preparado por Juan Ignacio Huircán Escritura de archivo fwrite(char *p,int s,int n, FILE *fp); Escribe n registros de tamaño s del archivo indicado por fp. Los registros se encuentran almacenados en la zona de memoria indicada por p. La función devuelve el número de registros realmente escritos. Cerrar archivo int fclose(file *fp); Posicionamiento en un archivo fseek(file *fp, long pos, int modo); /* Análoga a lseek */ Condición de fin de archivo int feof(file *fp); Posicionamiento al comienzo de un archivo rewind(file *fp); Ej 5.5. Creación de un archivo de registros. #include <string.h> FILE *fp; struct char nombre[10]; int edad;persona; char buf[65]; fp=fopen("personas", "wb"); printf("\nnombre :?"); gets(&buf[0]) wihile(buf[0]) strcpy(persona.nombre,&buf[0]); printf("\nedad :?"); gets(&buf[0]); sscanf(&buf[0],"%d",&persona.edad); fwrite((char *)&persona,12,1,fp); printf("\nnombre :?"); gets(&buf[0]) fclose(fp);

Apuntes de Herramientas de Programación 49 Ej 5.6. Creación de un archivo ASCII. #include <string.h> FILE *fp; struct char nombre[10]; int edad;persona; char buf[65]; fp=fopen("personas", "wt"); printf("\nnombre :?"); gets(&buf[0]) wihile(buf[0]) strcpy(persona.nombre,&buf[0]); printf("\nedad :?"); gets(&buf[0]); sscanf(&buf[0],"%d",&persona.edad); fprintf(fp,"%12s %d\n",persona.nombre,persona.edad); printf("\nnombre :?"); gets(&buf[0]) fclose(fp); 5.3. FORMAS ADICIONALES DE ENTRADA/SALIDA Una de la forma muy común de ingreso de datos es la que se realiza por teclado, a continuación se dan algunos ejemplos, ya que indirectamente ha sido referenciadas. Funciones para lectura de caracteres desde teclado y funciones a la salida estándar Estas funciones se encuentran definidas en conio.h y stdio.h. Funciones int getch(); int getche(); cputs(char *str); char *cgets(char *str); Lee caracter desde teclado Lee caracter desde teclado e imprime en pantalla Imprime una cadena de caractéres en pantalla Lee un string. str[0] especifica el largo, str[1] el tamaño del string leido y apartir de str[2] se encuentra la cadena leida. Retorna &str[2]. Tabla 5.6. Funciones para lectura de caracteres.

50 Preparado por Juan Ignacio Huircán Ej 5.7. Utilizando funciones para imprimir caracteres en pantalla. #include <conio.h> #include <string.h> char s[30]="xxx"; int i; clrscr(); puts(&s[0]) getch(); A continuación se indican algunas funciones definidas en stdio.h Funciones char *gets(char *s); Lee un string desde el stdin hasta que se ingresa un caracter nueva línea (\n) retorna un puntero a s. fgets(char *s,int n, FILE * fp); Realiza la misma operación pero desde un archivo. si fue bien realizada restorna un puntero a s, sino un NULL. fputs(char *s,int n,file *fp); Escribe una cadena en un archivo. Tabla 5.7. Funciones defindas en stdio.h. Funciones de E/S con formato int printf(const char *format...); /* Imprime en pantalla con formato */ int scanf(const char *format...); /* Lee de teclado con formato */ int fprintf(file *fpconst char *format...); /* Imprime en un archivo */ int fscanf(file *fp,const char *format...); /* Lee desde un archivo */ Para las funciones cada format se especifica con % seguido de un caracter que indica el tipo de conversión (type), todo entre comillas ("). También se pueden intercalar entre ambos otros especificadores. % [flag][width][.prec][f N h l] type

Apuntes de Herramientas de Programación 51 type d i o u x f e c s Formato de salida Entero decimal con signo Entero decimal con signo entreo octal sin signo decimal sin signo Hexadecimal sin signo Punto flotante[-]dddd.ddd Punto flotante [-]d.ddde [+/-] ddd Caracter Cadena de caracteres Tabla 5.8. Especificación de tipo para el formato. [flag] [width] nada Justificación a la derecha n Relleno con n Caracteres en blanco - Justificación a la izquierda 0n Relleno con 0 Tabla 5.9. de [flag] y [width]. [.prec] nada Precisión por defecto.0 Precisión por defecto para d,i,o,u,x,e, E,f.n n decimales Tabla 5.10. Precisión. Ej 5.8. Imprimiendo datos en pantalla con formato #include <conio.h> int entero =123; char caracter=37; float real=3.14159; char cadena[20]="hola FLACO"; clrscr(); printf("%d\n",caracter); printf("%c\n",caracter); printf("%d\n",entero);

52 Preparado por Juan Ignacio Huircán printf("%8d\n",entero); printf("%x\n",entero); printf("%f\n",real); printf("%4.3f\n",real); printf("%-8.4f\n",real); printf("%e\n",real); printf("%s\n",cadena); getch(); Ej 5.9. Leyendo datos con formato desde teclado #include <conio.h> int entero =123; float real=3.14159; clrscr(); printf("entero :?"); scanf("%d",&entero); printf("real:?"); scanf("%f",&real); printf("%d %f\n",entero,real); printf("pueden ser ingresados separdos por un espacio\n"); scanf("%d %f",&entero, &real); printf("%d %f\n",entero, real); getch(); Ej 5.10. Escritura y lectura desde un archivo #include <conio.h> int entero=34; float real=0.5; FILE *fp; fp=fopen("texto.txt","wt"); if(fp!=null) fprintf(fp,"%d %f\n",45,34.56); fprintf(fp,"%d %f\n",40,3304.56); fprintf(fp,"%d %f\n",entero,real); fclose(fp); printf("no SE PUEDE ABRIR!\n"); getch(); #include <conio.h> int entero; float real; FILE *fp; fp=fopen("texto.txt","rt"); if(fp!=null) fscanf(fp,"%d %f\n",&entero,&real); printf("%d %f\n",entero,real); fscanf(fp,"%d %f\n",&entero,&real); printf(fp,"%d %f\n",entero,real); fscanf(fp,"%d %f\n",&entero,&real); printf(fp,"%d %f\n",entero,real); fclose(fp); printf("no SE PUEDE ABRIR!\n"); getch();

Apuntes de Herramientas de Programación 53