2011 clase19

20
Algorítmica y Programación I Archivos : procesamiento Archivos en Ada

Upload: patriciau

Post on 26-Jul-2015

138 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 2011 clase19

Algorítmica y Programación I

Archivos : procesamiento

Archivos en Ada

Page 2: 2011 clase19

Algorítmica y Programación I

Apareo de archivos (mezclarlos respetando el orden).

Consiste en intercalar información de dos o más archivos, donde cada uno debe estar

ordenado previamente en el mismo orden y bajo la misma clave.

ABM de archivos (Altas, Bajas y Modificaciones de información en un archivo).

Los tipos de archivos que estamos estudiando son una fuente de información, y como tal,

necesitamos mantenerla actualizada. La actualización implica agregar, borrar o modificar la

información que se encuentra en un archivo.

Ordenamiento de un archivo, Búsqueda.

Para ordenar un archivo lo “bajamos” a memoria, a un vector de registros, lo ordenamos

como se ordena un vector de registros, y luego lo “subimos” a disco. Las búsquedas se

pueden realizar sobre el dispositivo, o más rápidamente en la memoria.

Procesos

Page 3: 2011 clase19

Algorítmica y Programación I

Apareo de Archivos

Veremos este modelo de procesamiento al estudiar en la próxima clase los cortes de control.

Archivo

MaestroArchivo de

Detalles

Impresión 1

Page 4: 2011 clase19

Algorítmica y Programación I

Archivo1 Archivo2 Archivon

Archivo=Archivo1 U Archivo2 U ……

Archivon

…………

Page 5: 2011 clase19

Algorítmica y Programación I

345 zapatos 80 90 122

357 toallas 600 800 32

368 manteles 150 160 63

371 harina 2300 5000 8

375 jabon 2500 2800 9

380 esponja 1200 1300 3

384 lavandina 3000 4500 5

389 tijeras 50 80 12

393 semillas 120 300 13

398 regador 120 200 10

402 fertilizante 200 356 32

407 cubierta 100 134 456

413 almohada 200 345 15

427 delantal 250 456 21

433 pañales 2000 5000 23

Clave Descripcion SM SA PU

Mercaderia

SM: stock mínimo

SA : stock actual

PU : Precio unitario

PA: precio actual

Clave PA

345 135

371 9

375 11

380 5

389 14

393 17

402 36

407 467

427 24

433 27

Precios_nuevos

ABM

Page 6: 2011 clase19

Algorítmica y Programación I

345 zapatos 80 90 135

357 toallas 600 800 32

368 manteles 150 160 63

371 harina 2300 5000 9

375 jabon 2500 2800 11

380 esponja 1200 1300 5

384 lavandina 3000 4500 5

389 tijeras 50 80 14

393 semillas 120 300 17

398 regador 120 200 10

402 fertilizante 200 356 36

407 cubierta 100 134 467

413 almohada 200 345 15

427 delantal 250 456 24

433 pañales 2000 5000 27

Clave Descripcion SM SA PU

Mercaderia

Resultado de

modificaciones a

Mercadería con

Precios_nuevos

SM: stock mínimo

SA : stock actual

PU : Precio unitario

ABM

Page 7: 2011 clase19

Algorítmica y Programación I

345 zapatos 80 90 122

357 toallas 600 800 32

368 manteles 150 160 63

371 harina 2300 5000 8

375 jabon 2500 2800 9

380 esponja 1200 1300 3

384 lavandina 3000 4500 5

389 tijeras 50 80 12

393 semillas 120 300 13

398 regador 120 200 10

402 fertilizante 200 356 32

407 cubierta 100 134 456

413 almohada 200 345 15

427 delantal 250 456 21

433 pañales 2000 5000 23

Clave Descripcion SM SA PU

Mercaderia

Clave

357

384

389

398

413

BajasSM: stock mínimo

SA : stock actual

PU : Precio unitario

PA: precio actual

ABM

Page 8: 2011 clase19

Algorítmica y Programación I

345 zapatos 80 90 122

368 manteles 150 160 63

371 harina 2300 5000 8

375 jabon 2500 2800 9

380 esponja 1200 1300 3

393 semillas 120 300 13

402 fertilizante 200 356 32

407 cubierta 100 134 456

427 delantal 250 456 21

433 pañales 2000 5000 23

Mercaderia

Resultado de

modificaciones a

Mercadería con

bajas de claves

SM: stock mínimo

SA : stock actual

