PDF de programación - Creación de un archivo indexado de productos - Tema 2. Archivos

Imágen de pdf Creación de un archivo indexado de productos - Tema 2. Archivos

Creación de un archivo indexado de productos - Tema 2. Archivosgráfica de visualizaciones

Publicado el 24 de Septiembre del 2020
84 visualizaciones desde el 24 de Septiembre del 2020
428,8 KB
5 paginas
Creado hace 7a (12/02/2013)
Tema 2. Archivos.

Ejemplo: Creación de un archivo indexado de productos

Se desea indexar el archivo directo de almacén. Para ello se debe leer secuencialmente el archivo de organización
directa e incluir el código de producto y la posición de todas las ranuras ocupadas en un array de índices. Al
acabar el proceso se debe ordenar el array y almacenarlo de forma temporal en un archivo secuencial para las
siguientes ocasiones en que se desee gestionar el índice.

//Creación del archivo indexado a partir del archivo de productos
algoritmo CreaciónIndexado
const
MaxReg = 120
//El índice sólo tiene 100 posiciones
//ya que sólo hay 100 productos distintos
numElemIndice = 100
tipos
registro = rProducto
entero : código
cadena: desc
entero : stock
entero : estado
fin_registro
archivo_d de rProducto = aProducto
registro = RIndice
entero : clave
entero : NRR
fin_registro
array[0..numElemIndice] de RIndice = vIndice
var
aProducto : A
rProducto : R
vIndice : Ind
entero : n, NRR
inicio
abrir(A,lectura/escritura,'PRODUCTOS.DAT')
n  0
NRR  0
leer(A,R)
mientras no fda(A) hacer
NRR  NRR + 1
si R.estado = 1 entonces
n  n + 1
ind[n].clave  R.código
ind[n].NRR  NRR
fin_si
leer(A,R)
fin_mientras
cerrar(A)
Ordenar(Ind,n)
GuardarIndice(Ind,n)
fin



UPSAM, Escuela superior de Ingeniería y Arquitectura, Luís Rodríguez Baena, 2013

1

//Para no perder el array de índices, el procedimiento GuardarIndice
//lo vuelca en un archivo secuencial
procedimiento GuardarIndice(valor vIndice : v; valor entero : n)
var
archivo_s de RIndice : A
entero : i
inicio
abrir(A,escritura,'CODIGO.IDX')
desde i  1 hasta n hacer
escribir(A,v[i])
fin_desde
cerrar(A)
fin_procedimiento

Ejemplo: Gestión del archivo indexado de productos

Programa principal
Para los algoritmos que aparecen a continuación, se suponen las siguientes declaraciones en el cuerpo del
programa. En el programa principal, la variable entera n guarda el total de elementos ocupados del índice.

El procedimiento CargarIndice, coge el archivo secuencial creado en el ejemplo anterior y lo vuelca sobre un
array.

algoritmo GestiónArchivoIndexado
const
MaxReg = 120
//El índice sólo tiene 100 posiciones
//ya que sólo hay 100 productos distintos
numElemIndice = 100
tipos
registro = rProducto
entero : código
cadena: desc
entero : stock
entero : estado
fin_registro
archivo_d de rProducto = aProducto
registro = RIndice
entero : clave
entero : NRR
fin_registro
array[0.. numElemIndice] de RIndice = vIndice
var
aProducto : A
rProducto : R
vIndice : Ind
entero : n
inicio
abrir(A,lectura/escritura,'PRODUCTOS.DAT')
CargarIndice(Ind,n)
//Código del programa principal

GuardarIndice(Ind,n)
cerrar(A)
fin



UPSAM, Escuela superior de Ingeniería y Arquitectura, Luís Rodríguez Baena, 2013

2

//Carga el archivo secuencial con el índice en un array
//Devuelve el número de elementos ocupados del índice (n)
procedimiento CargarIndice(ref vIndice : v; ref entero : n)
var
archivo_s de RIndice : A
RIndice : R
inicio
abrir(A,escritura,'CODIGO.IDX')
n  0
leer(A,R)
mientras no fda(A) hacer
n  n + 1
v[n]  R
leer(A,R)
fin_mientras
cerrar(A)
fin_procedimiento

Mantenimiento del archivo
El mantenimiento incluirá los procedimientos para dar altas, bajas y modificaciones en al archivo

