28
ENTRADA Y SALIDA POR ENTRADA Y SALIDA POR ARCHIVOS Sugerencias y herramientas para crear para crear y presentar diapositivas en formato panorámico

PUNTEROS (APUNTADORES) EN C++

  • Upload
    diedex

  • View
    4.837

  • Download
    3

Embed Size (px)

Citation preview

Page 1: PUNTEROS (APUNTADORES) EN C++

ENTRADA Y SALIDA POR ENTRADA Y SALIDA POR ARCHIVOS Sugerencias y herramientas para crear para crear y presentar diapositivas en formato panorámico

Page 2: PUNTEROS (APUNTADORES) EN C++

Contenido Contenido FlujosPuntero FILEApertura de un archivoCreación de archivo secuencialArchivos binarios en CF i l iFunciones para acceso aleatorioArgumentos de main ()Ejercicios Ejercicios

Page 3: PUNTEROS (APUNTADORES) EN C++

Introducción Introducción Hasta el momento se han realizado las operaciones básicaspde entrada y salida. La lectura de datos se realiza desdeun teclado, y la escritura de datos se realiza en el monitor yen la impresora de su sistemaen la impresora de su sistemaEn C existe la biblioteca stdio.h estandarizada por ANSI;esta biblioteca proporciona tipos de datos, macros yesta biblioteca proporciona tipos de datos, macros yfunciones para acceder a los archivos. El manejo dearchivos en C se hace mediante el concepto de flujo(streams) o canal, o también denominado secuencia

Page 4: PUNTEROS (APUNTADORES) EN C++

Flujo Flujo Un flujo (stream) es una abstracción que se refiere a unj ( ) qflujo o corriente de datos que fluyen entre un origen yun destino. Entre el origen y el destino debe existir unaconexión o canal por la que circulen los datos. Laapertura de un archivo supone establecer la conexióndel programa con el dispositivo que contiene al archivodel programa con el dispositivo que contiene al archivo,por el canal que comunica el archivo con el programavan a fluir las secuencias de datos

Page 5: PUNTEROS (APUNTADORES) EN C++

Puntero FILEPuntero FILEEn el programa el archivo tiene un nombre interno quees un puntero a una estructura predefinida (puntero aarchivo). Esta estructura contiene información sobre elarchivo tal como la dirección del buffer que utiliza elarchivo, tal como la dirección del buffer que utiliza, elmodo de apertura del archivo, el ultimo carácter leídodel buffer y otros detalles que generalmente el usuario

i b El id ifi d d l i d lno necesita saber. El identificador del tipo de lasestructuras es FILE y esta declarada en el archivo decabecera stdio.h;;

Page 6: PUNTEROS (APUNTADORES) EN C++

Apertura de un archivoApertura de un archivoPara procesar un archivo en C la primera operación quehay que realizar es abrir el archivo. El programa accede alos archivos a través de un puntero a la estructura FILE, lafunción de apertura devuelve dicho puntero. La funciónp ppara abrir un archivo es fopen() y el formato de llamadaes:

Fopen(nombre archivo modo);Fopen(nombre_archivo, modo);Nombre = cadena Contiene el identificador externo del archivoModo = cadena Contiene el modo en que se va a tratar el archivo

Page 7: PUNTEROS (APUNTADORES) EN C++

Ejemplo 13 3 Ejemplo 13.3 Se desea abrir un archivo de nombre LICENCIA.EST para obtener ciertos datos#i l d < di h>#include <stdio.h>#include <stdlib.h>FILE *pf;Ch [] “C \LICENCIA EST”Char nm[]=“C:\LICENCIA.EST”;Pf=fopen(nm, “r”);If (pf==NULL){{Puts(“Error al abrir el archivo.”);Exit (1);}}

Page 8: PUNTEROS (APUNTADORES) EN C++

Modos de apertura de un archivoModos de apertura de un archivoAl abrir el archivo fopen() se espera como segundo argumento el modo detratar el archivo. Fundamentalmente se establece si el archivo es delectura, escritura o añadido; y si es de texto o binario

Page 9: PUNTEROS (APUNTADORES) EN C++

ContCont…En estos modos no se ha establecido el tipo de archivo, dep ,texto o binario. Se utiliza la letra t para modo de texto, la bpara modo binario como ultimo carácter de la cadena modo.Por consiguiente los modos de abrir un archivo de texto:

“rt”, “wt”, “at”, “r+t”, “w+t”, “a+t”Y los modos de abrir un archivo binario:“rb” “wb” “ab” “r+b” “w+b” “a+b”rb , wb , ab , r+b , w+b , a+b

Page 10: PUNTEROS (APUNTADORES) EN C++

Ejemplo 13 5 Ejemplo 13.5 Se dispone de un archivo de #include <stdio.h>ptexto, se requiere leerlopara realizar un cierto