PU : Precio unitario

ABMClave Descripcion SM SA PU

Page 9: 2011 clase19

Algorítmica y Programación I

345 zapatos 80 90 122

368 manteles 150 160 63

371 harina 2300 5000 8

375 jabon 2500 2800 9

380 esponja 1200 1300 3

393 semillas 120 300 13

402 fertilizante 200 356 32

407 cubierta 100 134 456

427 delantal 250 456 21

433 pañales 2000 5000 23

Clave Descripcion SM SA PU

Mer

cad

eria

SM: stock mínimo

SA : stock actual

PU : Precio unitario

348 zapatilla 80 900 11

3

370 rejilla 150 800 12

382 semola 100 245 7

456 maiz 200 450 4

467 arroz 560 899 5

480 fideos 400 800 3

Clav

e

Descripci

on

SM SA P

U

Altas

ABM

Page 10: 2011 clase19

Algorítmica y Programación I

345 zapatos 80 90 122

348 zapatilla 80 900 113

368 manteles 150 160 63

370 rejilla 150 800 12

371 harina 2300 5000 8

375 jabon 2500 2800 9

380 esponja 1200 1300 3

382 semola 100 245 7

393 semillas 120 300 13

402 fertilizante 200 356 32

407 cubierta 100 134 456

427 delantal 250 456 21

433 pañales 2000 5000 23

456 maiz 200 450 4

467 arroz 560 899 5

480 fideos 400 800 3

Clave Descripcion SM SA PU

Mercaderia

SM: stock mínimo

SA : stock actual

PU : Precio unitario

PA: precio actual

Resultado de

modificaciones a

Mercadería con

altas de claves y

datos

ABM

Page 11: 2011 clase19

Archivos en ADA

Page 12: 2011 clase19

Algorítmica y Programación I

Nosotros restringiremos nuestro estudio a los archivos secuenciales, de los que a continuación veremos la sintaxis y requisitos formales para su aplicación:

Los elementos necesarios para manejar archivos secuenciales se encuentran en el paquete "Sequential_IO".

with Ada.Sequential_IO;

Declaración

Para poder usar archivos secuenciales se deben definir previamente el tipo de sus componentes

type TPersona is

record

Nombre : string(1..20);

DNI : string(1..10);

Edad : natural;

end record;

Una vez definido el tipo, se definen instancias de los paquetes de manejo de archivos, según el tipo de acceso que se vaya a utilizar.

package ArchTPersona_Sec is new Ada.Sequential_IO(TPersona); - - Acceso secuencial

use ArchTPersona_Sec;

Page 13: 2011 clase19

Algorítmica y Programación I

Ahora se pueden declarar variables de tipo archivo secuencial:

MiArchivo : ArchTPersona_Sec.tipo_archivo;

Creación de archivo secuencial

Create ( File => <nombre de variable >, Mode => Out_File, -- por defecto Name => "<nombre de archivo externo>" );

<nombre de variable > -- el nombre de la variable archivo

<external file name> - - el nombre del archivo externo (físico).

Ejemplo :

Create ( File => MiArchivo,

Mode => Out_File,

Name => "c:\ MiArchivo.dat" );

Page 14: 2011 clase19

Algorítmica y Programación I

Apertura de archivo secuencial

Open ( File => <nombre de variable >, Mode => In_File, Name => "<nombre de archivo externo>" );

<nombre de variable > - el nombre de la variable archivo

<external file name> - el nombre del archivo externo (físico).

Ejemplo :

Open ( File => MiArchivo,

Mode => In_File,

Name => "c:\ MiArchivo.dat" );

• Mode es el modo de apertura (puede tomar los valores: "In_File", "Out_File", "Append_File").

• In_File abre el archivo en modo lectura.

• Out_File abre el archivo en modo escritura (si el fichero ya existe, se vacía).

• Append_File abre un archivo secuencial en modo escritura paraañadir información al final.

Page 15: 2011 clase19

Algorítmica y Programación I

Cierre de archivo secuencial

Close ( File => < nombre de variable > );

<nombre de variable> - el nombre de la variable archivo.

Ejemplo :Close ( File => MiArchivo);

Operaciones de entrada/salida : Read y Write

Read( File => < nombre de variable >, Item => < nombre componente>);

<nombre de variable> - es el nombre de la variable archivo.

< nombre componente> Nombre del componente del archivo que se lee desde éste.

Write( File => < nombre de variable >, Item => < nombre componente>);