//El procedimiento Alta añade el registro R en una posición libre
//del área de datos //e inserta de forma ordenada
//la clave y la posición en el área de índices
procedimiento Alta(ref AProductos:A;valor RProducto:R; ref vIndice:Ind; ref
entero:n)
var
RProducto : RAux
entero : NRR,i
inicio
//La función buscar realiza una búsqueda binaria entre los n
//primeros elementos del array Ind y devuelve la posición o 0
si (buscar(Ind,R,n) <> 0) o (numElemIndice = n) entonces
//Ya está o índice lleno
si_no
//Alta en área de datos
//Buscar hueco libre mediante una función HASH
NRR  hash(R.código)
leer(A, RAux, NRR)
mientras RAux.estado = 1 hacer
NRR  NRR mod MaxReg + 1
leer(A, RAux, NRR)
fin_mientras
//Graba el registro en el área de datos,
//marcándolo como ocupado (R.estado = 1)
R.estado  1
escribir(A, NRR,R,)
//Alta en el índice
Ind[0].clave  R.código
Ind[0].NRR  NRR
i  n
mientras Ind[i].clave > Ind[0].clave hacer
Ind[i+1]  Ind[i]
i  i – 1
fin_mientras
Ind[i+1]  Ind[0]
n  n + 1



UPSAM, Escuela superior de Ingeniería y Arquitectura, Luís Rodríguez Baena, 2013

3

fin_si
fin_procedimiento

//El procedimiento Baja da una baja lógica en el área de datos
//y elimina la entrada en el área de índices
//El argumento R contiene el código del producto a dar de baja
procedimiento Baja(ref AProductos:A; valor RProducto:R; ref vIndice:Ind;
ref entero:n)
var
entero : p,i
inicio
p  buscar(Ind,R,n)
si p = 0 entonces
//No está
si_no
//Dar una baja lógica en el área de datos
leer(A,Ind[p].NRR,R)
R.estado  2
escribir(A,Ind[p].NRR,R)
//Eliminar del índice
desde i  p hasta n-1 hacer
Ind[i]  Ind[i+1]
fin_desde
n  n - 1
fin_si
fin_procedimiento

//El procedimiento Modificar, modifica un registro en el área de datos.
//El índice no cambia, ya que el código del producto no se puede modificar
//El argumento R contiene el código del producto a modificar y
//los campos modificados
procedimiento Modificar(ref AProductos:A; valor RProducto:R;
valor vIndice:Ind; valor entero:n)
var
entero : p
inicio
p  buscar(Ind,R,n)
si p = 0 entonces
//No está
si_no
escribir(A,Ind[p].NRR,R)
fin_si
fin_procedimiento

Acceso a los registros
El acceso directo (por ejemplo para una consulta) se realiza mediante una búsqueda binaria en el área de índices
y accediendo de forma directa al registro a partir de su NRR.

procedimiento Consulta(ref AProductos:A; valor RProducto:R;
valor vIndice:Ind; valor entero:n)
var
entero : p
inicio
p  buscar(Ind,R,n)
si p = 0 entonces
//No está
si_no



UPSAM, Escuela superior de Ingeniería y Arquitectura, Luís Rodríguez Baena, 2013

4

leer(A,Ind[p].NRR,R)
//Procesar el registro (por ejemplo, presentarlo por pantalla)
escribir(R.código,R.desc,R.stock)
fin_si
fin_procedimiento

El acceso secuencial se realiza accediendo secuencialmente a la tabla de índices y leyendo de forma directa el
registro en el área de datos a partir de su NRR.

procedimiento Listado(ref AProductos:A; valor RProducto:R; valor vIndice:Ind;
valor entero:n)
var
entero : i
inicio
desde i  1 hasta n hacer
leer(A,Ind[i].NRR,R)
//Procesar el registro (por ejemplo, presentarlo por pantalla)
escribir(R.código,R.desc,R.stock)
fin_desde
fin_procedimiento



UPSAM, Escuela superior de Ingeniería y Arquitectura, Luís Rodríguez Baena, 2013

5
  • Links de descarga
http://lwp-l.com/pdf18258

Comentarios de: Creación de un archivo indexado de productos - Tema 2. Archivos (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad