Programación Estructurada

Anuncio
Programación Estructurada
PROGRAMACIÓN ESTRUCTURADA
Sesión No. 11
Nombre: Manejo de archivos
Contextualización
En los lenguajes de programación estructurada como C, que carecían de una
conexión a base de datos, era difícil utilizar solo contenedores como variables,
arreglos o estructuras robustas que contuvieran una gran numero de información,
para solucionar muchas de estas necesidades se implementó una metodología
de manejo de archivos.
La intención de utilizar archivos como fuentes de datos o incluso, como
repositorio de información, surge a partir de los grandes programas que
requerían un gran número de información o detalle de información, que, al tratar
de almacenar en arreglos multidimensionales tipo banco de datos, absorbían
mucha memoria y ralentizaban los programas.
La llegada de los ficheros a los lenguajes de programación, ayudo con esta
carga de datos, permitiendo un manejo más robusto de la información.
1
PROGRAMACIÓN ESTRUCTURADA
Introducción al Tema
En sesiones anteriores se detalló el uso de las diferentes estructuras de
almacenamiento de datos, así como su uso e implementación, si bien la
capacidad para manejar la información y trabajarla en contenedores temporales
es robusta, no siempre es la mejor forma de trabajar en cuanto a lenguaje de
programación estructurada se trata.
En el caso de programas robustos como los sistemas bancarios de hace muchos
años, la información que se manejaba era muchísima, y se requería de grandes
tamaños de memoria para poder correr programas de forma óptima, esto, debido
a las estructuras que consumían memoria para trabajar con datos que durarían
mucho tiempo en el programa ejecutable.
La metodología sobre el manejo de ficheros, vino a solucionar grandes
problemas de consumo de memoria, ya que su implementación consiste en crear
un documento y escribir en él, almacenándolo en un espacio reservado al cual
apunta un puntero particular para trabajar sobre la información que el contiene.
En esta sesión encontrarás la forma de trabajar con ficheros en el lenguaje C,
sus operaciones básicas y los tipos de fichero con los que se puede trabajar.
2
PROGRAMACIÓN ESTRUCTURADA
Explicación
6.1 Operaciones básicas
Antes de comenzar se debe hacer una aclaración en caso de que no estés
familiarizado con la palabra fichero (debido a que ya es un término casi olvidado).
Un fichero es conocido también como archivo, y es un conjunto de bits que se
almacenan en un dispositivo de almacenamiento, por ejemplo el disco duro de
una computadora.
El manejo de archivos en C se realiza a través de los punteros de fichero, es
decir, obteniendo la dirección en memoria de donde se encuentra el archivo.
Cada vez que se va a utilizar un fichero, es preciso definir primero un puntero a
fichero de la siguiente forma:
#include <stdio.h>
File * FilePointer;
El puntero de fichero apunta a una estructura que define varios aspectos
internos del archivo, entre las que se incluye su nombre, su estado y la posición
actual. En esencia, el puntero de archivo identifica un archivo de disco duro, así
como el stream asociado a él.
Las operaciones básicas con archivos son: lectura y escritura.
Abrir un archivo.
Para poder trabajar con archivos se deben cumplir los siguientes pasos:
1. Definir un apuntador tipo FILE
2. Utilizar la función fopen(); para abrir el documento.
3. Definir la operación sobre el archivo (lectura, escritura etc.)
4. Cerrar el archivo utilizando la función fclose();
3
PROGRAMACIÓN ESTRUCTURADA
Sintaxis:
Para poder trabajar con los archivos existen diferentes tipos de acciones que
deben ser declarados en la invocación del fopen(); las acciones pueden
invocarse del siguiente modo:
Modo
"r"
"w"
"a"
"r+"
"rb"
"wb"
"ab"
"r+b"
"w+b"
"a+b"
"rt"
"wt"
"at"
"r+t"
"w+t"
"a+t"
Significado
Abrir fichero para lectura.
Abrir fichero para escritura. Si el fichero no existe, es creado. Si existe su
contenido, es limpiado.
Abrir fichero para añadir
Abrir archivo para lectura.
Abrir archivo binario para leer.
Abrir fichero binario para escritura.
Abrir fichero binario para añadir.
Abrir fichero para lectura / escritura.
Abrir fichero para lectura / escritura. El archivo es creado además.
Añadir a un archivo binario o creado para lectura / escritura.
Abrir archivo de texto para leer.
Abrir fichero de texto para escritura.
Abrir fichero de texto para añadir.
Abrir archivo de texto para lectura / escritura.
Abrir archivo de texto para lectura / escritura. El archivo es creado
además.
Añadir a un archivo de texto o crearlo para la lectura / escritura.
Cuando no se especifica la “t” de texto o la “b” de binario se toma el valor que
tenga la variable global_fmode. Esta variable suele tener por defecto el valor
o_text, aunque puede asignársele el valor de o_BINARY.
4
PROGRAMACIÓN ESTRUCTURADA
Un fichero se cierra mediante la función fclose(); que tiene la siguiente sintaxis:
Int fclose (FILE *filepointer);
Esta función recibe el puntero al archivo que deseamos cerrar y devuelve un
valor de 0 si la operación tiene éxito.
Ejemplo:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
FILE *fp;
fp = fopen ( "fichero.in", "r" );
if (fp==NULL) {fputs ("File error",stderr); exit (1);}
fclose ( fp );
return 0;
}
En este ejemplo se utilizó el tipo opentype r para poder leer el archivo
únicamente. Como podrás observar, se valida si el retorno de la función fue de
tipo NULL, lo cual significaría que el archivo no existe.
5
PROGRAMACIÓN ESTRUCTURADA
Lectura de un archivo o fichero.
Existen varias funciones para poder leer un archivo:
feof(); Busca el fin del documento, como ya se comentó, todos los archivos
terminan con el carácter especial EOF (end of file), feof() devuelve un valor
verdadero si encuentra el carácter EOF en la posición actual del puntero.
rewind(); regresa el cursor de lectura del archivo al inicio, es decir, regresa al
inicio del documento.
fgetc(); Lee un carácter del archivo justo donde se encuentra el cursor. Para
poder leer un documento completo se deberá hacer un ciclo repetitivo que
incluya esta función hasta que el carácter leído sea el fin de línea (EOF).
Ejemplo:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *archivo;
char caracter;
archivo = fopen("miArchivo.txt","r");
if (archivo == NULL){
printf("\No se encontro el archivo. \n\n");
}else{
printf("\nEl contenido del archivo es \n\n");
while (feof(archivo) == 0)
{
caracter = fgetc(archivo);
printf("%c",caracter);
6
PROGRAMACIÓN ESTRUCTURADA
}
}
fclose(archivo);
return 0;
}
fgets(); esta función también se encarga de leer el archivo, sólo que en lugar de
leer carácter por carácter toma cadenas de caracteres.
Escritura en archivos o ficheros.
fputc(); escribe un carácter a la vez en un archivo.
fputs(); escribe una cadena de caracteres en un archivo.
fwrite(); esta función permite escribir registros de longitud constante permitiendo
volcar a partir de datos almacenados en la memoria.
fprintf(); esta función trabaja exactamente igual que printf(); solo que su
objetivo de escritura es un archivo en lugar de imprimir en pantalla.
Ejemplo:
#include <stdio.h>
int main ( int argc, char **argv )
{
FILE *fp;
char buffer[100] = "Esto es un texto dentro del fichero.";
fp = fopen ( "fichero.txt", "r+" );
fprintf(fp, buffer);
fprintf(fp, "%s", "\nEsto es otro texto dentro del fichero.");
fclose ( fp );
return 0;
}
7
PROGRAMACIÓN ESTRUCTURADA
6.2 Texto y binarios
Existen dos tipos de archivos con los que se puede trabajar en C, los archivos de
texto y los archivos binarios.
Los archivos de texto.
Son una secuencia de cadenas de caracteres cuyo final se
determina por el carácter especial EOF. En este tipo de
archivos, se suele guardar información de tipo plano o bases
de datos simples, es decir un contenido estructurado de
valores fáciles de leer y entender por el usuario pues son
caracteres tipo texto.
Los Archivos binarios
Desde el punto de vista del programador, los archivos se
deben ver como una cadena de bits (0 a 1) agrupados en
bytes consecutivos, de los cuales, el ultimo, es un carácter
especial (EOF) que indica que no existen más bytes a partir
de él.
Los programas manejan estos bytes de diversas formas dependiendo la
codificación que haya sido utilizada para crear los ficheros, es decir, los bytes
pueden representar números enteros, números reales, caracteres, direcciones
de memoria, etc.
En ambos casos, los archivos son cadenas de bytes terminadas por el carácter
EOF. La diferencia radica en cómo el programa que trata con el fichero va a
interpretar la información contenida en él. Una vez creado un archivo y la
información escrita en él se haya hecho como texto o como binario, en lo
sucesivo, habrá que trabajar siempre del mismo modo, es decir, no podrá
cambiar la forma de leer / escribir información de / en él.
8
PROGRAMACIÓN ESTRUCTURADA
En el caso concreto de MS- DOS, los archivos vienen identificados por un
nombre que ha de tener un máximo de 8 caracteres y una extensión separada
del nombre por punto que es opcional y ha de tener un máximo de 3 caracteres.
Además, es posible especificar el dispositivo en el cual está y el camino de
acceso a dicho archivo a través de los directorios.
9
PROGRAMACIÓN ESTRUCTURADA
Conclusión
Los programas que utilizan como fuente de datos a los ficheros, son archivos
potentes cuya principal necesidad es la lectura y almacenaje de grandes
cantidades de datos, permitiendo resguardar la información en archivos sin
necesidad de recurrir todo el tiempo a espacios de memoria que ralentizan el
programa en ejecución a la larga.
Los archivos más utilizados son los de tipo texto y se utilizan comúnmente para
hacer una emulación de base de datos, conteniendo en ellos, grandes
cantidades de cadenas de texto previamente planeadas y ordenadas.
10
PROGRAMACIÓN ESTRUCTURADA
Para aprender más
En el siguiente link, encontrarás un video donde se detalla paso a paso, como es
que se pueden utilizar los ficheros en un programa desarrollado en lenguaje C.
En él se explica desde la creación de los archivos a consultar y las funciones
para abrirlo leerlo y escribir en él, todo, paso a paso en un programa real.
https://www.youtube.com/watch?v=ztEsa-dtn3E
1
1
Video tomado de YouTube en la liga: https://www.youtube.com/watch?v=ztEsa-
dtn3E
11
PROGRAMACIÓN ESTRUCTURADA
Actividad de Aprendizaje
Con la finalidad de reforzar los conocimientos adquiridos a lo largo de esta
sesión, ahora tendrás que realizar la siguiente actividad.
Instrucciones
 Escribe un ejemplo de un programa básico en C donde abras un archivo
de tipo texto y se escriba en el tu nombre mediante un código de escritura
en el archivo.
 Imprimir la pantalla ya que esté escrito en C
 Convertir en imagen en formato JPG el programa realizado
 Subirlo a la plataforma de la asignatura
Esta actividad te ayudará a comprender los diferentes tipos de archivos que
existen en el lenguaje C, así como su correcta utilización, lo cual te facilitará a
entender las siguientes sesiones.
Esta actividad representa el 5% de tu calificación y se tomará en cuenta lo
siguiente:
 Tus datos generales.
 Título.
 Ejemplo de programa básico en C con tu nombre mediante un código.
 Ortografía y redacción.
 Referencias bibliográficas
12
PROGRAMACIÓN ESTRUCTURADA
Bibliografía
 Badenas, J; (2001). Curso práctico de programación en C y C++, Castello de la
Plana: Universidad Jaume I.
 Cobo A; (s/f). Programar C desde un punto de vista científico, Madrid: Visión
Libros
 Harvey, M; (2004), C / C++ y Java cómo programar, México: Pearson Educación.
 Jordá, P; (s/f). Diseño e implementación de programas en lenguaje C, Valencia:
Universidad Politécnica de Valencia.
 Oviedo, R; (2004), Lógica de programación, Bogotá: Ecoe Ediciones
13
Descargar