#include <stdlib.h>main () {FILE *pf1 , *pf2 ;

proceso y escribir datosresultantes en el archivobinario

char org[]="C:\LICENCIA.EST";char dst[]="C:\RESUMEN.REC" ;pf1 = fopen(org, "rt");

binario pf2 = fopen(dst,"wb");if (pf1 == NULL || pf2 == NULL)puts ( "Error al abrir los archivos. ");

(" ")system("pause");exit (1) ; }

Page 11: PUNTEROS (APUNTADORES) EN C++

NULL y EOFNULL y EOFLas funciones de biblioteca que devuelven un punteroq p(strcpy(), fopen()…) especifican que si no puedenrealizar la operación devuelven NULLLas funciones de librería de E/S de archivos,generalmente empiezan por f de file, tienen

ifi d d i d l f iespecificado que son de tipo entero de tal forma que sila operación falla devuelven EOF, también devuelvenEOF para indicar que se ha leído el fin de archivoEOF para indicar que se ha leído el fin de archivo

Page 12: PUNTEROS (APUNTADORES) EN C++

Cierre de archivos Cierre de archivos Los archivos en C trabajan con una memoria intermedia, soncon buffer. La entrada y salida de datos se almacena eneste buffer, volcándose cuando esta lleno. Siempre que setermina de procesar un archivo y siempre que se termine lap y p qejecución del programa los archivos abiertos hay quecerrarlos para que entre otras acciones se vuelque el buffer.La función fclose(puntero file) cierra el archivo asociado alLa función fclose(puntero_file) cierra el archivo asociado alpuntero_file.int fclose(FILE* pf);( p );

Page 13: PUNTEROS (APUNTADORES) EN C++

Ejemplo 13 7Ejemplo 13.7Abrir dos archivos de texto, después se cierra cada uno de ellos

#include <stdio.h>

FILE *pf1, *pf2 ;

pf1 = fopen(“C:\DATOS.DAT", “a+");

pf2 = fopen("C:\TEMPS.RET",“a+");

fclose(pf1);

fclose(pf2);

Page 14: PUNTEROS (APUNTADORES) EN C++

Creación de un archivo secuencialCreación de un archivo secuencialUna vez abierto un archivo para escribir datos hay quep y qgrabar los datos en el archivo. Las funciones deentrada y de salida de archivos tienen mucho parecido

fcon las funciones utilizadas para entrada y salida paralos flujos stdin (teclado) y stdout (pantalla). Todas tienenuna versión para archivos que empiezan por la letra funa versión para archivos que empiezan por la letra f,así se tiene fprint(), fscanf(), fputs(), fgets(); la mayoríade funciones especificas empiezan por fp p p

Page 15: PUNTEROS (APUNTADORES) EN C++

Funciones putc() y fptuc()Funciones putc() y fptuc()Escriben un carácter en el archivo asociado al puntero aFILE. El formato de llamada:putc(c, puntero_archivo);f ( hi )fputc(c, puntero_archivo);Siendo c el carácter a escribirEj l 13 1Ejemplo 13.1Se desea crear un archivo salida.pta con los caracteresintroducidos por el tecladointroducidos por el teclado

Page 16: PUNTEROS (APUNTADORES) EN C++

Funciones getc() y fgetc()Funciones getc() y fgetc()Estas funciones leen un carácter del archivo asociado al puntero a FILE D l l á l íd EOF i fi d hi ( i h FILE. Devuelven el carácter leído o EOF si es fin de archivo (o si ha habido un error). El formato de llamada es:getc (puntero_archivo);fgetc (puntero archivo);Ejemplo 13.2El hi lid t d l bl t i d l El archivo salida.pta creado en el problema anterior se desea leer para mostrarlo por pantalla y contar las líneas que tiene

Page 17: PUNTEROS (APUNTADORES) EN C++

Funciones fputs() y fguets()Funciones fputs() y fguets()Estas funciones escriben/leen una cadena de caracteresEstas funciones escriben/leen una cadena de caracteresen el archivo asociado. La función fputs() escribe unacadena de caracteres; el formato de llamada es:;

fputs(cadena, puntero_archivo);

La función fguets() lee una cadena de caracteres de un La función fguets() lee una cadena de caracteres de un archivo. El formato de llamada es:

fguets (cadena n puntero archivo);fguets (cadena, n, puntero_archivo);

Page 18: PUNTEROS (APUNTADORES) EN C++

Ejercicio 13 1 1Ejercicio 13.1.1

El archivo cartas.dat contiene un texto al que seEl archivo cartas.dat contiene un texto al que sedesea añadir nuevas líneas, de longitud mínima 30caracteres desde un archivo primero datcaracteres, desde un archivo primero.dat

Page 19: PUNTEROS (APUNTADORES) EN C++

Funciones fprintf() y fscanf() ejm13 4 1Funciones fprintf() y fscanf(), ejm13.4.1

Las funciones printf() y scanf() permiten escribir oLas funciones printf() y scanf() permiten escribir oleer variables cualquier tipo de dato estándar, loscódigos de formato (%d %f ) indican a C lacódigos de formato (%d, %f…) indican a C latransformación que debe realizar con la secuenciade caracteres La misma funcionalidad tienede caracteres. La misma funcionalidad tienefprintf() y fscanf() con los flujos (archivos asociados)a que se aplicana que se aplican

Page 20: PUNTEROS (APUNTADORES) EN C++

Función feof()Función feof()Diversas funciones de lectura de caracteres devuelvenEOF cuando leen el carácter de fin de archivo. Lafunción feof() realiza el cometido anterior, devuelve un

0valor distinto de 0 (true) cuando se lee el carácter defin de archivo, en caso contrario devuelve 0 (false)

Whil (!f f( f))While(!feof(pf)){….}}

Page 21: PUNTEROS (APUNTADORES) EN C++

Función rewind()Función rewind()

Una vez que se alcanza el fin de un archivo, nuevasUna vez que se alcanza el fin de un archivo, nuevasllamadas a feof() siguen devolviendo un valordistinto de cero Con la función rewind() se sitúa eldistinto de cero. Con la función rewind() se sitúa elpuntero del archivo al inicio de este. El formato dellamada es:llamada es:

Rewind(puntero_archivo)Ej l 13 10Ejemplo 13.10

Page 22: PUNTEROS (APUNTADORES) EN C++

Archivos binarios en CArchivos binarios en C

Para abrir un archivo en modo binario hay quePara abrir un archivo en modo binario hay queespecificar la opción b en el modo. Los archivosbinarios son secuencias de 0 s y 1 s los modos parabinarios son secuencias de 0,s y 1,s. los modos paraabrir un archivo binario son los mismos que paraabrir un archivo de texto sustituyendo t por b;abrir un archivo de texto, sustituyendo t por b;“rb”, “wb”, “ab”, “r+b”, “w+b”, “a+b”

Page 23: PUNTEROS (APUNTADORES) EN C++

Función de salida fwrite()Función de salida fwrite()

La función fwrite() escribe un buffer de cualquier La función fwrite() escribe un buffer de cualquier tipo de dato en un archivo binario. El formato de llamada es:llamada es:fwrite(direccion_buffer, tamaño, num_elementos,

t hi )puntero_archivo);Ejemplo 13.12