<nombre de variable> - es el nombre de la variable archivo.

< nombre componente> Nombre del componente del archivo que se graba en éste.

Page 16: 2011 clase19

Algorítmica y Programación I

End_Of_File(Archivo1) es una función que devuelve True si se ha alcanzado el final de Archivo1 y False en caso contrario.

Is_Open(Archivo1) devuelve True si el archivo "Archivo1" está abierto y "False" en caso contrario.

Mode(Archivo1) devuelve el modo en que ha sido abierto el archivo.

Name(Archivo1) devuelve el nombre del archivo externo correspondiente a “Archivo1”(nombre lógico).

Los errores que pudieran producirse al intentar abrir un archivo pueden controlarse mediante excepciones.

Otras funciones

Page 17: 2011 clase19

Algorítmica y Programación I

with ada.Text_Io,ada.Sequential_IO, ada.characters.handling, ada.Integer_Text_IO; use ada.Text_Io, ada.characters.handling, ada.Integer_Text_IO; procedure crear_Fichero is

subtype Cadena20 is String(1..20);subtype Cadena8 is String(1..8);type T_Persona isrecord

Nombre: cadena20 ;Dni: cadena8;Edad: Natural;

end record;package Archi_Persona_Sec is new ada.Sequential_Io(T_Persona);use Archi_Persona_Sec;F_Entrada: Archi_persona_sec.File_Type; Alumno:T_Persona;sigue:character;

begin--se abren los ficheros Create(F_Entrada,Out_File, "F:alumnos.dat"); loopcarga_registro(alumno); - - en este procedimiento se genera el registro alumnoGet_Immediate(Sigue);sigue:=to_upper(sigue);

Write(F_Entrada, Alumno); - - se graba el registro alumnos en el archivo F_Entradaexit when sigue/='C';

end loop; Close(F_Entrada); --se cierran los ficheros end crear_Fichero;

Page 18: 2011 clase19

Algorítmica y Programación I

with ada.Text_Io,ada.Sequential_IO;with ada.Text_Io , ada.Integer_Text_IO; use ada.Text_Io, ada.Integer_Text_IO; procedure leo_Fichero is

subtype Cadena20 is String(1..20);subtype Cadena8 is String(1..8);type T_Persona isrecord

Nombre: cadena20 ;Dni: cadena8;Edad: Natural;

end record; package Archi_Persona_Sec is new ada.Sequential_Io(T_Persona);use Archi_Persona_Sec;F_Entrada: Archi_persona_sec.File_Type; Alumno:T_Persona;

beginArchi_persona_sec.Open(F_Entrada,In_File, "F:\alumnos.dat"); - - se abren los ficheros loop exit when Archi_Persona_Sec.End_Of_File(F_Entrada); - - esto equivale a mientras no fin archivo

archi_persona_sec.Read(F_Entrada, Alumno);Put_line("El Nombre y Apellido es ");Put_line(alumno.nombre);Put_Line("Su DNI");put_line(alumno.dni);Put_line("Su edad ");Put(Alumno.Edad);new_line;end loop;

archi_persona_sec.Close(F_Entrada); - -se cierran los ficheros end leo_Fichero;

Page 19: 2011 clase19

Algorítmica y Programación I

-- este programa copia un archivo de texto en otro with Text_Io;use Text_Io;-- El procedimiento Copiar_Fichero copia un fichero de texto -- llamado "original.txt" en otro llamado "copia.txt" -- precondiciones: debe existir un fichero externo llamado original.txt-- no debe existir un fichero externo llamado copia.txt-- postcondiciones: Existe un fichero externo llamado "copia.txt" cuyo contenido es -- idéntico al de "original.txt"procedure Copiar_Fichero_ok is

F_Entrada, F_Salida: File_Type; Línea : String(1..200); Lon_Línea : Natural;

begin --se abren los ficheros Open(F_Entrada,Mode => In_File,Name => "C:original.txt"); Create(F_Salida,Name => "C:copia.txt"); --se copia F_Entrada en F_Salida while not End_Of_File(F_Entrada) loop

Get_Line(F_Entrada,Línea,Lon_Línea); Put_Line(F_Salida,Línea(1..Lon_Línea));

end loop; --se cierran los ficheros Close(F_Entrada); Close(F_Salida);

end Copiar_Fichero_ok;

Page 20: 2011 clase19

Algorítmica y Programación I

En la próxima clase veremos Cortes de Control ………