RPA Clase 10 6xh - Departamento de Ciencias e Ingeniería de

Anuncio
Dra. Jessica Andrea Carballido
[email protected]
Dpto. de Ciencias e Ingeniería de la Computación
UNIVERSIDAD NACIONAL DEL SUR
Archivos de tipo TEXT
Archivos de caracteres con fin de línea.
El manejo es análogo al de la consola.
Conversión automática a otros tipos.
Archivos de tipo TEXT
Archivos de tipo TEXT
…
var f: text; ent1, ent2: integer;
Begin
assign(f, ‘dosEnt.txt‘);
reset(f);
while not eof(f) do
begin
readln(f, ent1, ent2);
…
end;
close(f);
…
…
var f: text; ent: integer; r1, r2: real;
Begin
assign(f, ‘dosEnt.txt‘);
reset(f);
while not eof(f) do
begin
readln(f, r1, r2, ent);
…
end;
close(f);
…
Archivos de tipo TEXT
Procesamiento de Secuencias
Archivos de caracteres con fin de línea.
El manejo es análogo al de la consola.
Conversión automática a otros tipos.
Podemos manejar archivos de tipo TEXT
como lo hacíamos con los “file of …”
reset(f);
while not eof(f) do
begin
read(f, elem);
…
end;
close(f);
A partir de un archivo conteniendo las temperaturas diarias
de un período, generar otro archivo con la mínima, la
máxima y el promedio de temperaturas.
Por ejemplo, si el contenidos del archivo es:
7 11 8 10 11 11 15 8 5
El archivo generado será
Minima 5
Maxima 15
Promedio 9,56
10
Procesamiento de Secuencias
Procesamiento de Secuencias
Problema: Leer un archivo conteniendo pares de números
enteros representando las temperaturas mínimas y máximas
diarias de un período y generar otro archivo con la
diferencia diaria entre la máxima y la mínima.
Puede asumir que el archivo tiene la estructura especificada,
esto es un par de valores enteros por línea.
f se maneja igual
a un file of integer
2 15
3 17
0 13
1 11
Procesamiento de Secuencias
Procesamiento de Secuencias
Puede asumir que el archivo tiene la estructura especificada,
esto es un par de valores enteros por línea.
reset(paresTemp); rewrite(difTemp);
while not eof(paresTemp) do
begin
readln(paresTemp, temp1, temp2);
dif := temp2 - temp1;
writeln (difTemp, dif);
Este es el tipo de
end;
procesamiento
close(paresTemp); close(difTemp);
que vamos a
realizar
Procesamiento de Secuencias
program paresTMtext;
var
temp1, temp2, dif: integer;
paresTemp, difTemp: text;
begin
assign (paresTemp,'c:\archivos\paresTemp.txt');
assign (difTemp,'c:\archivos\difTemp.txt');
reset(paresTemp);
rewrite (difTemp);
while not eof(paresTemp) do
begin
readln (paresTemp, temp1, temp2);
dif := temp2 - temp1;
writeln (difTemp, dif:8:2);
end;
close (paresTemp); close (difTemp);
end.
Procesamiento de Secuencias
En una fábrica se coloca un sensor de temperatura y los valores
sensados se registran en un archivo llamado sensor.txt, junto con la
hora y los minutos de sensado.
El contenido del archivo puede ser por ejemplo:
18.5 10 30
16.8 10 32
15.2 10 40
17 10 45
17.5 10 55
A partir de sensor.txt generar dos archivos menores.txt y
mayores.txt. El primero contiene los valores menores a cierta
temperatura t y el segundo los valores mayores o iguales a t. En cada
caso el valor está seguido por las horas, el signo : y los minutos. 15
Procesamiento de Secuencias
program SensorMenMay;
var
hora, minutos: integer;
temp, t: real;
s, men, may : text;
begin
assign (s, 'c:\archivos\Sensor.txt');
assign (men, 'c:\archivos\Menores.txt');
assign (may, 'c:\archivos\Mayores.txt');
reset(s); rewrite(men); rewrite(may);
write(‘Ingrese la temperatura de referencia: ‘); read(t);
…
close (s);
close (men);
close (may);
end.
16
Procesamiento de Secuencias
En una fábrica se colocan dos sensores de temperatura, uno en el Norte y
otro en el Sur. Los sensores están sincronizados y los valores sensados se
registran en dos archivos Norte.txt y Sur.txt respectivamente.
Problema: Recorrer ambos archivos y generar un tercero llamado
MayorTemp.txt en el que se guarde la temperatura mayor entre las dos
registradas y el sector en el que se registró dicha temperatura. Si son
iguales, indicarlo.
Por ejemplo si Norte.txt es 15 17 12.5 18.5 y Sur.txt es 14 17 14 15
el archivo Mayor.txt contendrá:
15
Norte
17
iguales
14
Sur
18.5 Norte
…
while not eof(s) do
begin
readln (s, temp, hora, minutos);
if temp < t
then
writeln (men, temp, ‘ ’, hora, ‘ : ’, minutos)
else
writeln (may, temp, ‘ ’, hora, ‘ : ’, minutos);
end;
…
17
Puede asumir que ambos archivos tienen igual cantidad de elementos.
18
Procesamiento de Secuencias
Procesamiento de Secuencias
while not eof(n) and not eof(s)
do
begin
read (n, tempN);
read (s, tempS);
if tempN > tempS
then
writeln (m, tempN, ' Norte')
else
if tempN = tempS
then
writeln (m, tempN, ' Iguales')
else
writeln (m, tempS, ' Sur')
end;
read (n, tempN);
read (s, tempS);
if tempN > tempS
then
writeln (m, tempN, ' Norte')
else
if tempN = tempS
then
writeln (m, tempN, ' Iguales')
else
writeln (m, tempS, ' Sur')
19
Procesamiento de Secuencias
20
Procesamiento de Secuencias
program Sensores;
var tempN,tempS:real;
n,s,m : text;
begin
assign (n, 'c:\archivos\Norte.txt');
assign (s, 'c:\archivos\Sur. txt');
assign (m, 'c:\archivos\MayorTemp.txt');
reset (n);
reset (s);
rewrite(m);
…
close (s);
close (n);
close (m);
end.
Modifique la solución anterior considerando que si un sensor
deja de funcionar antes que otro, a partir de ese momento se
vuelcan en mayor.txt el resto de los datos del otro sensor.
Por ejemplo si Norte.txt es 15 12.5 18.5 15 13.2
y Sur.txt es 14 14 15 el archivo Mayor.txt contendrá:
15
Norte
14
Sur
18.5 Norte
15
Norte
13.2 Norte
Elija por lo menos 3 casos significativos para probar la solución.
21
Procesamiento de Secuencias
22
Procesamiento de Secuencias
En una fábrica se colocan dos sensores de temperatura, uno en el
Norte y otro en el Sur. Los valores sensados se registran en un
archivo anotando la temperatura y de qué sensor se obtuvo:
15 N
14 S
16 N
20 S
23 S
Generar dos archivos, uno con los registros del sensor del Norte y
otro con los del Sur.
23
…
var f, N, S: text; temp: integer; s: char;
Begin
… // asignar los tres archivos
reset(f); rewrite(N); rewrite(S);
while not eof(f) do
begin
readln(f, temp, s);
if (s=‘N’) then writeln(N, temp)
else writeln(S, temp);
…
end;
close(f); close(N); close(S);
…
Procesamiento de Secuencias
Procesamiento de Secuencias
Procesamiento clásico de un archivo de tipo text
accedido caracter por caracter:
Procesamiento clásico de un archivo de tipo text accedido
caracter por carácter si necesitamos analizar su
contenido línea a línea:
reset(t);
while not eof(t) do
begin
…
while not eof(t) and not eoln(t) do
begin
read(t, ch);
…
end;
if eoln(t) then readln(t);
…
end;
close(t);
Procesamiento de Secuencias
Procesamiento de Secuencias
Una línea
Procesamiento de Secuencias
Procesamiento de Secuencias
Leer 7
Leer 11
Calcular 4 y agregar al archivo
Leer 8
Calcular -3 y agregar al archivo
Leer 10
Calcular 2 y agregar al archivo
…
Leer 5
Calcular -3, agregar al archivo y
terminar
Leer un archivo conteniendo las temperaturas mínimas
diarias de un período y generar otro archivo con las
diferencias de temperaturas entre cada día y el anterior.
Por ejemplo, si el contenidos del archivo es:
7 11 8 10 11 11 15 8 5
El archivo generado será
4 -3 2 1 0 4 -7 -3
Para
estudiar
en casa
Identificamos las estructuras
de control y generalizamos
29
read(tm, t1);
read(tm, t2);
diferencia := t2-t1;
write(d, diferencia);
t1:=t2;
read(tm, t2);
diferencia := t2-t1;
write(d, diferencia);
t1:=t2;
read(tm, t2);
diferencia := t2-t1;
write(d, diferencia);
t1:=t2;
30
Procesamiento de Secuencias
…
read(tm, temp1);
while not eof(tm) do
begin
read (tm, temp2);
dif := temp2 - temp1;
write (d, dif);
temp1 := temp2;
end;
…
Qué sucede si el archivo está vacío?
Procesamiento de Secuencias
Procesamiento de Secuencias
program difEntreDias;
var temp1, temp2, dif: integer; tm, d: text;
begin
assign (tm,'tempMin.txt');
assign (d,'difDias.txt');
reset (tm); rewrite (d);
if not eof(tm) then read(tm, temp1);
while not eof(tm) do
begin
read (tm, temp2);
dif := temp2 - temp1;
Manejo de pares de elementos
write(d, dif:8:2);
adyacentes en el archivo.
temp1 := temp2;
end;
close (tm); close (d);
end.
Procesamiento de Secuencias
Implementamos programas que procesan secuencias de elementos.
Diferencia entre file of char y text:
Ambos son archivos de caracteres, pero el text separa las
líneas con eoln.
•
Además del archivo de texto podemos leer, como desde
la consola, datos de tipos mezclados. Pascal realiza una
conversión automática en los tipos de los datos
leídos de archivos de tipo text.
•
La secuencia puede leerse desde:
• La consola
• Un archivo
Los elementos pueden ser:
•
números
•
caracteres
La secuencia puede:
•
Tener una longitud fija, establecida por el usuario (de consola).
•
Terminar con un valor particular (de consola).
•
Terminar cuando la función eof computa true (de archivo).
Descargar