Page 24: PUNTEROS (APUNTADORES) EN C++

Función de lectura fread()Función de lectura fread()Esta función lee un archivo n bloques de bytes y losq y yalmacena en un buffer. El numero de bytes de cadabloque (tamaño) se pasa como parámetro, al igual que

ffel numero n de bloques y la dirección del buffer (ovariable) donde se almacena. El formato de llamadaes:es:Fread (direccion_buffer, tamano,n,puntero_archivo);Ej l 13 13Ejemplo 13.13

Page 25: PUNTEROS (APUNTADORES) EN C++

Funciones para acceso aleatorioFunciones para acceso aleatorioLas funciones fseek() y ftell() se usan principalmente paraacceso directo a archivos en C. estas consideran el archivocomo una secuencia de bytes; el numero de byte es el índicedel archivo. Según se va leyendo o escribiendo registros og y gdatos en el archivo, el programa mantiene a través de unpuntero la posición actual. Con la llamada a la funciónftell() se obtiene el valor de dicha posiciónftell() se obtiene el valor de dicha posiciónEl formato para llamar a fseek ( ) es:fseek(puntero_archivo, desplazdmiento, origen);(p , p , g );

Page 26: PUNTEROS (APUNTADORES) EN C++

Función ftellFunción ftellLa posición actual del archivo se puede obtenerp pllamando a la función ftell() y pasando un puntero alarchivo como argumento. La función devuelve laposición como numero de bytes (en entero largo: longint) desde el inicio del archivo (byte 0)P ll l f ió lPara llamar a la función se pasa como argumento elpuntero a FIL,E.l i t ft ll(FILE * f)long int ftell(FILE *pf);

Page 27: PUNTEROS (APUNTADORES) EN C++

Ejercicios Ejercicios Escriba un programa para abrir un archivo decaracteres cuyo nombre y acceso se introducen porteclado en modo lectura; en el caso de que el resultadode la operación sea erróneo abrir el archivo en modode la operación sea erróneo, abrir el archivo en modoescrituraEscribir un programa que compare dos archivos dep g q ptexto. El programa ha de mostrar las diferencias entreel primer archivo y el segundo, precedidas del numerode línea y de columnade línea y de columna

Page 28: PUNTEROS (APUNTADORES) EN C++

Patrón de prueba de pantalla panorámica (16:9)

Prueba de la relación de

aspecto

(Debe parecer circular)

16x9

4x3