Este documento proporciona información sobre el manejo de archivos en lenguaje C++. Explica conceptos básicos de archivos como su clasificación, funciones para manejar archivos y aplicaciones de archivos en C++. Incluye diagramas de flujo y código para realizar operaciones como altas, consultas, listados y bajas en archivos secuenciales y directos. El documento provee una guía completa sobre el uso de archivos en C++ para aplicaciones.
ESTRUCTURA DE DATOS: MEMORIA ESTATICA
La memoria estática es la que no se puede modificar o ejecutar en momento de ejecución. También se debe conocer con anticipo el tamaño de la estructura que está en ejecución.
ITESZ
Este documento presenta información sobre árboles como una estructura de datos. Define árboles y explica que pueden representarse de varias formas, incluyendo registros con punteros y vectores. Explica que los árboles se usan comúnmente para almacenar y acceder rápidamente a información organizada de forma jerárquica. También cubre los diferentes tipos de recorridos de árboles como preorden, inorden y postorden.
Unidad 3 topicos avanzados de programacionIrving Che
Este documento describe los componentes, librerías y paquetes en programación. Explica que un componente puede ser visual o no visual, y que los componentes se agrupan en contenedores. También describe el uso de librerías como java.lang y java.io, y cómo los usuarios pueden crear sus propios componentes y paquetes.
Este documento describe los principales componentes hardware de una computadora, incluyendo el procesador, la memoria RAM y el disco duro. Explica que el procesador es el componente central que ejecuta instrucciones, la memoria RAM almacena temporalmente programas y datos durante su uso, y el disco duro guarda información de manera permanente. También brinda detalles sobre los diferentes tipos de procesadores, RAM y discos duros.
Este documento describe los conceptos fundamentales del diseño RTL de procesadores aritméticos y microelectrónica. Explica el lenguaje de transferencia de registros utilizado para describir sistemas digitales a nivel operacional, incluyendo los componentes básicos como registros, operaciones y funciones de control. También cubre temas como la estructura de una unidad de datos, diseño de una unidad aritmético lógica y ciclos de microoperaciones de procesadores.
El documento describe diferentes estructuras de datos como pilas, colas y listas enlazadas. Explica que una pila es una estructura LIFO donde los elementos se agregan y eliminan de un extremo, mientras que una cola es una estructura FIFO donde los elementos se agregan a un extremo y eliminan del otro. También describe listas enlazadas y sus operaciones básicas como recorrer, insertar y eliminar nodos. Incluye ejemplos de código en C para implementar una lista enlazada genérica.
El documento describe la arquitectura de Von Neumann, que incluye una unidad de procesamiento, unidad de control y memoria compartida para almacenar tanto instrucciones como datos. Esta arquitectura es utilizada por la mayoría de computadoras modernas aunque tiene limitaciones como la velocidad reducida debido a los accesos secuenciales a memoria. El documento también discute los orígenes de esta arquitectura y sus ventajas y desventajas.
Este documento describe el interbloqueo y la inanición en sistemas concurrentes. Define el interbloqueo como el bloqueo permanente de un conjunto de procesos que compiten por recursos o se comunican entre sí. Explica que para que ocurra el interbloqueo se deben cumplir cuatro condiciones: exclusión mutua, posesión y espera, no apropiación, y espera circular. También incluye un ejemplo de interbloqueo en un cruce de cuatro caminos donde cuatro coches llegan al mismo tiempo y ninguno puede avanzar porque cada
ESTRUCTURA DE DATOS: MEMORIA ESTATICA
La memoria estática es la que no se puede modificar o ejecutar en momento de ejecución. También se debe conocer con anticipo el tamaño de la estructura que está en ejecución.
ITESZ
Este documento presenta información sobre árboles como una estructura de datos. Define árboles y explica que pueden representarse de varias formas, incluyendo registros con punteros y vectores. Explica que los árboles se usan comúnmente para almacenar y acceder rápidamente a información organizada de forma jerárquica. También cubre los diferentes tipos de recorridos de árboles como preorden, inorden y postorden.
Unidad 3 topicos avanzados de programacionIrving Che
Este documento describe los componentes, librerías y paquetes en programación. Explica que un componente puede ser visual o no visual, y que los componentes se agrupan en contenedores. También describe el uso de librerías como java.lang y java.io, y cómo los usuarios pueden crear sus propios componentes y paquetes.
Este documento describe los principales componentes hardware de una computadora, incluyendo el procesador, la memoria RAM y el disco duro. Explica que el procesador es el componente central que ejecuta instrucciones, la memoria RAM almacena temporalmente programas y datos durante su uso, y el disco duro guarda información de manera permanente. También brinda detalles sobre los diferentes tipos de procesadores, RAM y discos duros.
Este documento describe los conceptos fundamentales del diseño RTL de procesadores aritméticos y microelectrónica. Explica el lenguaje de transferencia de registros utilizado para describir sistemas digitales a nivel operacional, incluyendo los componentes básicos como registros, operaciones y funciones de control. También cubre temas como la estructura de una unidad de datos, diseño de una unidad aritmético lógica y ciclos de microoperaciones de procesadores.
El documento describe diferentes estructuras de datos como pilas, colas y listas enlazadas. Explica que una pila es una estructura LIFO donde los elementos se agregan y eliminan de un extremo, mientras que una cola es una estructura FIFO donde los elementos se agregan a un extremo y eliminan del otro. También describe listas enlazadas y sus operaciones básicas como recorrer, insertar y eliminar nodos. Incluye ejemplos de código en C para implementar una lista enlazada genérica.
El documento describe la arquitectura de Von Neumann, que incluye una unidad de procesamiento, unidad de control y memoria compartida para almacenar tanto instrucciones como datos. Esta arquitectura es utilizada por la mayoría de computadoras modernas aunque tiene limitaciones como la velocidad reducida debido a los accesos secuenciales a memoria. El documento también discute los orígenes de esta arquitectura y sus ventajas y desventajas.
Este documento describe el interbloqueo y la inanición en sistemas concurrentes. Define el interbloqueo como el bloqueo permanente de un conjunto de procesos que compiten por recursos o se comunican entre sí. Explica que para que ocurra el interbloqueo se deben cumplir cuatro condiciones: exclusión mutua, posesión y espera, no apropiación, y espera circular. También incluye un ejemplo de interbloqueo en un cruce de cuatro caminos donde cuatro coches llegan al mismo tiempo y ninguno puede avanzar porque cada
1) Un proceso es una abstracción que hace referencia a cada caso de ejecución de un programa. Los procesos pueden ser de modo kernel o modo usuario.
2) Existen mecanismos de comunicación y sincronización entre procesos como señales, tuberías, semáforos y variables condicionales.
3) La sincronización asegura el acceso compartido a recursos para prevenir errores y asegurar la exclusión mutua en las secciones críticas.
Este documento presenta un resumen de 4 oraciones de la arquitectura en pipeline. Describe que el documento original es un trabajo académico de la Universidad Nacional de Trujillo sobre la arquitectura en pipeline. Incluye la introducción, los 4 capítulos sobre pipeline, características, ralentización y aplicaciones, así como las conclusiones y referencias bibliográficas. El trabajo fue realizado por 3 estudiantes de ingeniería informática bajo la supervisión del profesor Arturo Díaz Pulido.
Diferencias entre arquitectura y organizaciónAngel Aguilar
La arquitectura de computadoras se refiere a los atributos de un sistema visibles para un programador, mientras que la organización de computadoras se refiere a las unidades operativas y cómo se interconectan para implementar las especificaciones arquitectónicas. La arquitectura define instrucciones y la organización es cómo los componentes se conectan físicamente.
El documento describe las funciones fundamentales de la gestión de procesos en un sistema operativo moderno, como asignar recursos a los procesos, permitir el intercambio de información entre ellos, proteger los recursos de un proceso del resto, y facilitar la sincronización. El sistema operativo mantiene una estructura de datos para cada proceso que describe su estado y recursos, permitiendo al sistema operativo controlar los procesos.
Este documento describe diferentes tipos de bibliotecas en C++, incluyendo bibliotecas estándar como iostream y math, bibliotecas definidas por el programador, y el uso de namespaces como std. También explica qué son las bibliotecas, cómo incluirlas en un programa, y proporciona ejemplos de su uso.
Este documento describe la arquitectura de las computadoras. Explica que la arquitectura define la estructura y distribución de los componentes de una computadora como la CPU, memoria y periféricos. La CPU procesa la información y se comunica con los periféricos a través de canales. La arquitectura también especifica cómo se almacenan y acceden a los operandos en la CPU, ya sea en un acumulador, pila o registros. Finalmente, concluye que entender la arquitectura es clave para comprender el funcionamiento inter
Este documento presenta varios métodos de búsqueda y ordenamiento de datos, incluyendo el método de la burbuja, selección, inserción, intercambio, Shell, búsqueda secuencial y binaria, quicksort, binsort y radixsort. Explica cada método con ejemplos para ilustrar cómo funcionan los algoritmos de ordenamiento y búsqueda.
Este documento contiene información acerca de los Arboles en Estructura de datos, como son los Arboles Binarios al igual que los elementos que los componen.
Este documento describe las diferencias entre estructuras de datos lineales y no lineales. Las estructuras lineales como listas, pilas y colas tienen una relación uno a uno entre elementos, mientras que las estructuras no lineales como árboles y grafos tienen relaciones uno a muchos, muchos a uno o muchos a muchos. Se explican los tipos y aplicaciones de listas, pilas, colas, árboles y grafos.
1. El diseño de entradas y salidas se refiere al procesamiento de datos que un programa recibe y envía. Las entradas pueden provenir del teclado o de archivos, y las salidas se envían a dispositivos de salida a través de flujos. 2. Los flujos son corrientes de datos que permiten la comunicación entre el programa y dispositivos de entrada/salida. 3. Los analistas deben diseñar las entradas y salidas considerando factores como la calidad, velocidad y simplicidad del proceso.
Este documento presenta una lista de integrantes y varios temarios relacionados con la arquitectura de computadoras. Los temarios incluyen información sobre la CPU como su historia y evolución, partes lógicas y físicas, coprocesadores, frecuencia de reloj y rendimiento. También cubren la memoria, incluyendo tipos como RAM, ROM y caché, así como registros y la unidad aritmético lógica.
Programación Orientada a Objetos - constructores y destructoresAlvaro Enrique Ruano
Esta presentación es parte del contenido del curso de Programación Avanzada impartido en la Universidad Rafael Landívar durante el año 2015.
Incluye los temas:
• Constructores
• Destructores
Creado por Ing. Alvaro Enrique Ruano
Este documento describe los fundamentos de la memoria virtual en sistemas operativos. Explica que la memoria virtual permite ejecutar programas mayores que la memoria física disponible mediante el intercambio de páginas entre memoria y disco. También describe técnicas como la paginación bajo demanda, algoritmos de sustitución como FIFO y LRU, y conceptos como la asignación de marcos de memoria a procesos.
El documento presenta un resumen de un cuestionario sobre arquitectura de computadoras. El cuestionario fue respondido correctamente, obteniendo un puntaje perfecto del 100%. Cubrió temas como el modelo de Von Neumann, componentes internos de los microprocesadores como transistores y circuitos integrados, y características a considerar al elegir un microprocesador como la velocidad y número de núcleos.
Este documento trata sobre la recursividad y los métodos recursivos. Explica que la recursividad implica definir un proceso en términos de sí mismo, y que un método recursivo es aquel que puede llamarse a sí mismo. Presenta ejemplos de recursividad matemática como los fractales y la función factorial. Luego describe cómo implementar métodos recursivos en programación y los dos tipos de recursividad: directa e indirecta. Finalmente, resuelve problemas como Fibonacci, potencias y suma de naturales usando recursividad.
Este documento compara y resume varios métodos de ordenamiento de datos, incluyendo ordenamiento por selección, burbuja, Shell, inserción, quicksort y mergesort. Explica la lógica de cada algoritmo, su complejidad computacional y ventajas/desventajas. Concluye que quicksort y mergesort son los más eficientes, aunque mergesort usa más memoria.
Selecciona el asistente de
componentes, el cual permite crear
componentes personalizados.
Colocar IC
Selecciona el grupo de componentes
integrados en el navegador.
Colocar
transformador
Selecciona el grupo de componentes
transformador en el navegador.
Colocar
dispositivo
Selecciona el grupo de componentes
dispositivos en el navegador.
Colocar
conector
Selecciona el grupo de componentes
conectores en el navegador.
Colocar
protoboard
Selecciona el component
Programación 3: Ordenación topológica, matriz de caminos y algoritmo WarshallAngel Vázquez Patiño
Esta presentación le pertenece a Christian Paul Salinas
Introducción
Ordenación Topológica
Relación de Precedencia
Grafo Dirigido Aciclico
Complejidad
Pasos
Implementación del algoritmo de ordenación topológica(Ejemplo en Java)
Matriz de caminos, Algoritmo de Warshall
Matriz Cierre Transitivo
Complejidad
Ejemplo Paso a paso, e Implementación del algoritmo en Java
El documento describe los archivos de texto y su estructura bidimensional de líneas y caracteres. Explica cómo se trabaja con archivos en C utilizando punteros FILE* para abrir, cerrar y realizar operaciones sobre archivos. Las funciones de la biblioteca stdio.h como fopen, fclose, getc y putc permiten leer y escribir caracteres y líneas desde y hacia archivos.
El documento describe las distintas operaciones que se pueden realizar en archivos, incluyendo creación, consulta, actualización, clasificación, reorganización, destrucción, reunión y rotura. Explica cómo abrir y cerrar archivos y borrarlos del soporte de almacenamiento. Los integrantes del proyecto son Jhon Aguilar, Alejandro Chamba y Galo Muñoz.
1) Un proceso es una abstracción que hace referencia a cada caso de ejecución de un programa. Los procesos pueden ser de modo kernel o modo usuario.
2) Existen mecanismos de comunicación y sincronización entre procesos como señales, tuberías, semáforos y variables condicionales.
3) La sincronización asegura el acceso compartido a recursos para prevenir errores y asegurar la exclusión mutua en las secciones críticas.
Este documento presenta un resumen de 4 oraciones de la arquitectura en pipeline. Describe que el documento original es un trabajo académico de la Universidad Nacional de Trujillo sobre la arquitectura en pipeline. Incluye la introducción, los 4 capítulos sobre pipeline, características, ralentización y aplicaciones, así como las conclusiones y referencias bibliográficas. El trabajo fue realizado por 3 estudiantes de ingeniería informática bajo la supervisión del profesor Arturo Díaz Pulido.
Diferencias entre arquitectura y organizaciónAngel Aguilar
La arquitectura de computadoras se refiere a los atributos de un sistema visibles para un programador, mientras que la organización de computadoras se refiere a las unidades operativas y cómo se interconectan para implementar las especificaciones arquitectónicas. La arquitectura define instrucciones y la organización es cómo los componentes se conectan físicamente.
El documento describe las funciones fundamentales de la gestión de procesos en un sistema operativo moderno, como asignar recursos a los procesos, permitir el intercambio de información entre ellos, proteger los recursos de un proceso del resto, y facilitar la sincronización. El sistema operativo mantiene una estructura de datos para cada proceso que describe su estado y recursos, permitiendo al sistema operativo controlar los procesos.
Este documento describe diferentes tipos de bibliotecas en C++, incluyendo bibliotecas estándar como iostream y math, bibliotecas definidas por el programador, y el uso de namespaces como std. También explica qué son las bibliotecas, cómo incluirlas en un programa, y proporciona ejemplos de su uso.
Este documento describe la arquitectura de las computadoras. Explica que la arquitectura define la estructura y distribución de los componentes de una computadora como la CPU, memoria y periféricos. La CPU procesa la información y se comunica con los periféricos a través de canales. La arquitectura también especifica cómo se almacenan y acceden a los operandos en la CPU, ya sea en un acumulador, pila o registros. Finalmente, concluye que entender la arquitectura es clave para comprender el funcionamiento inter
Este documento presenta varios métodos de búsqueda y ordenamiento de datos, incluyendo el método de la burbuja, selección, inserción, intercambio, Shell, búsqueda secuencial y binaria, quicksort, binsort y radixsort. Explica cada método con ejemplos para ilustrar cómo funcionan los algoritmos de ordenamiento y búsqueda.
Este documento contiene información acerca de los Arboles en Estructura de datos, como son los Arboles Binarios al igual que los elementos que los componen.
Este documento describe las diferencias entre estructuras de datos lineales y no lineales. Las estructuras lineales como listas, pilas y colas tienen una relación uno a uno entre elementos, mientras que las estructuras no lineales como árboles y grafos tienen relaciones uno a muchos, muchos a uno o muchos a muchos. Se explican los tipos y aplicaciones de listas, pilas, colas, árboles y grafos.
1. El diseño de entradas y salidas se refiere al procesamiento de datos que un programa recibe y envía. Las entradas pueden provenir del teclado o de archivos, y las salidas se envían a dispositivos de salida a través de flujos. 2. Los flujos son corrientes de datos que permiten la comunicación entre el programa y dispositivos de entrada/salida. 3. Los analistas deben diseñar las entradas y salidas considerando factores como la calidad, velocidad y simplicidad del proceso.
Este documento presenta una lista de integrantes y varios temarios relacionados con la arquitectura de computadoras. Los temarios incluyen información sobre la CPU como su historia y evolución, partes lógicas y físicas, coprocesadores, frecuencia de reloj y rendimiento. También cubren la memoria, incluyendo tipos como RAM, ROM y caché, así como registros y la unidad aritmético lógica.
Programación Orientada a Objetos - constructores y destructoresAlvaro Enrique Ruano
Esta presentación es parte del contenido del curso de Programación Avanzada impartido en la Universidad Rafael Landívar durante el año 2015.
Incluye los temas:
• Constructores
• Destructores
Creado por Ing. Alvaro Enrique Ruano
Este documento describe los fundamentos de la memoria virtual en sistemas operativos. Explica que la memoria virtual permite ejecutar programas mayores que la memoria física disponible mediante el intercambio de páginas entre memoria y disco. También describe técnicas como la paginación bajo demanda, algoritmos de sustitución como FIFO y LRU, y conceptos como la asignación de marcos de memoria a procesos.
El documento presenta un resumen de un cuestionario sobre arquitectura de computadoras. El cuestionario fue respondido correctamente, obteniendo un puntaje perfecto del 100%. Cubrió temas como el modelo de Von Neumann, componentes internos de los microprocesadores como transistores y circuitos integrados, y características a considerar al elegir un microprocesador como la velocidad y número de núcleos.
Este documento trata sobre la recursividad y los métodos recursivos. Explica que la recursividad implica definir un proceso en términos de sí mismo, y que un método recursivo es aquel que puede llamarse a sí mismo. Presenta ejemplos de recursividad matemática como los fractales y la función factorial. Luego describe cómo implementar métodos recursivos en programación y los dos tipos de recursividad: directa e indirecta. Finalmente, resuelve problemas como Fibonacci, potencias y suma de naturales usando recursividad.
Este documento compara y resume varios métodos de ordenamiento de datos, incluyendo ordenamiento por selección, burbuja, Shell, inserción, quicksort y mergesort. Explica la lógica de cada algoritmo, su complejidad computacional y ventajas/desventajas. Concluye que quicksort y mergesort son los más eficientes, aunque mergesort usa más memoria.
Selecciona el asistente de
componentes, el cual permite crear
componentes personalizados.
Colocar IC
Selecciona el grupo de componentes
integrados en el navegador.
Colocar
transformador
Selecciona el grupo de componentes
transformador en el navegador.
Colocar
dispositivo
Selecciona el grupo de componentes
dispositivos en el navegador.
Colocar
conector
Selecciona el grupo de componentes
conectores en el navegador.
Colocar
protoboard
Selecciona el component
Programación 3: Ordenación topológica, matriz de caminos y algoritmo WarshallAngel Vázquez Patiño
Esta presentación le pertenece a Christian Paul Salinas
Introducción
Ordenación Topológica
Relación de Precedencia
Grafo Dirigido Aciclico
Complejidad
Pasos
Implementación del algoritmo de ordenación topológica(Ejemplo en Java)
Matriz de caminos, Algoritmo de Warshall
Matriz Cierre Transitivo
Complejidad
Ejemplo Paso a paso, e Implementación del algoritmo en Java
El documento describe los archivos de texto y su estructura bidimensional de líneas y caracteres. Explica cómo se trabaja con archivos en C utilizando punteros FILE* para abrir, cerrar y realizar operaciones sobre archivos. Las funciones de la biblioteca stdio.h como fopen, fclose, getc y putc permiten leer y escribir caracteres y líneas desde y hacia archivos.
El documento describe las distintas operaciones que se pueden realizar en archivos, incluyendo creación, consulta, actualización, clasificación, reorganización, destrucción, reunión y rotura. Explica cómo abrir y cerrar archivos y borrarlos del soporte de almacenamiento. Los integrantes del proyecto son Jhon Aguilar, Alejandro Chamba y Galo Muñoz.
Este documento describe el manejo de archivos en C, incluyendo la apertura, lectura, escritura y cierre de archivos. Explica que los archivos pueden ser de texto o binarios y presenta funciones como fopen(), fclose(), fscanf(), fprintf(), fgetc(), fputc(), fgets() y fputs() para realizar operaciones básicas con archivos. También incluye ejemplos de código C para ilustrar el uso de estas funciones.
El documento habla sobre las estructuras en el lenguaje de programación C. Explica que una estructura permite almacenar múltiples variables de diferentes tipos, lo que es útil para representar objetos complejos como registros de clientes. También describe cómo declarar y acceder a estructuras, incluyendo el uso de arreglos de estructuras. Finalmente, propone un ejercicio para aplicar estas nociones mediante un programa de registro de proveedores, clientes, empleados y productos de una empresa.
El documento presenta el silabo de la unidad didáctica "Taller de Base de Datos" impartida en el Instituto de Educación Superior Tecnológico Público "Padre Abad". La unidad se enfoca en enseñar el desarrollo de software y gestión de bases de datos a través de temas como minería de datos, normalización, diseño de bases de datos relacionales y consultas SQL. La metodología incluye trabajo en equipo, seminarios y prácticas de laboratorio evaluadas bajo criterios nacionales.
Este documento presenta el sílabo de la asignatura Base de Datos I impartida en la Universidad Nacional de Chimborazo. El sílabo describe los objetivos del curso, contenidos, metodología y bibliografía recomendada. El curso tiene una duración de 19 semanas y abarca temas como introducción a bases de datos, modelo relacional, diseño lógico y lenguaje SQL. El objetivo principal es capacitar a los estudiantes en el análisis, diseño e implementación de bases de datos usando herramientas como SQL Server.
El documento describe cómo crear y procesar archivos de datos en C++. Explica que los archivos se utilizan para almacenar datos de forma permanente, mientras que las variables solo almacenan datos de forma temporal. Luego, detalla cómo crear un archivo secuencial para almacenar registros de clientes con su número de cuenta, nombre y saldo, usando clases ifstream, ofstream y fstream. Finalmente, muestra el código para crear un objeto ofstream, abrir y verificar el archivo, e introducir y escribir registros de clientes en el archivo.
Este documento presenta una comparación entre archivos secuenciales y aleatorios, describiendo sus definiciones, ventajas, desventajas e instrucciones principales. Explica que los archivos secuenciales almacenan la información de forma consecutiva mientras que los aleatorios guardan registros de igual tamaño aunque no se utilicen todos los espacios, y permite lecturas y escrituras directas.
El documento describe los conceptos básicos de los archivos, incluyendo su estructura, tipos (texto y binario), y operaciones comunes como abrir, leer, escribir y cerrar. También explica cómo manejar archivos en C++ usando streams y seek para moverse por el archivo.
El documento habla sobre la teoría de los transistores. Explica que los transistores reemplazaron a los tubos de vacío y tienen un consumo de corriente y tamaño mucho menor. Esto permite una reducción drástica del tamaño de los circuitos electrónicos. Además, los transistores tienen una vida útil prácticamente ilimitada y funcionan con tensiones menores de 10 voltios en comparación con los 300 voltios de los tubos de vacío. Finalmente, menciona que los transistores están constituidos fundamentalmente por silicio o germanio.
Trabajo sobre archivos en java.. programacion no numerica iirafaelrojas91
Este documento describe las clases y métodos de Java para la entrada y salida de datos, incluyendo el uso de archivos, flujos de entrada y salida, lectura y escritura de datos, y serialización de objetos. Explica las jerarquías de clases Reader, Writer, InputStream y OutputStream y cómo se usan las clases FileInputStream, FileOutputStream y RandomAccessFile para leer y escribir archivos de texto y binarios.
El documento describe los componentes básicos del transistor, incluyendo los cristales tipo N y P, los transistores NPN y PNP, y sus funciones como interruptor y amplificador. Explica cómo los átomos de arsénico y boro pueden convertir al silicio en un semiconductor de tipo N o P, respectivamente.
El documento presenta un resumen de tres oraciones sobre el lenguaje de programación C++. Explica que C++ es un lenguaje imperativo orientado a objetos derivado de C que permite programación a bajo nivel como C pero también con mayor abstracción. Detalla los pasos básicos para crear un programa en C++ que incluyen abrir el programa, crear el código fuente, compilar el código fuente para traducirlo a código máquina comprensible para la computadora, y ejecutar el programa resultante.
Este documento proporciona una guía de los símbolos comúnmente utilizados en diagramas de flujo. Describe los símbolos para procesos, decisiones, conexiones, entrada/salida de datos y almacenamiento. Los símbolos más comunes incluyen círculos para procesos, rombos para decisiones, flechas para conexiones y cuadrados para almacenamiento y entrada/salida de datos. El documento enfatiza la importancia de incluir una leyenda de símbolos para evitar confusiones.
Este documento presenta el sílabo de la asignatura Computación e Informática I impartida en la Universidad Nacional de Tumbes. El sílabo incluye la información general del curso, sus fundamentos, objetivos, programación dividida en cuatro unidades con sus contenidos y metodología, sistema de evaluación y referencias bibliográficas. El curso busca brindar herramientas informáticas a los estudiantes para que utilicen eficientemente el sistema operativo Windows, Internet, Power Point y Microsoft Word.
Un archivo secuencial almacena registros de forma consecutiva, uno después del otro, sin espacios vacíos. Para leer o actualizar un registro, el sistema debe recorrer el archivo de forma secuencial desde el principio. La actualización de un archivo maestro secuencial requiere el uso de un archivo de transacciones para realizar cambios de forma eficiente por lotes.
Este documento presenta la actualización del sílabo de la asignatura de Matemática I de la carrera de Computación e Informática. Se propone mejorar el elemento de evaluación incluyendo una matriz de evaluación, así como actualizar el contenido considerando los lineamientos del módulo transversal de Matemática y los conceptos teóricos del curso. El trabajo busca adecuar el sílabo al nuevo Sistema Modular aplicado en los institutos públicos peruanos.
Diagrama de flujo, archivo, entidades, procesosDeivis Romero
El documento describe los diagramas de flujo de datos, que son herramientas gráficas para describir el movimiento de datos a través de un sistema. Explica la simbología utilizada como círculos para procedimientos, cuadrados para procesos de control, y líneas para el flujo de información. También define términos como entidades, procesos, archivos y la entrada y salida de datos.
El documento describe diferentes tipos de archivos y métodos de acceso a archivos. Explica que los archivos almacenan información y pueden accederse de forma secuencial, directa u otros métodos. También describe archivos maestros, de transacciones, de trabajo y otros, así como organizaciones de archivos secuenciales, indexados y directos.
Este documento presenta conceptos básicos sobre manejo de archivos en lenguaje C++. Explica que los archivos surgen para almacenar datos de forma permanente en dispositivos secundarios y poder transportarlos entre computadoras. Define términos como datos, registros y archivos, y clasifica los archivos por tipo de contenido (texto y binarios) y tipo de acceso (secuenciales y directos). Finalmente, describe funciones básicas de C++ para manejar archivos como fopen(), fwrite(), fread(), fseek() y fclose(). El objetivo es
Este documento presenta un libro sobre análisis exploratorio y visualización de datos con R. Explica cómo instalar y usar R y RStudio, y describe los tipos de datos básicos en R como vectores, matrices y data frames. También cubre temas como la carga de datos de diferentes formatos, el tratamiento de datos ausentes, el análisis exploratorio mediante estadísticas descriptivas y gráficos, y la generación de histogramas, gráficas de barras y otros gráficos básicos en R.
Este documento trata sobre la construcción de traductores (compiladores y analizadores) para lenguajes de programación usando herramientas como Lex/Yacc, JFlex/Cup y JavaCC. Explica conceptos básicos como el análisis léxico, sintáctico y semántico, y describe las diferentes etapas del proceso de compilación como preprocesamiento, análisis y síntesis. Además, detalla las características y uso de generadores de analizadores léxicos y sintácticos como PCLex,
Este documento presenta el lenguaje de programación R como una herramienta para el análisis estadístico. Introduce los tipos de datos básicos en R como vectores, matrices, factores y data frames. Explica cómo manipular y acceder a porciones de datos, y describe el uso de estructuras de control y funciones para clasificar, transformar y agregar datos. Finalmente, cubre temas como la escritura de funciones y la generación de gráficos.
Para los interesados en el aprendizaje del Lenguaje R les recomiendo este libro, esta muy detallado y para variar esta en Español. R es un entorno y lenguaje de programación con un enfoque al análisis estadístico. Se trata de uno de los lenguajes más utilizados en investigación por la comunidad estadística, siendo además muy popular en el campo de la minería de datos, la investigación biomédica, la bioinformática y las matemáticas financieras. Además contribuye la posibilidad de cargar diferentes bibliotecas o paquetes con funcionalidades de cálculo y gráficas. La buena noticia es que es GRATUITO
Este documento presenta el lenguaje de programación R como una herramienta para el análisis estadístico. Introduce los tipos de datos básicos en R como vectores, matrices, factores y data frames. Explica cómo manipular y acceder a porciones de datos. También cubre la escritura de funciones, gráficas y modelos estadísticos en R.
El documento describe la historia y componentes básicos de una computadora. Explica que una computadora está formada por hardware físico como circuitos electrónicos y software intangible como programas. Las partes clave son la unidad central de procesamiento, memoria principal y periféricos de entrada/salida. También resume brevemente que las primeras computadoras analógicas mecánicas se usaron en la Segunda Guerra Mundial y la primera computadora digital fue la ENIAC, mientras que las computadoras modernas son digitales, más pequeñas y potentes.
Este documento presenta un manual para un curso de introducción a LATEX. Explica los objetivos del curso, que son proporcionar los conceptos básicos y la forma de trabajar con LATEX para crear documentos desde informes simples hasta artículos de investigación. También describe los contenidos del curso, que incluyen introducción a LATEX, conceptos básicos, creación y formato de documentos, edición elemental y especializada, y personalización. Finalmente, incluye un índice general de los temas que se cubrirán.
Este documento trata sobre traductores y compiladores construidos con herramientas como Lex/Yacc, JFlex/Cup y JavaCC. Explica conceptos como el análisis léxico, sintáctico y semántico, y describe herramientas como PCLex, JFlex y Cup que permiten generar analizadores léxicos y sintácticos. Finalmente, incluye ejemplos de cómo crear un analizador léxico y sintáctico para un lenguaje de programación.
Este documento presenta un índice general del libro "Pensar en C++" (Volumen 1) de Bruce Eckel, que introduce conceptos básicos de programación orientada a objetos en C++ como clases, herencia, polimorfismo, manejo de errores y diseño de software orientado a objetos.
El documento presenta información sobre sistemas operativos. Explica conceptos básicos como procesos, planificación de procesos, programación concurrente, interbloqueos y gestión de memoria. Incluye definiciones de sistemas operativos, su evolución histórica y las funciones y objetivos principales como interfaz usuario-computadora y administrador de recursos.
Este documento proporciona información sobre la licencia Creative Commons que permite el uso y distribución de contenidos siempre que se cite la fuente original y no se usen con fines comerciales. Se incluye un enlace web para acceder a la versión completa de la licencia Creative Commons.
Este documento trata sobre traductores y compiladores construidos con herramientas como Lex/Yacc, JFlex/Cup y JavaCC. Explica conceptos básicos sobre análisis léxico, sintáctico y generación de código. También presenta ejemplos del uso de estas herramientas para construir analizadores léxicos y sintácticos en Java.
Este documento presenta una guía rápida para usuarios nuevos de LATEX. Explica brevemente los antecedentes históricos de LATEX y TEX creados por Donald Knuth y Leslie Lamport respectivamente. Incluye capítulos sobre nociones básicas, tipos de documentos, partes de un documento, fórmulas matemáticas, tablas, cajas, enumeraciones y más. El objetivo es proporcionar una introducción general al uso de LATEX para la composición de documentos.
Este documento presenta ejemplos de esquemas con numeración y viñetas en Word. Incluye un esquema numerado sobre los componentes de una computadora y sus subcomponentes. También muestra un esquema con viñetas sobre tipos de impresoras. El objetivo es que el estudiante reproduzca estos ejemplos y personalice uno de los esquemas numerados.
Este documento proporciona instrucciones detalladas para administrar un foro usando PHP-Nuke. Explica cómo instalar y configurar PHP-Nuke, crear y moderar contenido de usuarios, y personalizar la apariencia y funcionalidad del sitio a través de temas y módulos. También cubre edición básica en HTML y SQL para principiantes. El objetivo general es enseñar a los lectores a construir y mantener un foro dinámico y participativo usando esta herramienta de código abierto.
Este documento presenta una introducción al lenguaje de programación C. Explica que C fue creado en los años 1970 y se ha convertido en un lenguaje muy popular y portable. El documento contiene varias secciones que cubren conceptos como tipos de datos, operadores, control de flujo, funciones, punteros, cadenas, entrada/salida y archivos. El objetivo es servir como una guía para aprender los fundamentos del lenguaje C.
Este documento proporciona una guía rápida de referencia sobre el editor de texto Vim. Explica conceptos básicos como los modos de edición, comandos de movimiento y modificación de texto, y cómo trabajar con ficheros y ventanas. También incluye secciones detalladas sobre temas como la manipulación de líneas, tabuladores y sangrado. La guía está destinada a usuarios tanto novatos como experimentados de Vim.
Este documento proporciona una introducción a R, un software libre para análisis estadístico de datos. Explica la estructura de R, incluyendo la consola de órdenes y la interfaz gráfica Rcommander. También cubre temas como la obtención y manejo de datos, análisis descriptivo con una variable, y diferentes tipos de gráficos. El objetivo final es que los estudiantes aprendan a utilizar R para realizar diferentes tipos de análisis estadísticos.
Este documento presenta un libro sobre la administración avanzada de Windows 7. El libro enseña a los lectores cómo aprovechar al máximo las características y herramientas de Windows 7 para convertirse en administradores profesionales. A través de sus páginas, los lectores aprenderán sobre temas avanzados como la instalación, configuración, seguridad, rendimiento y solución de problemas de Windows 7. El libro también cubre el uso de aplicaciones, redes, hardware y herramientas administrativas.
Este documento resume los contenidos de un libro sobre soluciones a problemas comunes en computadoras. El libro explica cómo resolver fallas en sistemas operativos como Windows Vista y XP, problemas con aplicaciones como Microsoft Office, y dificultades con hardware, imágenes, audio y correo electrónico. Además, ofrece consejos sobre sistemas mixtos, rendimiento, seguridad y almacenamiento.
Este documento proporciona una introducción y resumen del contenido de un libro sobre seguridad informática. Explica que el libro enseña a los lectores a configurar las herramientas de seguridad necesarias para proteger su computadora y red, incluyendo la instalación de antivirus, protección contra spyware y malware, configuración de firewall y red Wi-Fi, y establecimiento de políticas de seguridad y privacidad. El resumen también incluye una lista de los capítulos que cubren estos temas de seguridad paso a paso.
Este documento habla sobre la importancia de la privacidad y la seguridad de los datos en la era digital. Explica que debido al gran volumen de datos personales que se comparten en línea, es crucial que las empresas protejan esta información de manera responsable para mantener la confianza de los clientes.
Este documento presenta un libro sobre robótica que enseña a construir robots desde cero. Explica los conceptos básicos de robótica e inteligencia de robots, así como los componentes necesarios para construir robots autónomos capaces de percibir su entorno y generar movimiento. El libro guía al lector a través de cada paso teórico y práctico para el armado y programación de un robot.
Este documento proporciona una introducción a cómo convertir una PC en un estudio de grabación musical profesional utilizando herramientas gratuitas tanto en Windows como en Linux. Explica cómo diseñar el espacio de trabajo, el proceso de grabación digital, software recomendado como secuenciadores y editores de audio, y consejos sobre hardware, sistemas operativos e instalación. El objetivo final es aprender a grabar, mezclar e incluso masterizar canciones de forma casera.
1. SEP SEIT DGIT
INSTITUTO TECNOLÓGICO DE NUEVO
LAREDO
DEPTO. DE SISTEMAS Y COMPUTACIÓN
“Manejo de Archivos en Lenguaje
C++”
Por:
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/takeyas
Email: takeyas@itnuevolaredo.edu.mx
2. Manejo de Archivos en Lenguaje C++
TABLA DE CONTENIDO
Pág.
Tabla de figuras.……………………………………………... 5
Prefacio………………………………………………………... 7
1.- CONCEPTOS BÁSICOS DE ARCHIVOS…………….. 8
1.1. ¿Cómo surge la necesidad de utilizar archivos?................................ 8
1.2. Relación entre la memoria principal, el microprocesador y
dispositivos de almacenamiento secundario...................................... 9
1.3. Definiciones de datos, registros y archivos……………………………. 10
1.4. Analogías de archivos y archiveros..…………………………………… 12
1.5. Apertura de archivos……………………………..…………………….... 16
1.6. Clasificación de archivos por tipo de contenido……………………..... 17
1.6.1. Archivos de texto…….………………….………………………... 18
1.6.2. Archivos binarios………………………………………………..… 18
1.7. Clasificación de archivos por tipos de acceso……………………....... 19
1.7.1. Archivos secuenciales………………….………………………... 20
1.7.1.1. Consulta o recorrido secuencial………………………. 20
1.7.2. Archivos directos (relativos, de acceso directo o aleatorios)… 22
1.7.2.1. Direcciones lógicas y direcciones físicas…………….. 22
1.7.2.2. Cálculo de direcciones físicas………………………… 23
1.7.2.3. Consulta directa………………………………………… 24
2.- FUNCIONES DE MANEJO DE ARCHIVOS EN
LENGUAJE C++…………............................................ 26
2.1. Declaración del alias del archivo…..…………………………………… 26
2.2. Funciones de manejo de archivos en C++…..………………………… 26
2.2.1. La función fopen() y modos de apertura de archivos……… 27
2.2.2. Validar la apertura de un archivo……………………………….. 28
2.2.3. Cierre de archivos usando fclose() y fcloseall()……... 29
2.2.4. Escritura de registros usando fwrite()……......................... 29
2.2.4.1. Vaciando los buffers con fflush()…………………. 31
2.2.5. Lectura de registros usando fread()…….............................. 31
2.2.6. Reposicionando el apuntador mediante fseek()……............ 31
2.2.6.1. Puntos de referencia de la función fseek()……….. 32
2.2.6.2. Conociendo la posición del apuntador del archivo
con la función ftell()………………………………... 34
2.2.6.3. Colocando el apuntador del archivo al principio con
la función rewind()…………………………………… 34
Ing. Bruno López Takeyas , M.C. 2
3. Manejo de Archivos en Lenguaje C++
2.2.7. Detectando el final del archivo con feof()……..................... 35
2.2.8. Cambiando nombres de archivos mediante rename()…….... 35
2.2.9. Eliminando archivos con la función remove()……................. 36
3.- APLICACIONES DE ARCHIVOS EN C++……………. 38
3.1. Declaraciones globales.........……....…………………………………… 38
3.2. Archivos secuenciales en Lenguaje C++……………………………… 39
3.2.1. ALTAS secuenciales……………….…………………………….. 40
3.2.1.1. Diagrama de flujo de la rutina de ALTAS
secuenciales.............................................................. 40
3.2.1.2. Codificación de la rutina de ALTAS secuenciales…... 42
3.2.2. CONSULTAS secuenciales.…….……………….……………… 43
3.2.2.1. Diagrama de flujo de la rutina de CONSULTAS
secuenciales.............................................................. 43
3.2.2.2. Codificación de la rutina de CONSULTAS
secuenciales….......................................................... 43
3.2.3. LISTADO secuencial............…….……………….……………… 44
3.2.3.1. Diagrama de flujo de la rutina de LISTADO
secuencial................................................................. 44
3.2.3.2. Codificación de la rutina de LISTADO secuencial...... 46
3.2.4. MODIFICACIONES de datos en un archivo secuencial........... 47
3.2.4.1. Diagrama de flujo de la rutina de MODIFICACION
secuencial................................................................. 47
3.2.4.2. Codificación de la rutina de MODIFICACIÓN
secuencial................................................................. 49
3.2.5. BAJAS de registros en un archivo secuencial (bajas ógicas y
bajas físicas)............................................................................ 50
3.2.5.1. Diagrama de flujo de la rutina de BAJAS lógicas en
un archivo secuencial................................................ 51
3.2.5.2. Codificación de la rutina de BAJAS lógicas en un
archivo secuencial..................................................... 53
3.2.5.3. Diagrama de flujo de la rutina de BAJAS físicas en
un archivo secuencial (compactar)............................ 54
3.2.5.4. Codificación de la rutina de BAJAS físicas en un
archivo secuencial (compactar)................................. 56
3.3. Archivos directos en Lenguaje C++………………………………......... 57
3.3.1. ALTAS directas........……………….…………………………….. 57
3.3.1.1. Diagrama de flujo de la rutina de ALTAS directas...... 57
3.3.1.2. Codificación de la rutina de ALTAS directas........…... 59
3.3.2. CONSULTAS directas..........…….……………….……………… 60
3.3.2.1. Diagrama de flujo de la rutina de CONSULTAS
directas...................................................................... 60
3.3.2.2. Codificación de la rutina de CONSULTAS directas.... 62
3.3.3. MODIFICACIONES directas..........…….……………….……..... 63
3.3.3.1. Diagrama de flujo de la rutina de
MODIFICACIONES directas..................................... 63
Ing. Bruno López Takeyas , M.C. 3
4. Manejo de Archivos en Lenguaje C++
3.3.3.2. Codificación de la rutina de MODIFICACIONES
directas...................................................................... 65
3.3.4. BAJAS de registros en un archivo de acceso directo (bajas
lógicas).................................................................................... 66
3.3.4.1. Diagrama de flujo de la rutina de BAJAS lógicas
directas...................................................................... 67
3.3.4.2. Codificación de la rutina de BAJAS lógicas directas.. 69
4.- CONCLUSIONES......................................……………. 71
5.-BIBLIOGRAFÍA..............................................…………. 72
Ing. Bruno López Takeyas , M.C. 4
5. Manejo de Archivos en Lenguaje C++
TABLA DE FIGURAS
No. Descripción Pág.
Interacción entre la memoria principal, el microprocesador y los
1
archivos…………………………………………………………………… 9
2 Formato del registro de Productos…………………………………….. 11
3 Declaración del registro de Productos………………………………… 11
4 Formato del registro de Productos…………………………………….. 12
5 Cuadro comparativo de archivos y archiveros……………………….. 13
6 Apertura de archivos……………………………………………………. 17
7 Clasificación de archivos por contenido………………………………. 18
8 Clasificación de archivos por tipo de acceso………………………… 20
9 Diagrama de flujo de rutina de consulta secuencial…………………. 21
10 Ejemplo de cálculo del espacio ocupado por un registro…………… 22
11 El lenguaje C++ maneja archivos con direcciones físicas………….. 23
12 Direcciones lógicas y físicas de un archivo…………………………... 23
13 Cálculo de la dirección física a partir de la dirección lógica………… 24
14 Diagrama de flujo de rutina de consulta directa……………………… 25
15 Modos de apertura para archivos de texto y binarios……………….. 27
16 La función fopen…………………………………………………………. 28
17 Validar la apertura de un archivo……………………………………… 29
18 La función fwrite…………………………………………………………. 30
19 Puntos de referencia de la función fseek……………………………... 33
20 La función fseek…………………………………………………………. 33
21 La función ftell…………………………………………………………… 34
22 La función rewind………………………………………………………... 34
23 La función rename………………………………………………………. 36
24 La función remove………………………………………………………. 37
25 Declaraciones globales de las aplicaciones………………………….. 39
26 Diagrama de flujo de rutina de alta secuencial………………………. 41
27 Codificación de la rutina de altas secuenciales……………………… 42
28 Codificación de la rutina de consultas secuenciales……………….. 43
29 Diagrama de flujo de rutina de listado secuencial…………………… 45
30 Codificación de la rutina de listado secuencial………………………. 46
31 Diagrama de flujo de rutina de modificación secuencial…………… 48
32 Codificación de rutina de modificación secuencial………………….. 49
33 Diagrama de flujo de rutina de baja lógica secuencial……………… 52
34 Codificación de rutina de baja lógica secuencial…………………….. 53
35 Diagrama de flujo de rutina de baja física secuencial (compactar)... 55
36 Codificación de rutina de baja física secuencial (compactar)………. 56
37 Diagrama de flujo de rutina de altas directas………………………… 58
38 Codificación de rutina de altas directas………………………………. 59
39 Diagrama de flujo de rutina de consultas directas…………………… 61
40 Codificación de rutina de consultas directas…………………………. 62
Ing. Bruno López Takeyas , M.C. 5
6. Manejo de Archivos en Lenguaje C++
41 Diagrama de flujo de rutina de modificación directa………………... 64
42 Codificación de rutina de modificaciones directas…………………… 65
43 Diagrama de flujo de rutina de baja lógica directa…………………... 68
44 Codificación de rutina de baja lógica directa…………………………. 69
Ing. Bruno López Takeyas , M.C. 6
7. Manejo de Archivos en Lenguaje C++
PREFACIO
Durante el tiempo que he impartido la materia de “Administración de
Archivos” en la carrera de Ingeniería en Sistemas Computacionales (ISC) en el
Instituto Tecnológico de Nuevo Laredo (ITNL), me he percatado de las deficiencias
de los alumnos para programar archivos y, aunque es necesario dominar este
aspecto de programación para aplicarlo en la materia, no es limitante o requisito
estricto para cursarla, ya que la retícula así lo señala. Además estoy enterado que
los temas de archivos pertenecen a la última unidad programática de las materias
previas de Programación I y II y que debido a lo extenso de esos programas de
estudio, no se comprenden completamente los temas relacionados con archivos.
Debido a lo anterior, presento este documento basado en un cúmulo de
experiencias y dudas planteadas por alumnos que tiene como finalidad reforzar los
conocimientos de programación de archivos en Lenguaje C++ para aplicarlos a
necesidades específicas de la materia “Administración de Archivos”.
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/takeyas
takeyas@itnuevolaredo.edu.mx
Ing. Bruno López Takeyas , M.C. 7
8. Manejo de Archivos en Lenguaje C++
1. CONCEPTOS BÁSICOS DE ARCHIVOS
Esta sección presenta las generalidades relacionadas con archivos antes de
empezar a utilizarlos y programarlos. Es necesario involucrarse con la
terminología relacionada como archivo, registro, campo, etc. También es
recomendable conocer las clasificaciones generales y las operaciones
fundamentales con archivos.
1.1. ¿Cómo surge la necesidad de utilizar
archivos?
Hasta antes de la materia de Administración de Archivos, muchas de las
aplicaciones que los alumnos de ISC han programado han sido usando la
memoria principal o memoria RAM como único medio de almacenamiento (usando
variables, arreglos o estructuras de datos mas complejas), con el inconveniente
que esto representa: la volatilidad de la memoria RAM; es decir, si se apaga la
computadora se pierden los datos. Además, algunas aplicaciones exigen
transportar los datos de una computadora a otra. De ahí surge la necesidad de
almacenar dichos datos de forma permanente que permita retenerlos en ciertos
dispositivos de almacenamiento secundario por un período de tiempo largo sin
necesidad de suministrarles energía, de tal forma que permitan transportarlos y
utilizarlos en otro equipo computacional.
Ing. Bruno López Takeyas , M.C. 8
9. Manejo de Archivos en Lenguaje C++
RAM
Recuerde:
¡¡¡ Los archivos
NO procesan
datos, sólo los
almacenan !!!
Microprocesador
Unidad Proceso de “grabar”
ALU de datos en el archivo
Control
Registros
Archivo
Proceso de “cargar”
datos a la memoria
Fig. 1. Interacción entre la memoria principal, el microprocesador y los archivos
1.2. Relación entre la memoria principal, el
microprocesador y dispositivos de
almacenamiento secundario
Existe una estrecha relación entre la memoria principal, el microprocesador y
los dispositivos de almacenamiento secundario ya que el procesamiento que
realiza una computadora es tarea absoluta del microprocesador en conjunción con
Ing. Bruno López Takeyas , M.C. 9
10. Manejo de Archivos en Lenguaje C++
la memoria principal; es decir, los dispositivos de almacenamiento secundario
(diskettes, discos duros, CDs, flash drives, etc.) no procesan datos, sólo los
almacenan. En estos dispositivos sólo se reflejan los datos previamente
procesados y funcionan exclusivamente como una bodega. Esto repercute de
manera significativa al momento de programar archivos, ya que para hacerle
modificaciones a los datos de un registro previamente almacenado es necesario
primero “cargarlo” en la memoria principal, es decir, localizar el registro en el
archivo y leerlo para colocar sus datos en la memoria RAM, ahí modificarlo y
posteriormente grabarlo en la misma posición en la que se encontraba, sin
embargo estas operaciones no se realizan directamente, sino a través de la
unidad aritmética-lógica, la unidad de control y los registros del microprocesador
(Fig. 1).
1.3. Definiciones de datos, registros y archivos
• Datos: Básicamente se refieren a los testimonios individuales relacionados
con hechos, ya sean características de ciertos objetos de estudio o
condiciones particulares de situaciones dadas. Los elementos individuales
de los archivos se llaman datos o campos. Por ejemplo un cheque de un
banco tiene los siguientes campos: Cuenta habiente, Número de cheque,
Fecha, Persona a la que se le paga, Monto numérico, Monto con letra,
Nota, Identificación del banco, Número de cuenta y Firma. Cada campo es
definido por un tipo de dato.
• Registro: Es el conjunto completo de datos relacionados pertenecientes a
una entrada. P. ejem. Un almacén puede retener los datos de sus
productos en registros de acuerdo al formato mostrado en la Fig. 2.
Ing. Bruno López Takeyas , M.C. 10
11. Manejo de Archivos en Lenguaje C++
No_prod Descrip Cantidad Precio Garantia
Entero Cadena [30] Entero Real Caracter
Fig. 2. Formato del registro de Productos
El registro de la Fig. 2 puede ser declarado globalmente (por encima de la
función main) el Lenguaje C++ utilizando struct (Fig. 3).
struct tipo_registro
Declaración del tipo de dato (en
{
este caso del tipo de registro)
int no_prod;
char descrip[30];
int cantidad;
Nótese la
float precio;
ubicación del
char garantia; símbolo ;
};
Declaración de la variable
“Registro” de tipo
struct tipo_registro Registro;
“tipo_registro”
Fig. 3. Declaración del registro de Productos.
• Archivo: En términos computacionales es una colección de datos que tiene
un nombre y se guardan en dispositivos de almacenamiento secundario, los
cuales pueden ser magnéticos, ópticos, electrónicos, etc. P. ejem.
Diskettes, discos duros, CD´s, ZIP drives, flash drives, memory sticks, etc.
P. ejem. La Fig. 4 muestra la estructura de un archivo con registros homogéneos
de Productos (con la misma estructura) declarados previamente (Fig. 3).
Ing. Bruno López Takeyas , M.C. 11
12. Manejo de Archivos en Lenguaje C++
Archivo: PRODUCTO.SEC
No_prod Descrip Cantidad Precio Garantia
0 “Camisa de vestir” 100 65.80 ‘N’
1 “Pantalón para dama” 234 115.50 ‘N’
Registros
2 “Radiograbadora” 36 895.75 ‘S’
3 “Gabinete para sala” 54 1532.60 ‘N’
Entero Cadena [30] Entero Real Caracter
Campos
Fig. 4. Formato del registro de Productos
1.4. Analogías de archivos y archiveros
El modo de operación de un archivo
puede ser asociado con el de un
archivero en una oficina, ya que
ambos almacenan datos y operan
de forma semejante. De tal forma
que muestran las siguientes
operaciones, acciones similares y
comparaciones:
Ing. Bruno López Takeyas , M.C. 12
13. Manejo de Archivos en Lenguaje C++
Operación o acción Archivero Archivo computacional
Localizando el archivero Identificando la base de
Identificar la localización en particular que contiene datos correspondiente a
de la información las carpetas con la la información que se
información que se solicita. Una base de
solicita, ya que una datos es una colección
oficina puede tener varios de archivos
archiveros debidamente relacionados. P. Ejem.
clasificados e Profesores, alumnos y
identificados materias están
correlacionados.
Regularmente un Se recomienda que los
Identificar el lugar exacto archivero contiene varios archivos contengan
donde se encuentra la cajones, cada uno con datos relacionados con
información información debidamente un objeto de interés en
clasificada y ordenada. particular y no de varios.
P. Ejem. Sólo datos de
ALUMNOS.
Ing. Bruno López Takeyas , M.C. 13
14. Manejo de Archivos en Lenguaje C++
Se pueden colocar Los nombres de los
Nombres etiquetas a los cajones de archivos están regidos
los archiveros para por el sistema operativo,
identificar su contenido de pero regularmente se
tal forma que indique el componen del nombre
contenido o la principal y su extensión,
clasificación de las la cual puede ser de
carpetas que contiene. cualquier tipo, es decir,
el usuario puede
colocarle la extensión
que desee ya sea DAT,
TXT, BIN, JK8, etc. Sin
embargo se recomienda
que tanto el nombre
como la extensión sean
relevantes al contenido
del archivo. P. Ejem.
ALUMNOS.DAT,
ARCHIVO.TXT
En un archivero se Básicamente un archivo
Operaciones pueden agregar, extraer o solo tiene 2 operaciones:
cambiar documentos de • Lectura
las carpetas. • Escritura
Las demás operaciones
se realizan como
consecuencia de éstas.
Ing. Bruno López Takeyas , M.C. 14
15. Manejo de Archivos en Lenguaje C++
Obviamente cuando se Para accesar los datos
Apertura requiere agregar o de un archivo es
consultar carpetas del necesario abrirlo. Existen
cajón de un archivero, es varios modos de
necesario primero abrirlo. apertura de los archivos
dependiendo de las
operaciones que se
deseen realizar en él.
Los cajones de los Los datos pueden ser
Clasificación de los datos archiveros tienen almacenados de muchas
separadores o pequeñas formas diferentes en los
pestañas para identificar archivos y de esto
las carpetas. Estas depende la facilidad (o
facilitan el acceso, ya sea dificultad) que el archivo
la inserción o la muestre para ciertas
extracción de un carpeta operaciones de acceso.
en particular. A estas formas de
almacenamiento se les
conoce como
“organización del
archivo”.
Ing. Bruno López Takeyas , M.C. 15
16. Manejo de Archivos en Lenguaje C++
Cuando ya no se desea Cuando se termina de
Cierre utilizar un cajón de un utilizar un archivo es
archivero es necesario necesario cerrarlo. De
cerrarlo, ya que de no esa forma se vacía la
hacerlo, se corre el riesgo memoria caché y se
de dañar o perder la asegura almacenar y
información. proteger los datos.
Algunos archiveros Dependiendo del
Seguridad cuentan con un candado sistema operativo, se
que permite asegurar los pueden aplicar
cajones de aperturas no restricciones de
deseadas por personal no seguridad y acceso a los
autorizado. archivos dependiendo de
los usuarios; es decir, se
establecen políticas de
acceso a usuarios.
Fig. 5. Cuadro comparativo de archivos y archiveros
1.5. Apertura de archivos
Antes de escribir o leer datos de un archivo es necesario abrirlo. Al abrir el
archivo se establece comunicación entre el programa y el sistema operativo a
cerca de cómo accesarlo. Es necesario que el programa le proporcione al sistema
operativo el nombre completo del archivo y la intención de uso (leer o escribir
datos), entonces se definen áreas de comunicación entre ellos. Una de estas
Ing. Bruno López Takeyas , M.C. 16
17. Manejo de Archivos en Lenguaje C++
áreas es una estructura que controla el archivo (alias del archivo), de esta forma
cuando se solicita una operación del archivo, se recibe una respuesta que informa
el resultado mediante un apuntador. Cada archivo abierto requiere un alias para
poder realizar operaciones en él (Fig.6).
La estructura del archivo contiene información del archivo que se está
usando, así como el tamaño actual y la localización de los buffers de datos.
Nombre de archivo
Lectura / Escritura
Programa de Sistema Operativo
archivos
Apuntador a
estruct. de archivo
(alias)
Las operaciones en
archivos se realizan
por medio de su alias.
Archivo
Fig. 6. Apertura de archivos
1.6. Clasificación de archivos por tipo de contenido
Existen muchas clasificaciones de archivos de acuerdo a diferentes criterios o
aplicaciones. Aquí se presenta una muy importante: de acuerdo al contenido.
Ing. Bruno López Takeyas , M.C. 17
18. Manejo de Archivos en Lenguaje C++
Texto
Clasificación de archivos por contenido
Binarios
Fig. 7 Clasificación de archivos por contenido
1.6.1. Archivos de texto
Son aquellos que pueden contener cualquier clase de datos y de tal manera
que son “entendibles” por la gente. Los datos en un archivo de texto se almacenan
usando el código ASCII, en el cual cada carácter es representado por un simple
byte. Debido a que los archivos de texto utilizan el código ASCII, se pueden
desplegar o imprimir. En este tipo de archivos, todos sus datos se almacenan
como cadenas de caracteres, es decir, los números se almacenan con su
representación ASCII y no su representación numérica, por lo tanto no se pueden
realizar operaciones matemáticas directamente con ellos. P. ejem. Si se guarda el
dato 3.141592 en un archivo de texto, se almacena como “3.141592” y nótese que
...
3.141592 ≠ “3.141592”
1.6.2. Archivos binarios
Este tipo de archivos almacenan los datos numéricos con su representación
binaria. Pueden ser archivos que contienen instrucciones en lenguaje máquina
Ing. Bruno López Takeyas , M.C. 18
19. Manejo de Archivos en Lenguaje C++
listas para ser ejecutadas. Por ejemplo, cuando escribimos un programa en un
lenguaje en particular (como C++, Pascal, Fortran, etc), tenemos las instrucciones
almacenadas en un archivo de texto llamado programa fuente, pero una vez que lo
sometemos a un proceso de compilación y ejecución nuestro programa lo
trasladamos a un programa ejecutable (en lenguaje máquina), que es
directamente entendido por la computadora y se crea un archivo binario. En este
tipo de archivos también se pueden almacenar diferentes tipos de datos
incluyendo datos numéricos; sin embargo, cabe destacar que los datos numéricos
se graban con su representación binaria (no con su representación ASCII), por tal
razón, cuando se despliegan con un editor de textos o por medio de comandos del
sistema operativo, aparecen caracteres raros que no se interpretan. P. ejem. Si se
guarda el dato 27 en un archivo binario, se almacena como 00001111 y no como
“27”.
1.7. Clasificación de archivos por tipo de acceso
De acuerdo a la forma de acceder los datos de los archivos, éstos se
clasifican en secuenciales o directos (también conocidos como de acceso directo,
relativos o aleatorios). En esta sección no se pretende analizar las diferentes
estructuras de datos involucradas en estas clasificaciones de archivos ni
desarrollar aplicaciones complejas debidamente diseñadas usándolos, sino
conocer esencialmente sus conceptos teóricos y la forma de manejarlos.
Ing. Bruno López Takeyas , M.C. 19
20. Manejo de Archivos en Lenguaje C++
Secuenciales
Clasificación de archivos por
tipo de acceso
Directos (relativos o aleatorios)
Fig. 8. Clasificación de archivos por tipo de acceso
1.7.1. Archivos secuenciales
Como su nombre lo indica, en este tipo de archivos los registros se graban en
secuencia o consecutivamente y deben accesarse de ese mismo modo, es decir,
conforme se van insertando nuevos registros, éstos se almacenan al final del
último registro almacenado; por lo tanto, cuando se desea consultar un registro
almacenado es necesario recorrer completamente el archivo leyendo cada registro
y comparándolo con el que se busca. En este tipo de archivo se utiliza una marca
invisible que el sistema operativo coloca al final de los archivos: EOF (End of File),
la cual sirve para identificar dónde termina el archivo
1.7.1.1. Consulta o recorrido secuencial
A continuación se muestra un diagrama de flujo de una rutina de consulta de
un registro en particular mediante un recorrido secuencial. En esta rutina se
maneja un archivo que almacena datos de productos (PRODUCTO.SEC) según el
registro declarado en la Fig. 3 y lo recorre completamente en forma secuencial
(registro por registro) hasta encontrar el producto solicitado (Fig. 7).
Ing. Bruno López Takeyas , M.C. 20
21. Manejo de Archivos en Lenguaje C++
CONSULTA SECUENCIAL Apertura del archivo y
asignación del alias
alias=OPEN
(“PRODUCTO.SEC”)
READ R
V “El archivo
alias= no existe” return
NULL
F
No prod
Lectura del registro
completo del archivo
controlado por alias
READ
(Registro,alias)
Ciclo mientras no se R
F encuentre el final del
WHILE archivo
NOT EOF
(alias) “No se encontró CLOSE
el registro” (alias)
V
Registro.no prod,
V Registro.descrip,
Registro.no_prod Registro.cantidad,
= Registro.precio
Registro.garantia
no_prod
F
Lectura del siguiente
registro completo
Fig. 9. Diagrama de flujo de rutina de consulta secuencial
Ing. Bruno López Takeyas , M.C. 21
22. Manejo de Archivos en Lenguaje C++
1.7.2. Archivos directos (relativos, de acceso directo o
aleatorios)
A diferencia de los archivos secuenciales, en los archivos directos no es
necesario recorrerlo completamente para acceder un registro en particular, sino se
puede colocar el apuntador interno del archivo directamente en el registro
deseado, permitiendo con esto mayor rapidez de acceso. Cabe destacar que para
reposicionar este apuntador se utiliza el comando SEEK indicándole la dirección
del registro que se desea.
1.7.2.1. Direcciones lógicas y direcciones físicas
El lenguaje C++ utiliza direcciones físicas para los archivos (a diferencia de
direcciones lógicas de otros lenguajes como PASCAL), esto es, que el
direccionamiento consiste en el espacio ocupado por los datos en el archivo
(calculado en bytes) no en el renglón al que se asignó dicho registro. P. ejem.
Suponga que tiene un archivo llamado “PRODUCTO.SEC” que almacena registros
con el formato mostrado en la Fig. 3. Dicho registro tiene cinco campos, cada uno
con un tipo de dato determinado, un tamaño específico y que al sumarlos se
obtiene el espacio ocupado por cada registro con este formato (Fig.10).
Campo Tipo de dato Tamaño en bytes
no_prod Int 2
Descrip char [30] 30
Cantidad int 2
Precio float 4
Garantia char 1
TOTAL 39
Fig. 10. Ejemplo de cálculo del espacio ocupado por un registro.
Ing. Bruno López Takeyas , M.C. 22
23. Manejo de Archivos en Lenguaje C++
Los archivos en Lenguaje C++ usan Calcule la dir. Física
direcciones físicas y no lógicas como antes de reposicionar
el apuntador del
en PASCAL. archivo
Fig.11. El lenguaje C++ maneja archivos con direcciones físicas
1.7.2.2. Cálculo de direcciones físicas
Para poder reposicionar el apuntador de un archivo en un registro específico
es necesario calcular su dirección física correspondiente de acuerdo al espacio
ocupado por sus registros predecesores.
Archivo: PRODUCTO.SEC
Dir. Dir.
Lóg. Fís. No_prod Descrip Cantidad Precio Garantia
0 0 0 “Camisa de vestir” 100 65.80 ‘N’
1 41 1 “Pantalón para dama” 234 115.50 ‘N’
2 82 2 “Radiograbadora” 36 895.75 ‘S’
3 123 3 “Gabinete para sala” 54 1532.60 ‘N’
4 164
5 205
Entero Cadena [30] Entero Real Caracter
Fig. 12. Direcciones lógicas y físicas de un archivo.
Ing. Bruno López Takeyas , M.C. 23
24. Manejo de Archivos en Lenguaje C++
De esta forma, para convertir direcciones lógicas en direcciones físicas se utiliza la
fórmula mostrada en la Fig. 13.
La función sizeof calcula el
long int dir_fisica, dir_logica; tamaño en bytes de una variable
o estructura
dir_fisica = dir_logica *sizeof(Registro)
Fig. 13. Cálculo de la dirección física a partir de la dirección lógica
1.7.2.3. Consulta directa
A continuación se muestra un diagrama de flujo de una rutina de consulta
directa de un registro en particular. En esta rutina se maneja el archivo
PRODUCTO.SEC según el registro declarado en la Fig. 3. A diferencia del
recorrido secuencial, en el que es necesario leer cada registro del archivo, en la
consulta directa se calcula la dirección física del registro solicitado y se posiciona
el apuntador del archivo directamente en ese registro para leerlo (Fig. 14).
Ing. Bruno López Takeyas , M.C. 24
25. Manejo de Archivos en Lenguaje C++
CONSULTA DIRECTA
alias=OPEN Apertura del archivo en
(“PRODUCTO.SEC”) modo sólo lectura y
READ asignación del alias
V “El archivo
alias= no existe” return
NULL
F
Validación de la
No prod existencia del
archivo
Cálculo de la
dir fisica=No prod*sizeof(Registro) dirección
física
SEEK
(dir_fisica,alias)
Posicionarse en la dirección
física
READ
(Registro,alias)
Registro.no prod,
Registro.descrip,
Registro.cantidad, Lectura del registro
Registro.precio,
Registro.garantia completo del archivo
controlado por alias
CLOSE
(alias)
Cierre del archivo
return
Fig. 14. Diagrama de flujo de rutina de consulta directa
Ing. Bruno López Takeyas , M.C. 25
26. Manejo de Archivos en Lenguaje C++
2. FUNCIONES DE MANEJO DE ARCHIVOS
EN LENGUAJE C++
Esta sección presenta los aspectos generales de la implementación de
programas de archivos en Lenguaje C++. Aunque se puede almacenar cualquier
tipo de datos en archivos, aquí se muestran las operaciones del manejo de
registros (struct) en archivos, por lo que las funciones que se mencionan a
continuación son las mas importantes para este tipo de datos.
2.1. Declaración del alias del archivo
Para realizar programas de manejo de archivos en Lenguaje C++ se requiere
el encabezado “Standard I/O” y se necesita incluirlo de la sig. forma:
#include <stdio.h>
además es necesario declarar una variable de tipo FILE que opere como el
apuntador a la estructura del archivo (alias), esto se logra con la sig. línea:
FILE *alias;
2.2. Funciones de manejo de archivos
En esta sección se presentan las funciones más importantes para el manejo y
control de registros en archivos.
Ing. Bruno López Takeyas , M.C. 26
27. Manejo de Archivos en Lenguaje C++
2.2.1 La función fopen() y modos de apertura de
archivos
Se usa la función fopen para abrir un archivo, determinar el modo de
apertura y establecer la vía de comunicación mediante su alias correspondiente.
Además determinar el tipo de contenido del archivo (texto o binario). Esta función
tiene dos argumentos: el nombre del archivo y su modo (Fig. 16). La Fig. 15
muestra los modos de apertura de archivos de texto y binarios.
Modo de Modo de
apertura apertura
Operación
(archivos de (archivos
texto) binarios)
Apertura en modo de sólo lectura. El archivo debe
“r” “rb”
existir.
Apertura en modo de sólo escritura. Si el archivo
“w” “wb” existe, se reescribirá (pierde el contenido anterior).
Si el archivo no existe, lo crea.
Apertura en modo de agregar. Si el archivo existe,
“a” “ab” los datos se agregan al final del archivo, en caso
contrario, el archivo se crea.
Apertura en modo de lectura/escritura. El archivo
“r+” “rb+”
debe existir.
Apertura en modo de lectura/escritura. Si el archivo
“w+” “wb+”
existe, se reescribirá (pierde el contenido anterior).
Apertura en modo de lectura/agregar. Si el archivo
“a+” “ab+”
no existe lo crea.
Fig. 15. Modos de apertura para archivos de texto y binarios.
Ing. Bruno López Takeyas , M.C. 27
28. Manejo de Archivos en Lenguaje C++
#include <stdio.h>
FILE *alias1, *alias2, *alias3; Abre el archivo binario
EJEMPLO.DAT en modo de sólo
lectura y lo asigna al apuntador
alias1 = fopen(“EJEMPLO.DAT”, “rb”);
alias2 = fopen(“ARCHIVO.TXT”, “ab”);
alias3 = fopen(“c:tareaPRODUCTO.005”, “w”);
Crea el archivo de texto
PRODUCTO.005 en modo de
Nótese que se necesitan dos ‘’ ya que sólo escritura y lo asigna al
el backslash indica el inicio de una apuntador alias3. El archivo lo
secuencia de escape en C++ crea en el subdirectorio c:tarea
Fig. 16. La función fopen
2.2.2. Validar la apertura de un archivo
Algunas funciones requieren la existencia del archivo para realizar operaciones,
por ello es necesario verificar que cuando se intenta abrir un archivo haya tenido
éxito la operación. Si un archivo no se puede abrir, la función fopen devuelve el
valor de 0 (cero), definido como NULL en stdio.h. La Fig. 17 muestra un ejemplo
de la manera de detectar la apertura de un archivo.
Ing. Bruno López Takeyas , M.C. 28
29. Manejo de Archivos en Lenguaje C++
#include <stdio.h>
FILE *alias;
alias = fopen(“EJEMPLO.DAT”, “rb”);
if (alias==NULL)
{
cout << “nr No se puede abrir el archivo !!!”;
getch();
return();
}
Fig. 17. Validar la apertura de un archivo.
2.2.3. Cierre de archivos usando fclose() y
fcloseall()
Antes de dejar de utilizar un archivo es necesario cerrarlo. Esto se logra
mediante las funciones fclose o fcloseall. Si se usa fclose es necesario
indicarle el alias del archivo que se desea cerrar. La función fcloseall cierra
todos los archivos abiertos.
2.2.4. Escritura de registros usando fwrite()
La función fwrite proporciona el mecanismo para almacenar todos los
campos de un registro en un archivo. Cabe destacar que al utilizar esta función, se
almacena una variable (de tipo struct) que representa un bloque de datos o
campos; es decir, no se almacena campo por campo. Esta función tiene cuatro
argumentos: la variable que se desea grabar, su tamaño en bytes, la cantidad de
variables y el alias del archivo donde se desea almacenar (Fig. 18).
#include <stdio.h>
Ing. Bruno López Takeyas , M.C. 29
30. Manejo de Archivos en Lenguaje C++
FILE *alias;
Declaración de la variable
struct tipo_registro “alias” (apuntador a una
{ estructura de archivos)
int no_prod;
char descrip[30];
int cantidad;
float precio;
char garantia;
};
Declaración de la variable
“Registro” de tipo
struct tipo_registro Registro;
“tipo_registro”
Variable que se desea
grabar (registro) Cantidad de registros que
Note la presencia de se desean grabar
‘&’
fwrite(&Registro, sizeof(Registro), 1, alias);
alias del
La función sizeof determina el archivo donde
tamaño en bytes del registro se desea grabar
La función fwrite graba el
registro en la dirección física
Fig. 18. La función fwrite
2.2.4.1. Vaciando los buffers con fflush()
Un buffer es un área de almacenamiento temporal en memoria para el
conjunto de datos leídos o escritos en el archivo. Estos buffers retienen datos en
tránsito desde y hacia al archivo y tienen la finalidad de hacer más eficiente las
Ing. Bruno López Takeyas , M.C. 30
31. Manejo de Archivos en Lenguaje C++
operaciones de entrada/salida en los archivos de disco, provocando menor
cantidad de accesos, los cuales son más lentos que la memoria. P. ejem. Si se
requiere consultar constantemente un dato del archivo, no es necesario calcular su
dirección física, reposicionar el apuntador del archivo, “cargar” el dato en memoria
mediante una operación de lectura cada vez que se necesita, sino que el sistema
operativo controla y mantiene este dato en los buffers de memoria y de ahí lo toma
cuando lo requiera. Sólo hay una consideración importante al utilizar los buffers,
los datos escritos en ellos no se reflejan exactamente en los archivos de disco en
forma inmediata, sino hasta que se “vacía” el buffer. Para ello se utiliza la función
fflush y basta enviarle el alias del archivo como argumento. Los buffers también
se vacían cuando se cierra el archivo.
2.2.5. Lectura de registros usando fread()
La función fread permite “cargar” todos los campos de un registro en un
archivo, es decir, lee un registro y lo copia en la memoria RAM (Fig. 1). Esta
función tiene los mismos argumentos que la función fwrite (Fig. 18).
2.2.6. Reposicionando el apuntador mediante fseek()
Para comprender la operación de esta función es necesario estar relacionado
con el apuntador del archivo, el cual indica la posición dentro del archivo. Cuando
se abre un archivo en modo de sólo lectura, sólo escritura o lectura/escritura, el
apuntador del archivo se posiciona al inicio del mismo y cuando un archivo se abre
en modo agregar se posiciona al final, sin embargo, se puede reposicionar este
apuntador del archivo mediante la función fseek. También es importante
mencionar que cada vez que se realiza una operación de lectura o de escritura de
cualquier tipo de datos (caracter, cadena, estructura, etc.), el apuntador del
archivo se mueve al final de dicho dato, de tal forma que está posicionado en el
Ing. Bruno López Takeyas , M.C. 31
32. Manejo de Archivos en Lenguaje C++
siguiente, por lo que es muy importante asegurarse que se encuentre en la
posición deseada antes de realizar cualquier operación.
Como se mencionó en las secciones 1.7.2.1. y 1.7.2.2., los archivos en
lenguaje C++ son controlados por direcciones físicas (no lógicas) indicadas en
bytes y la función fseek permite reposicionar el apuntador del archivo en la
dirección física deseada mediante tres argumentos: el alias del archivo, la
dirección física (en bytes) y el punto de referencia. Para poder reposicionar el
apuntador del archivo es necesario que éste se encuentre abierto y se le haya
asignado el alias correspondiente, también es necesario calcular la dirección física
donde se desea colocar (ver sección 1.7.2.2) e indicarle el punto de referencia de
donde se partirá en el conteo de la cantidad de bytes indicado por la dirección
física, los cuales pueden ser desde el principio, desde donde se encuentre el
apuntador del archivo y desde el final. La Fig. 20 ilustra mejor esto.
2.2.6.1. Puntos de referencia de la función fseek()
El último argumento de la función fseek es conocido como el punto de
referencia o el modo y se refiere desde dónde se iniciará el conteo de bytes
determinado por la dirección física
Ing. Bruno López Takeyas , M.C. 32
33. Manejo de Archivos en Lenguaje C++
• SEEK_SET
Puntos
de • SEEK_CUR
referencia • SEEK_END
Modo Nombre Operación
0 SEEK_SET Desde el principio del archivo
1 SEEK_CUR Desde la posición actual del
apuntador del archivo
2 SEEK_END Desde el final del archivo
Fig. 19. Puntos de referencia de la función fseek
alias del archivo donde se
desea reposicionar
fseek(alias, dir_fisica, SEEK_SET);
Dirección física del registro
donde se desea posicionar Punto de
(indicada en bytes) referencia
Se debe calcular la dirección física antes
de reposicionar el apuntador del archivo
Fig. 20. La función fseek
Ing. Bruno López Takeyas , M.C. 33
34. Manejo de Archivos en Lenguaje C++
2.2.6.2. Conociendo la posición del apuntador del archivo
con la función ftell()
Se usa la función ftell para conocer la posición actual del apuntador de un
archivo abierto. La posición se expresa en bytes (dirección física) contados desde
el principio del archivo (Fig. 21).
alias del
long int dir_fisica; archivo
dir_fisica = ftell(alias);
La variable dir_fisica
debe ser declarada
como long int
Fig. 21. La función ftell
2.2.6.3. Colocando el apuntador del archivo al principio
con la función rewind()
Se usa la función rewind para colocar el apuntador del archivo al principio de
un archivo abierto sin necesidad de usar la función fseek. Basta con enviar el
alias del archivo como argumento (Fig. 22).
Ing. Bruno López Takeyas , M.C. 34
35. Manejo de Archivos en Lenguaje C++
alias del
archivo
rewind(alias);
La función rewind devuelve
el apuntador del archivo al
principio sin necesidad de
la función fseek
Fig. 22. La función rewind
2.2.7. Detectando el final del archivo con feof()
Se usa el macro feof() (definido en stdio.h) para determinar si se ha
encontrado el final de un archivo. Si se encuentra el final de un archivo, devuelve
un valor diferente de cero y cero en caso contrario. Para invocarlo es necesario
colocar el alias del archivo abierto como argumento. Se utiliza mucho esta función
en recorridos de tipo secuencial (Ver sección 1.7.1).
2.2.8. Cambiando nombres de archivos mediante
rename()
Esta función tiene como objetivo cambiar el nombre de un archivo o
subdirectorio especificado por su ruta de acceso. Sólo necesita dos argumentos: el
nombre anterior del archivo y el nuevo nombre. Es importante destacar que esta
función sólo puede aplicarse a archivos cerrados.
Ing. Bruno López Takeyas , M.C. 35
36. Manejo de Archivos en Lenguaje C++
Nótese que se necesitan
Nuevo nombre del archivo
dos ‘’ ya que el
backslash indica el
inicio de una secuencia
rename(“c:tareaVIEJO.OLD”, “c:tareaNUEVO.NEW”);
Nombre anterior del archivo
(incluye la ruta)
La función rename sólo puede
aplicarse en archivos cerrados
Fig. 23. La función rename
2.2.9. Eliminando archivos con la función remove()
La función remove elimina definitivamente un archivo especificando su
nombre (Fig. 24). Es importante destacar que esta función sólo puede
aplicarse a archivos cerrados.
Ing. Bruno López Takeyas , M.C. 36
37. Manejo de Archivos en Lenguaje C++
Nombre del archivo que
Nótese que se necesitan se desea eliminar
dos ‘’ ya que el
backslash indica el
inicio de una secuencia
remove(“c:tareaVIEJO.OLD”);
La función remove sólo puede
aplicarse en archivos cerrados
Fig. 24. La función remove
Ing. Bruno López Takeyas , M.C. 37
38. Manejo de Archivos en Lenguaje C++
3. APLICACIONES DE ARCHIVOS EN C++
A continuación se presentan algunas de las aplicaciones prácticas más
comunes con archivos. Están basadas en los aspectos teóricos analizados en la
sección 1 y en las funciones de manejo de archivos en lenguaje C++ de la
segunda sección. Aquí se analizarán los procedimientos de inserción, consulta y
eliminación de registros tanto en archivos secuenciales como directos, así como el
listado secuencial. En ambos tipos de archivos se tratarán como archivos binarios.
Para apoyar el análisis, diseño e implementación de estas rutinas, se tomará
el ejemplo del control de PRODUCTOS que se mencionó anteriormente así como
la definición del registro de la Fig. 3.
En cada procedimiento se muestra el diagrama de flujo y la codificación
íntegra en lenguaje C++.
3.1. Declaraciones globales
Antes de analizar, diseñar e implementar las rutinas es necesario establecer
las consideraciones iniciales tales como el uso de los encabezados (*.h), las
declaraciones globales del registro de productos y el alias correspondiente. La fig.
25 muestra las declaraciones globales necesarias para estas aplicaciones. Para
efectos de identificación, se usará el nombre “PRODUCTO.SEC” para el archivo
secuencial y el nombre “PRODUCTO.DIR” para el archivo directo.
Ing. Bruno López Takeyas , M.C. 38
39. Manejo de Archivos en Lenguaje C++
#include <stdio.h> // Para el manejo de archivos
#include <string.h> // Para el manejo de cadenas
#include <conio.h> // Para el manejo de clrscr
#include <iostream.h> // Para el manejo de cout
#include <ctype.h> // Para el uso de toupper
struct tipo_registro
{ Declaración del tipo de dato (en
este caso del tipo de registro)
int no_prod;
char descrip[30];
int cantidad;
float precio;
char garantia;
};
Declaración de la variable
struct tipo_registro Registro; “Registro” de tipo
“tipo_registro”
FILE *alias;
void main(void)
{
…………….
}
Fig. 25. Declaraciones globales de las aplicaciones
3.2. Archivos Secuenciales en Lenguaje C++
En esta sección se analizará la manera de diseñar rutinas que manipulen
registros de productos o artículos en un archivo secuencial. Como su nombre lo
indica, en este tipo de archivo se hace un recorrido secuencial para localizar la
dirección del registro solicitado, es decir, se lee registro por registro hasta llegar al
deseado.
Ing. Bruno López Takeyas , M.C. 39
40. Manejo de Archivos en Lenguaje C++
3.2.1. Altas Secuenciales
Aquí se presenta una rutina que inserta registros de productos en un archivo
secuencial. Se considera un número de producto (campo no_prod) que servirá
como referencia para identificarlo y diferenciarlo de otros productos y no se
permite que se graben dos productos diferentes con el mismo número, por lo que
es necesario realizar un recorrido secuencial completo del archivo para
asegurarse que no haya duplicados.
La primera ocasión que se intente insertar registros en un archivo, éste debe
crearse; sin embargo debe cuidarse no crear el archivo cada vez que se
invoque esta rutina porque debe tenerse presente que si se crea un archivo
existente, se pierde su contenido anterior.
3.2.1.1. Diagrama de flujo de la rutina de Altas
Secuenciales
La Fig. 26 ilustra el diagrama de flujo de la rutina de altas en un archivo
secuencial.
Ing. Bruno López Takeyas , M.C. 40
41. Manejo de Archivos en Lenguaje C++
ALTA SECUENCIAL Apertura del archivo
y asignación del alias
alias=OPEN
(“PRODUCTO.SEC”)
READ/WRITE Creación del archivo
V alias=OPEN
alias= (“PRODUCTO.SEC”)
NULL WRITE
F
no prod
READ
(Registro,alias) Ciclo mientras no se
encuentre el final del
archivo
F
WHILE
NOT EOF Registro.no_prod
Registro.descrip,
(alias) Registro.cantidad, =
Registro.precio no_prod
Registro.garantia
V
V WRITE
Registro.no_prod “Registro (Registro,
= duplicado” alias)
no_prod
F CLOSE
(alias)
READ
(Registro,alias)
return
Fig. 26. Diagrama de flujo de rutina de alta secuencial
Ing. Bruno López Takeyas , M.C. 41
42. Manejo de Archivos en Lenguaje C++
3.2.1.2. Codificación de la rutina de ALTAS secuenciales
La Fig. 27 muestra el código de la rutina de ALTAS secuenciales de acuerdo al
diagrama de la Fig. 26.
void ALTA_SECUENCIAL(void)
{
int no_prod; // Variable local para el numero de producto
clrscr();
cout << "nrALTAS DE REGISTROS DE PRODUCTOS";
alias=fopen("PRODUCTO.SEC","rb+"); // Intenta abrir el archivo
// en modo de lectura/escritura
if(alias==NULL)
alias=fopen("PRODUCTO.SEC","wb"); // Crea el archivo en caso de no
// existir
cout << "nnnrNumero de producto: "; cin >> no_prod;
fread(&Registro,sizeof(Registro),1,alias);
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias)) // Ciclo mientras no se encuentre el final del
// archivo
{
if(Registro.no_prod==no_prod)
{
cout << "nnnrRegistro duplicado !!!";
fclose(alias);
getch();
return;
}
fread(&Registro,sizeof(Registro),1,alias);
}
cout << "nrDescripcion: "; gets(Registro.descrip);
cout << "nrCantidad : "; cin >> Registro.cantidad;
cout << "nrPrecio : "; cin >> Registro.precio;
do
{
cout << "nrGarantia : "; Registro.garantia=toupper(getche());
}while(Registro.garantia!='S' && Registro.garantia!='N');
Registro.no_prod=no_prod;
fwrite(&Registro,sizeof(Registro),1,alias); // Grabar el Registro
fclose(alias); // Cierra el archivo
cout << "nnnrProducto registrado !!!";
cout << "nr<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
Fig. 27. Codificación de la rutina de altas secuenciales
Ing. Bruno López Takeyas , M.C. 42
43. Manejo de Archivos en Lenguaje C++
3.2.2. CONSULTAS secuenciales
En esta sección se analiza una rutina que busca un registro particular de un
producto en un archivo secuencial. En este tipo de archivo se inicia el recorrido
desde el primer registro almacenado y se detiene cuando se localiza el registro
solicitado o cuando se encuentre el final del archivo.
3.2.2.1. Diagrama de flujo de la rutina de CONSULTAS
secuenciales
El diagrama de flujo de esta rutina se planteó en la sección 1.7.1.1 y se
muestra en la Fig. 9.
3.3.2.2. Codificación de la rutina de CONSULTAS
secuenciales
La Fig. 28 muestra el código de la rutina de CONSULTAS secuenciales de
acuerdo al diagrama de la Fig. 7.
void CONSULTA_SECUENCIAL(void)
{
int no_prod;
clrscr();
cout << "nrCONSULTA DE REGISTROS DE PRODUCTOS";
alias=fopen("PRODUCTO.SEC","rb"); // Intenta abrir el archivo
PRODUCTO.SEC
// en modo de solo lectura
if(alias==NULL)
{
cout << "nnnrNo existe el archivo !!!";
cout << "nr<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
cout << "nnnrNumero de producto: "; cin >> no_prod;
fread(&Registro,sizeof(Registro),1,alias);
Ing. Bruno López Takeyas , M.C. 43
44. Manejo de Archivos en Lenguaje C++
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias))
{
if(Registro.no_prod==no_prod)
{
cout << "nrNo Prod Descripcion Cantidad
Precio Garantia";
cout << "nr------------------------------------------------------
------------------";
printf("nr%3dt%30st%3dtt$%4.2ft%c",Registro.no_prod,Registro.descr
ip,
Registro.cantidad,Registro.precio,Registro.garantia);
fclose(alias);
cout << "nr<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
fread(&Registro,sizeof(Registro),1,alias);
}
cout << "nrNo se encuentra ese registro !!!";
fclose(alias); // Cierra el archivo
cout << "nr<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
Fig. 28. Codificación de la rutina de consultas secuenciales
3.2.3. LISTADO secuencial
Esta rutina es muy semejante a la de CONSULTAS secuenciales, solo que
en el LISTADO se despliegan todos los registros lógicos que contiene el archivo.
En este tipo de archivo se inicia el recorrido desde el primer registro almacenado y
se detiene cuando se encuentre el final del archivo.
3.2.3.1. Diagrama de flujo de la rutina de LISTADO
secuencial
El diagrama de flujo de esta rutina se muestra en la Fig. 29.
Ing. Bruno López Takeyas , M.C. 44
45. Manejo de Archivos en Lenguaje C++
LISTADO SECUENCIAL Apertura del archivo y
asignación del alias
alias=OPEN
(“PRODUCTO.SEC”)
READ R
V “El archivo
alias= no existe” return
NULL
F
Lectura del registro
completo del archivo
controlado por alias
READ
(Registro,alias)
Ciclo mientras no se R
F encuentre el final del
WHILE archivo
NOT EOF
(alias) CLOSE
“Fin del listado” (alias)
V
Registro.no prod,
Registro.descrip,
Registro.cantidad,
Registro.precio
Registro.garantia
READ
(Registro,alias)
Lectura del siguiente
registro completo
Fig. 29. Diagrama de flujo de rutina de listado secuencial
Ing. Bruno López Takeyas , M.C. 45
46. Manejo de Archivos en Lenguaje C++
3.3.3.2. Codificación de la rutina de LISTADO secuencial
La Fig. 30 muestra el código de la rutina de LISTADO secuencial de acuerdo
al diagrama de la Fig. 29.
void LISTADO_SECUENCIAL(void)
{
clrscr();
cout << "nrLISTADO DE REGISTROS DE PRODUCTOS";
alias=fopen("PRODUCTO.SEC","rb"); // Intenta abrir el archivo
PRODUCTO.SEC
// en modo de solo lectura
if(alias==NULL)
{
cout << "nnnrNo existe el archivo !!!";
cout << "nr<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
cout << "nrNo Prod Descripcion Cantidad
Precio Garantia";
cout << "nr----------------------------------------------------------
--------------";
fread(&Registro,sizeof(Registro),1,alias);
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias)) // Ciclo mientras no se encuentre el final del
archivo
{
printf("nr%3dt%30st%3dtt$%4.2ft%c",Registro.no_prod,Registro.descr
ip,
Registro.cantidad,Registro.precio,Registro.garantia);
fread(&Registro,sizeof(Registro),1,alias);
}
fclose(alias); // Cierra el archivo
cout << "nr----------------------------------------------------------
--------------";
cout << "nrFin del listado !!!";
cout << "nr<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
Fig. 30. Codificación de la rutina de listado secuencial
Ing. Bruno López Takeyas , M.C. 46
47. Manejo de Archivos en Lenguaje C++
3.2.4. MODIFICACIONES de datos en un archivo
secuencial
La forma de modificar el contenido de los campos de registros de un archivo,
depende mucho de la rutina de consulta, ya que es necesario localizar
previamente el registro que se desea modificar, capturar los nuevos valores y
posteriormente grabar el registro completo en la misma posición que se
encontraba. Esto último es muy importante porque recuerde que cuando se
termina de leer un registro del archivo, el apuntador se posiciona al inicio del
siguiente registro, por lo que, antes de grabar el registro modificado, es necesario
reposicionar el apuntador del archivo en la dirección correcta.
3.2.4.1. Diagrama de flujo de la rutina de MODIFICACIÓN
secuencial
La Fig. 31 muestra el diagrama de flujo de la rutina de modificaciones de
campos de un registro particular en un archivo secuencial.
Ing. Bruno López Takeyas , M.C. 47
48. Manejo de Archivos en Lenguaje C++
MODIFICACION SECUENCIAL Apertura del archivo y
asignación del alias
alias=OPEN
(“PRODUCTO.SEC”)
READ/WRITE R
V “El archivo
alias= no existe” return
NULL
F
No prod
Lectura del registro
completo del archivo
controlado por alias
READ
(Registro,alias)
Ciclo mientras no se R
F encuentre el final del
WHILE archivo
NOT EOF
(alias) “No se encontró CLOSE
el registro” (alias)
V
V Registro.descrip,
Registro.no_prod Registro.cantidad,
= Registro.precio
no_prod Registro.garantia
SEEK
F (FTELL(alias)-
sizeof(Registro)
,alias)
READ
(Registro,alias)
WRITE
(Registro,alias)
Fig. 31. Diagrama de flujo de rutina de modificación secuencial
Ing. Bruno López Takeyas , M.C. 48
49. Manejo de Archivos en Lenguaje C++
3.2.4.2. Codificación de la rutina de MODIFICACIÓN
secuencial
La Fig. 32 muestra la codificación de la rutina de modificaciones de campos
de un registro particular en un archivo secuencial.
void MODIFICACION_SECUENCIAL(void)
{
int no_prod; // Variable local para el numero de producto que desea
modificar
clrscr();
cout << "nrMODIFICACION DE REGISTROS DE PRODUCTOS";
alias=fopen("PRODUCTO.SEC","rb+"); // Intenta abrir el archivo
PRODUCTO.SEC
// en modo de lectura/escritura
if(alias==NULL) // Valida la existencia del archivo
{
cout << "nnnrNo existe el archivo !!!";
cout << "nr<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
cout << "nnnrNumero de producto: "; cin >> no_prod;
fread(&Registro,sizeof(Registro),1,alias);
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias)) // Ciclo mientras no se encuentre el final del
archivo
{
if(Registro.no_prod==no_prod)
{
cout << "nrNo Prod Descripcion Cantidad
Precio Garantia";
cout << "nr------------------------------------------------------
------------------";
printf("nr%3dt%30st%3dtt$%4.2ft%c",Registro.no_prod,Registro.descr
ip,
Registro.cantidad,Registro.precio,Registro.garantia);
cout << "nnnrAnote los nuevos datos ...";
cout << "nrDescripcion: "; gets(Registro.descrip);
cout << "nrCantidad : "; cin >> Registro.cantidad;
cout << "nrPrecio : "; cin >> Registro.precio;
do
{
cout << "nrGarantia : "; Registro.garantia=toupper(getche());
}while(Registro.garantia!='S' && Registro.garantia!='N');
// Es necesario reposicionar el apuntador del archivo al principio
Ing. Bruno López Takeyas , M.C. 49
50. Manejo de Archivos en Lenguaje C++
del
// registro que desea modificar, ya que al leer un registro, el
// apuntador se posiciona en el registro siguiente
// La funcion ftell(alias) devuelve la posicion donde se encuentra
el
// apuntador
fseek(alias,ftell(alias)-sizeof(Registro),SEEK_SET);
fwrite(&Registro,sizeof(Registro),1,alias); // Graba el registro
con
// los nuevos campos
fclose(alias); // Cierra el archivo
cout << "nnnrRegistro modificado !!!";
cout << "nr<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
fread(&Registro,sizeof(Registro),1,alias);
}
cout << "nrNo se encuentra ese registro !!!";
fclose(alias); // Cierra el archivo
cout << "nr<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
Fig. 32. Codificación de rutina de modificación secuencial
3.2.5. Bajas de registros en un archivo secuencial (bajas
lógicas y bajas físicas)
Básicamente existen dos formas de eliminar registros en un archivo: lógica y
físicamente. La diferencia radica en que cuando se elimina un registro en forma
lógica de un archivo, sólo se le coloca una marca especial en alguno de sus
campos que lo identifique como registro “borrado”, sin embargo, el registro sigue
existiendo en el archivo y por lo tanto ocupa espacio. En cambio en la baja física
de registros, se elabora una rutina que elimine físicamente el registro del archivo,
es decir, que el archivo solo conserve los registros válidos. Las bajas físicas
también son conocidas como rutinas de compactación o compresión del archivo.
Ing. Bruno López Takeyas , M.C. 50
51. Manejo de Archivos en Lenguaje C++
3.2.5.1. Diagrama de flujo de la rutina de BAJAS lógicas
en un archivo secuencial
Como se mencionó en el punto anterior, las bajas lógicas consisten en
“marcar” los registros eliminados. En el ejemplo práctico que se muestra a
continuación, el registro borrado se “limpia”, dejando en blanco todos sus campos
(colocando el valor cero en los campos numéricos y blancos en las cadenas o de
tipo carácter).
Para fines prácticos, la rutina de bajas lógicas se asemeja mucho a la rutina
de modificaciones, sólo que en las bajas no se capturan los nuevos valores, sino
se les asigna valores en blanco y se graba el registro completo en la misma
posición en la que se encontraba. El diagrama de la Fig. 33 muestra esta rutina.
Ing. Bruno López Takeyas , M.C. 51
52. Manejo de Archivos en Lenguaje C++
BAJA_LOGICA_SECUENCIAL Apertura del archivo y
asignación del alias
alias=OPEN
(“PRODUCTO.SEC”)
READ/WRITE R
V “El archivo
alias= no existe” return
NULL
F
No_prod
Lectura del registro
completo del archivo
controlado por alias
READ
(Registro,alias)
R
F
WHILE
NOT EOF
(alias) “No se encontró CLOSE
el registro” (alias)
V
Registro.no prod=0
V Registro.descrip=””
Registro.no_prod Registro.cantidad=0
= Registro.precio=0.0
no_prod Registro.garantia=’’
SEEK
F (FTELL(alias)-
sizeof(Registro)
,alias)
READ
(Registro,alias)
WRITE
(Registro,alias)
Fig. 33. Diagrama de flujo de rutina de baja lógica secuencial
Ing. Bruno López Takeyas , M.C. 52
53. Manejo de Archivos en Lenguaje C++
3.2.5.2. Codificación de la rutina de BAJAS lógicas en un
archivo secuencial
La Fig. 34 muestra la codificación íntegra de esta rutina.
void BAJA_LOGICA_SECUENCIAL(void)
{
int no_prod; // Variable local para el numero de producto que desea
eliminar
char op; //Variable local
clrscr();
cout << "nrBAJAS LOGICAS DE REGISTROS DE PRODUCTOS";
alias=fopen("PRODUCTO.SEC","rb+"); // Intenta abrir el archivo
PRODUCTO.SEC
// en modo de lectura/escritura
if(alias==NULL) // Valida la existencia del archivo
{
cout << "nnnrNo existe el archivo !!!";
cout << "nr<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
cout << "nnnrNumero de producto: "; cin >> no_prod;
fread(&Registro,sizeof(Registro),1,alias);
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias)) // Ciclo mientras no se encuentre el final del
archivo
{
if(Registro.no_prod==no_prod)
{
cout << "nrNo Prod Descripcion Cantidad
Precio Garantia";
cout << "nr------------------------------------------------------
------------------";
printf("nr%3dt%30st%3dtt$%4.2ft%c",Registro.no_prod,Registro.descr
ip,Registro.cantidad,Registro.precio,Registro.garantia);
Registro.no_prod=0;
strcpy(Registro.descrip,"");
Registro.cantidad=0;
Registro.precio=0.0;
Registro.garantia=' ';
do {
cout << "nnrEsta seguro que desea borrarlo? [S/N] ---> ";
op=toupper(getche());
}while(op!='S' && op!='N');
if(op=='S')
Ing. Bruno López Takeyas , M.C. 53
54. Manejo de Archivos en Lenguaje C++
{
// Es necesario reposicionar el apuntador del archivo al principio
del
// registro que desea modificar, ya que al leer un registro, el
// apuntador se posiciona en el registro siguiente
// La funcion ftell(alias) devuelve la posicion donde se encuentra
el
// apuntador
fseek(alias,ftell(alias)-sizeof(Registro),SEEK_SET);
fwrite(&Registro,sizeof(Registro),1,alias); // Graba el registro
con
// los nuevos campos
cout << "nnnrRegistro eliminado !!!";
}
fclose(alias); // Cierra el archivo
cout << "nr<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
fread(&Registro,sizeof(Registro),1,alias);
}
cout << "nrNo se encuentra ese registro !!!";
fclose(alias); // Cierra el archivo
cout << "nr<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
Fig. 34. Codificación de rutina de baja lógica secuencial
3.2.5.3. Diagrama de flujo de la rutina de BAJAS físicas
en un archivo secuencial (compactar)
La rutina de bajas físicas (también conocida como compactar el archivo),
consiste en eliminar definitivamente los espacios dejados por los registros
borrados lógicamente. Cuando se elimina un registro en forma lógica dejando en
blanco sus campos, sigue ocupando espacio en el archivo, sin embargo se puede
diseñar una rutina que se apoye de un archivo auxiliar (también secuencial), en el
cual se graben todos los registros válidos, es decir, los registros no eliminados,
para posteriormente eliminar el archivo original y renombrar este archivo auxiliar
como el archivo original. La Fig. 35 muestra este diagrama de flujo.
Ing. Bruno López Takeyas , M.C. 54
55. Manejo de Archivos en Lenguaje C++
BAJA_FISICA_SECUENCIAL Apertura del archivo y
asignación del alias
alias=OPEN
(“PRODUCTO.SEC”)
READ R
V “El archivo
alias= no existe” return
NULL
F Creación del archivo
temporal=OPEN temporal
(“TEMPORAL.TMP”)
WRITE
R
READ
(Registro,alias)
RENAME
“TEMPORAL.TMP”
AS
“PRODUCTO.SEC”
F
WHILE
NOT EOF
(alias) CLOSEALL DELETE
(“PRODUCTO.SEC”)
V
V
Registro.no_prod
<>
0
F
READ
(Registro,alias)
Grabar el registro en el
archivo temporal
Fig. 35. Diagrama de flujo de rutina de baja física secuencial (compactar)
Ing. Bruno López Takeyas , M.C. 55