Buscar

Aula_010 - Tipos Estruturados III

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 57 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 57 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 57 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1
Professores:
Dante Corbucci Filho
Alexandre Plastino
Conteúdo:
- Tipos Estruturados (3a_ Parte)
 - Arquivos Texto (Text)
 
Aula 10
2
Arquivo Texto (Text)
 Os programas apresentados neste curso até o 
momento são chamados interativos.
 Programas interativos lêem os dados de entrada do 
teclado e apresentam os dados de saída na tela. Este tipo 
de programação é utilizada quando poucos dados são 
processados.
 Quando grandes quantidades de dados são 
processadas, arquivos são utilizados para armazenar os 
dados de entrada e os de saída. Estes são chamados, 
respectivamente, arquivos de entrada e arquivos de saída.
3
Arquivo Texto (Text)
 Em Pascal, há basicamente dois tipos de arquivo:
arquivo texto (text) e arquivo tipado (file of TElemento).
 Um arquivo texto é um conjunto de caracteres 
armazenados em disco sob um mesmo nome.
 Arquivos texto podem ser criados, visualizados e 
alterados por editores ou processadores de texto. Desta 
forma, o arquivo de entrada de um programa pode ser 
criado em um editor de texto e o arquivo de saída pode
ser consultado utilizando-se também um editor.
4
Arquivo Texto (Text)
 Um arquivo texto é armazenado em disco como 
uma seqüência de caracteres.
 O arquivo acima contém 30 caracteres (ou bytes), 
entre eles, dígitos, brancos, letras, e dois caracteres 
especiais: <eoln> e <eof>. 
 O caracter <eoln> (end-of-line) indica fim de linha e
o caracter <eof> (end-of-file) indica fim do arquivo.
1 2 5 9 4 A l e x L i n o <eoln> <eoln> <eof>3 7 0 5 1 S y l v i a
5
Arquivo Texto (Text)
 Um arquivo texto pode ter vários caracteres <eoln> 
mas apenas um <eof>.
 Durante a edição de um arquivo, um caracter <eoln> 
é inserido sempre que a tecla <Enter> é digitada e, quando 
o arquivo é salvo, um caracter <eof> é gravado após o 
último caracter do arquivo.
1 2 5 9 4 A l e x L i n o <eoln> <eoln> <eof>3 7 0 5 1 S y l v i a
6
Arquivo Texto (Text)
 O arquivo acima seria exibido em um editor de texto 
como a figura abaixo. Os caracteres <eoln> e <eof> não 
são exibidos, apenas indicam fim de linha e fim do arquivo.
 Para futuros exemplos, considere que o nome deste 
arquivo é "cadastro.txt".
1 2 5 9 4 A l e x L i n o <eoln> <eoln> <eof>3 7 0 5 1 S y l v i a
12594 Alex Lino
37051 Sylvia
7
Variável tipo text
 Para utilizar (ler ou gravar) um arquivo texto em 
Pascal, é necessário declarar uma variável que represente 
este arquivo (variável do tipo arquivo).
Program LeDados (input{teclado}, output{vídeo}, Dados{e});
Var
 Dados : text;
 . . .
Begin
. . . 
End. 
Declaração 
da variável
Dados que 
representa 
o arquivo.
Lista dos 
dispositivos e 
arquivos de
entrada e saída.
8
Assign
 O comando Assign permite que um arquivo em 
disco seja associado a uma variável do tipo arquivo. 
Program LeDados (input{teclado}, output{vídeo}, Dados{e});
Var
 Dados : text;
 . . .
Begin
 assign (Dados, ’/mnt/floppy/dirdados/cad.txt’);
 . . . 
End. 
Nome interno 
do arquivo.
Variável que
representa o 
arquivo.
Nome externo 
do arquivo.
Localização
completa do
arquivo.
A partir deste 
ponto, a variável 
Dados se refere ao 
arquivo cad.txt
armazenado no
disquete, no 
diretório dirdados.
9
Assign
 No comando Assign a identificação do arquivo em 
disco pode ser feita por uma variável do tipo string. 
Program LeDados (input{teclado}, output{vídeo}, Dados{e});
Var
 Dados : text;
 NomeArquivo: string;
 . . .
Begin
 write (output, ’Entre com o nome do arquivo de dados: ’);
 readln (input, NomeArquivo);
 assign (Dados, NomeArquivo);
 . . . 
End. 
10
Abrindo um arquivo texto
 Antes de ser utilizado (como entrada ou saída), 
um arquivo texto precisa ser aberto.
 Um arquivo texto não pode ser aberto tanto para
leitura quanto para gravação. Se um arquivo texto é 
aberto para leitura, não se pode gravar nesse arquivo, e 
vice-versa.
 O comando Reset abre um arquivo texto para 
leitura (para entrada de dados).
 O comando Rewrite abre um arquivo texto para 
gravação (para saída de dados). 
11
Reset
 O comando Reset permite que um arquivo texto 
seja aberto (preparado) para leitura. Toda vez que for 
necessário reler o arquivo, o comando Reset deverá ser 
executado novamente.
Program LeDados (input{teclado}, output{vídeo}, Dados{e});
Var
 Dados : text;
 . . .
Begin
 assign (Dados, ’/mnt/floppy/cadastro.txt’);
 reset (Dados);
. . . 
End. Nome interno 
 do arquivo.
A partir deste ponto, 
o arquivo Dados 
pode ser lido.
O primeiro caracter 
a ser lido será o 
primeiro caracter do 
arquivo (onde estará 
inicialmente a 
"cabeça de leitura"). 
12
Rewrite
 O comando Rewrite permite que um arquivo texto 
vazio seja aberto (preparado) para escrita. Se o arquivo 
não estiver vazio, seu conteúdo corrente será perdido.
Program EscreveDados (input{teclado}, output{vídeo}, Resultado{s});
Var
 Resultado : text;
 . . .
Begin
 assign (Resultado, ’/mnt/floppy/resposta.txt’);
 rewrite (Resultado);
 . . . 
End. Nome interno 
 do arquivo.
A partir deste ponto, 
dados podem ser 
gravados no arquivo.
O primeiro caracter 
será gravado na 
primeira posição do 
arquivo.
13
Close
 O comando Close permite que um arquivo de 
entrada ou saída seja fechado. Sempre que não for mais 
ser utilizado, um arquivo deve ser fechado.
Program EscreveDados (input{teclado}, output{vídeo}, Resultado{s});
Var
 Resultado : text;
 . . .
Begin
 assign (Resultado, ’/mnt/floppy/resposta.txt’);
 rewrite (Resultado);
 . . . 
 close (Resultado);
End. 
Nome interno 
 do arquivo.
Este comando garante 
que todos os dados 
gravados no arquivo 
estarão efetivamente 
no disquete. A partir 
deste ponto, o arquivo 
Resultado não poderá 
mais ser utilizado.
14
Read, Readln
 Os comandos Read e Readln lêem dados de um 
arquivo texto e os armazenam em variáveis do programa. 
Program LeDados (input{teclado}, output{vídeo}, Dados{e});
Var
 Dados : text;
 Codigo : integer;
 Separador: char;
 Nome : string;
Begin
 assign (Dados, ’/mnt/floppy/cadastro.txt’);
 reset (Dados);
 readln (Dados, Codigo, Separador, Nome);
. . . 
End. Lista de
variáveis.
Nome interno 
 do arquivo.
Este comando transfere 
12594 para a variável 
Codigo, ’ ’ para Separador 
e ’Alex Lino’ para Nome, 
além de consumir também 
o caracter <eoln>, 
posicionando a "cabeça de 
leitura" na próxima linha.
12594 Alex Lino<eoln>
37051 Sylvia<eoln>
<eof>
15
Read, Readln
 Esta seqüência de comandos é equivalente à 
anterior (com um readln apenas).
Program LeDados (input{teclado}, output{vídeo}, Dados{e});
. . .
Begin
 assign (Dados, ’/mnt/floppy/cadastro.txt’);
 reset (Dados);
 read (Dados, Codigo, Separador, Nome);
 readln (Dados);
. . . 
End. 
12594 Alex Lino<eoln>
37051 Sylvia<eoln>
<eof>
Este read transfere 12594 
para a variável Codigo, ’ ’ 
para Separador e ’Alex 
Lino’ para Nome. 
Este readln consome o 
caracter <eoln>, 
posicionando a "cabeça de 
leitura" na próxima linha.
16
Read, Readln
 Outra equivalência.
Program LeDados (input{teclado}, output{vídeo}, Dados{e});
. . .
Begin
 assign (Dados, ’/mnt/floppy/cadastro.txt’);
 reset (Dados);
 read (Dados, Codigo);
 read (Dados, Separador);
 read (Dados, Nome);
 readln(Dados);
. . . 
End. 
12594 Alex Lino<eoln>
37051 Sylvia<eoln>
<eof>
Este readln consome o 
caracter <eoln>, 
posicionando a "cabeça de 
leitura" na próxima linha.
Estes três comandos 
transferem 12594 para a 
variável Codigo, ’ ’ para 
Separador e ’Alex Lino’ 
para Nome. 
17
12594 Alex Lino<eoln>
37051 Sylvia<eoln><eof>
CL = Cabeça de Leitura
Begin
. . .
 reset (Dados);
 read (Dados, Codigo);
 read (Dados, Separador);
 read (Dados, Nome);
 readln (Dados);
. . . 
End. 
Execução
18
12594 Alex Lino<eoln>
37051 Sylvia<eoln><eof>
CL
Begin
. . .
 reset (Dados);
 read (Dados, Codigo);
 read (Dados, Separador);
 read (Dados, Nome);
 readln (Dados);
. . . 
End. 
Execução
19
12594 Alex Lino<eoln>
37051 Sylvia<eoln><eof>
CL
Begin
. . .
 reset (Dados);
 read (Dados, Codigo);
 read (Dados, Separador);
 read (Dados, Nome);
 readln (Dados);
. . . 
End. 
Execução
20
12594 Alex Lino<eoln>
37051 Sylvia<eoln><eof>
CL
Begin
. . .
 reset (Dados);
 read (Dados, Codigo);
 read (Dados, Separador);
 read (Dados, Nome);
 readln (Dados);
. . . 
End. 
Execução
21
12594 Alex Lino<eoln>
37051 Sylvia<eoln><eof>
CL
Begin
. . .
 reset (Dados);
 read (Dados, Codigo);
 read (Dados, Separador);
 read (Dados, Nome);
 readln (Dados);
. . . 
End. 
Execução
22
12594 Alex Lino<eoln>
37051 Sylvia<eoln><eof>
CL
Begin
. . .
 reset (Dados);
 read (Dados, Codigo);
 read (Dados, Separador);
 read (Dados, Nome);
 readln (Dados);
. . . 
End. 
Execução
23
12594 Alex Lino<eoln>
37051 Sylvia<eoln><eof>
Begin
. . .
 reset (Dados);
 readln (Dados, Codigo);
. . . 
End. 
Execução
CL = Cabeça de Leitura
24
12594 Alex Lino<eoln>
37051 Sylvia<eoln><eof>
Execução
CL
Begin
. . .
 reset (Dados);
 readln (Dados, Codigo);
. . . 
End. 
25
12594 Alex Lino<eoln>
37051 Sylvia<eoln><eof>
Begin
. . .
 reset (Dados);
 readln (Dados, Codigo);
. . . 
End. 
Execução
CL
26
Read, Readln
 O número de caracteres lidos em um comando 
Read ou Readln, a partir da "cabeça de leitura", depende 
do tipo das variáveis que estão recebendo os dados.
Tipo char: 
 apenas um caracter é consumido e 
 armazenado na variável correspondente;
27
Read, Readln
 O número de caracteres lidos em um comando 
Read ou Readln, a partir da "cabeça de leitura", depende 
do tipo das variáveis que estão recebendo os dados.
Tipo string: 
 todos os caracteres até o último antes do
 próximo <eoln> são consumidos; apenas no
 caso de readln, o caracter <eoln> é
 consumido mas não armazenado;
28
Read, Readln
 O número de caracteres lidos em um comando 
Read ou Readln, a partir da "cabeça de leitura", depende 
do tipo das variáveis que estão recebendo os dados.
Tipo numérico (integer ou real):
 todos os brancos e caracteres <eoln> são 
 consumidos até que um caracter diferente destes 
 seja encontrado. Se não for um sinal ou um dígito, 
 um erro será retornado. Em caso contrário, os 
 caracteres correspondentes ao inteiro ou ao real 
 (inclusive o ponto) são consumidos e o número 
 correspondente é armazenado na variável.
29
Exemplos
 Considere as quatro variáveis:
 R: real;
 I: integer;
 C: char;
 S: string;
 
 E o seguinte arquivo texto de entrada:
1234.56 789 A345.67<eoln>
W<eoln><eof>
CL
30
Exemplos
A execução do comando
 read (Arquivo, R, I, C);
Armazena os seguintes valores em R, I, C:
1234.56 789 A345.67<eoln>
W<eoln><eof>
CL
R: 1234.56 I: 789 C: ’ ’ 
31
Exemplos
A execução do comando
 readln (Arquivo, R, I, C);
Armazena os seguintes valores em R, I, C:
R: 1234.56 I: 789 C: ’ ’ 
1234.56 789 A345.67<eoln>
W<eoln><eof>
CL
32
Exemplos
A execução do comando
 read (Arquivo, R, C, I);
Armazena os seguintes valores em R, C, I:
R: 1234.56 C: ’ ’ I: 789 
1234.56 789 A345.67<eoln>
W<eoln><eof>
CL
33
Exemplos
A execução do comando
 readln (Arquivo, R, C, I);
Armazena os seguintes valores em R, C, I:
R: 1234.56 C: ’ ’ I: 789 
1234.56 789 A345.67<eoln>
W<eoln><eof>
CL
34
Exemplos
A execução do comando
 read (Arquivo, C, R, I);
Armazena os seguintes valores em C, R, I:
C:1 R: 234.56 I: 789 
1234.56 789 A345.67<eoln>
W<eoln><eof>
CL
35
Exemplos
A execução do comando
 readln (Arquivo, C, R, I);
Armazena os seguintes valores em C, R, I:
C:1 R: 234.56 I: 789 
1234.56 789 A345.67<eoln>
W<eoln><eof>
CL
36
Exemplos
A execução dos comandos
 readln (Arquivo, R, I);
 read (Arquivo, C);
 Armazena os seguintes valores em R, I, C:
R: 1234.56 I: 789 C: ’W’ 
1234.56 789 A345.67<eoln>
W<eoln><eof>
CL
37
Exemplos
A execução dos comandos
 readln (Arquivo, R);
 readln (Arquivo, C);
 Armazena os seguintes valores em R, C:
R: 1234.56 C: ’W’
1234.56 789 A345.67<eoln>
W<eoln><eof>
CL
38
Exemplos
A execução dos comandos
 readln (Arquivo, S);
 readln (Arquivo, C);
 Armazena os seguintes valores em S, C:
S: ’1234.56 789 A345.67’ C: ’W’
1234.56 789 A345.67<eoln>
W<eoln><eof>
CL
39
Write, Writeln
 Os comandos Write e Writeln escrevem valores de 
variáveis, constantes ou expressões em um arquivo texto. 
Program EscreveDados (input{teclado}, output{vídeo}, Resultado{s});
Var
 Resultado : text;
 Codigo : integer;
 Nome : string;
Begin
 assign (Resultado, ’/mnt/floppy/resposta.txt’);
 rewrite (Resultado);
 readln (input, Codigo, Nome);
 writeln (Resultado, Codigo, ’ ’, Nome);
 . . . 
End. 
Este comando grava no 
arquivo Resultado os 
valores de Codigo e Nome 
lidos do teclado, 
intercalados com um 
branco. Um <eoln> é 
gravado após o Nome.
40
Write, Writeln
 Esta seqüência de comandos é equivalente à 
anterior (com um writeln apenas).
Program EscreveDados (input{teclado}, output{vídeo}, Resultado{s});
Var
 Resultado : text;
 . . . 
Begin
 assign (Resultado, ’/mnt/floppy/resposta.txt’);
 rewrite (Resultado);
 readln (input, Codigo, Nome);
 write (Resultado, Codigo);
 write (Resultado, ’ ’);
 write (Resultado, Nome);
 writeln (Resultado);
 . . . 
End. 
Estes três comandos gravam no 
arquivo Resultado os valores de 
Codigo e Nome lidos do teclado, 
intercalados com um branco. 
Estes comando grava o caracter 
<eoln> em seguida.
41
Write, Writeln
Obs.: A formatação dos comandos Write e Writeln conforme
 vista na primeira aula pode ser utilizada também para
 escrever em arquivos texto.
Program EscreveDados (input{teclado}, output{vídeo}, Resultado{s});
Var
 Resultado : text;
 Codigo : integer;
 Nome : string;
Begin
 assign (Resultado, ’/mnt/floppy/resposta.txt’);
 rewrite (Resultado);
 readln (input, Codigo, Nome);
 writeln (Resultado, Codigo, ’ ’, Nome);
 . . . 
 close (Resultado);End. 
O comando close grava o 
caracter <eof> no arquivo 
Resultado e o fecha.
42
Funções EOF e EOLN
 A função EOF(NomeArquivo), onde 
NomeArquivo é o nome interno de um arquivo, 
retorna true se o próximo caracter neste 
arquivo for o caracter <eof>; em caso contrário, 
retorna false.
 A função EOLN(NomeArquivo), onde 
NomeArquivo é o nome interno de um arquivo, 
retorna true se o próximo caracter neste 
arquivo for o caracter <eoln>; em caso contrário, 
retorna false.
43
Programa para criar uma cópia de um arquivo.
Program CriaCopia (input{teclado}, output{vídeo}, Orig{e}, Dest{s});
Var
 Orig, Dest : text;
 NomeOrig, NomeDest : string;
Begin 
End. 
44
Programa para criar uma cópia de um arquivo.
Program CriaCopia (input{teclado}, output{vídeo}, Orig{e}, Dest{s});
Var
 Orig, Dest : text;
 NomeOrig, NomeDest : string;
Begin
 LeNomesArquivos(NomeOrig,NomeDest);
 assign (Orig, NomeOrig); 
 assign (Dest, NomeDest);
 CopiaArquivo(Orig,Dest); 
End. 
45
Programa para criar uma cópia de um arquivo.
Program CriaCopia (input{teclado}, output{vídeo}, Orig{e}, Dest{s});
 Procedure LeNomesArquivos(Var Nome_O{s}, Nome_D{s} : string);
 begin 
 end;
 Procedure CopiaArquivo(Var Arq_O{e}, Arq_D{s} : text);
 begin 
 end;
Var
 Orig, Dest : text;
 NomeOrig, NomeDest : string;
Begin
 LeNomesArquivos(NomeOrig,NomeDest);
 assign (Orig, NomeOrig); 
 assign (Dest, NomeDest);
 CopiaArquivo(Orig,Dest); 
End. 
46
Programa para criar uma cópia de um arquivo.
Program CriaCopia (input{teclado}, output{vídeo}, Orig{e}, Dest{s});
 Procedure LeNomesArquivos(Var Nome_O{s}, Nome_D{s} : string);
 begin 
 write (output, ’Entre com o nome do arquivo a ser copiado: ’);
 readln (input, Nome_O);
 write (output, ’Entre com o nome do novo arquivo cópia: ’);
 readln (input, Nome_D);
 end;
 . . .
Begin
 LeNomesArquivos(NomeOrig,NomeDest);
 assign (Orig, NomeOrig); 
 assign (Dest, NomeDest);
 CopiaArquivo(Orig,Dest); 
End. 
47
Programa para criar uma cópia de um arquivo.
Executável
Código Fonte
Program CriaCopia (input{teclado}, output{vídeo}, Orig{e}, Dest{s});
 . . .
 Procedure CopiaArquivo(Var Arq_O{e}, Arq_D{s} : text);
 var Linha : string;
 begin 
 reset (Arq_O); rewrite (Arq_D);
 while not eof(Arq_O) do
 begin
 readln (Arq_O, Linha);
 writeln (Arq_D, Linha);
 end;
 close (Arq_O); close (Arq_D); 
 end;
 . . .
Begin
. . . 
End. 
48
Programa para listar o conteúdo de uma tabela 
contendo o cadastro de funcionários de uma empresa.
Program ListaCadastro (input{teclado}, output{vídeo}, BD{e});
Uses crt;
Const MaxFunc = 1000;
Type
 Dominio = 1 . . MaxFunc;
 Registro = record
 Nome : string [20];
 Codigo : Dominio;
 Salario : real
 end;
 Tabela = array [Dominio] of Registro;
Var
 BD : text;
 Cadastro : Tabela;
 NumFunc : integer;
Begin 
End. 
49
Program ListaCadastro (input{teclado}, output{vídeo}, BD{e});
Uses crt;
Const MaxFunc = 1000;
Type
 Dominio = 1 . . MaxFunc;
 Registro = record
 Nome : string [20];
 Codigo : Dominio;
 Salario : real
 end;
 Tabela = array [Dominio] of Registro;
. . .
Var
 BD : text;
 Cadastro : Tabela;
 NumFunc : integer;
Begin
 assign (BD, ’cadastro.txt’);
 LerCadastro(BD,Cadastro,NumFunc);
 ImprimirCadastro(Cadastro,NumFunc); 
End. 
50
Program ListaCadastro (input{teclado}, output{vídeo}, BD{e});
. . .
Procedure LerCadastro(Var Arquivo{e}: text;
 Var Cadastro{s}: ListaFuncionarios;
 Var NumFunc{s}: integer); 
 begin 
 end;
Procedure ImprimirCadastro(Cadastro{e}: ListaFuncionarios;
 NumFunc{e}: integer); 
 begin 
 end;
. . .
Begin 
 assign (BD, ’cadastro.txt’);
 LerCadastro(BD,Cadastro,NumFunc);
 ImprimirCadastro(Cadastro,NumFunc); 
End. 
51
Program ListaCadastro (input{teclado}, output{vídeo}, BD{e});
. . .
Procedure LerCadastro(Var Arquivo{e}: text;
 Var Cadastro{s}: ListaFuncionarios;
 Var NumFunc{s}: integer); 
 begin 
 
 end;
. . .
Begin
 assign (BD, ’cadastro.txt’); 
 LerCadastro(BD,Cadastro,NumFunc);
 ImprimirCadastro(Cadastro,NumFunc); 
End. 
Esta rotina deverá ler os registros de um arquivo 
com o seguinte formato:
Nome Código Salário
Alex Lino da Silva 342 1245.55
Branca Carvalho 169 3449.90
Ana Maria Moura 20 300.00
52
Program ListaCadastro (input{teclado}, output{vídeo}, BD{e});
. . .
Procedure LerCadastro(Var Arquivo{e}: text;
 Var Cadastro{s}: ListaFuncionarios;
 Var NumFunc{s}: integer); 
 var i : integer;
 begin 
 reset (Arquivo);
 i := 0;
 while (i<MaxFunc) and (not eof(Arquivo)) do
 begin
 i := i + 1; 
 with Cadastro[i] do 
 readln (Arquivo, Nome, Codigo, Salario) 
 end;
 close (Arquivo);
 NumFunc := i;
 end;
. . .
53
Program ListaCadastro (input{teclado}, output{vídeo}, BD{e});
Uses crt;
. . .
Procedure ImprimirCadastro(Cadastro{e}: ListaFuncionarios;
 NumFunc{e}: integer); 
 var i : integer;
 begin 
 Clrscr; {Este comando limpa a tela - contida na crt}
 writeln (output, ’Nome’, ’Código’ : 23, ’Salário’ : 21);
 for i := 1 to NumFunc do
 with Cadastro[i] do 
 writeln (output, Nome, ’ ’ : 22 - lenght(Nome),
 Codigo : 3, Salario : 23 : 2)
 end;
. . .
Begin 
 LerCadastro(BD,Cadastro,NumFunc);
 ImprimirCadastro(Cadastro,NumFunc); 
End. 
54
Append
 O comando Append abre o arquivo texto existente 
para escrita e posiciona a "cabeça de escrita" no final do 
arquivo, permitindo escrever novas informações no final do 
arquivo. O arquivo deve estar associado previamente, via 
comando assign. Caso o arquivo externo associado não 
exista no diretório, um erro ocorrerá. 
Program Adicionando (Arq{s});
 Var Arq: text;
Begin 
 assign(Arq, ’teste.txt’);
 rewrite(Arq);
 writeln(Arq, ’Minha primeira linha’);
 close(Arq);
 Append(Arq);
 writeln(Arq, ’Nova linha adicionada no final’);
 close(Arq);
End. 
Executável
Código Fonte
55
Erros, Diretivas {$I-} e {$I+}, Função IOResult
 Nos programas vistos até agora, um erro de entrada 
e saída que ocorra fará seu programa terminar em estado 
de erro (abortará).
 É possível se evitar este término abrupto do 
programa pelo uso das diretivas {$I-} e {$I+}. Todos os 
erros de entrada e saída que ocorrerem dentro de uma 
região do código delimitada por estas diretivas não 
abortarão o programa. 
 Para sabermos qual foi o erro que ocorreu e 
podermos tratá-lo, a função IOResult deve ser utilizada, 
após a operação de entrada e saída desejada. Caso o valor 
retornadopor IOResult seja zero não houve erro; em caso 
contrário o número do erro é retornado. 
56
Exemplo utilizando {$I-}, {$I+} e IOResult
Executável
Código Fonte
Program Adiciona_Mais (Input{teclado}, Output{vídeo}, Arq{e/s});
 Var 
 Arq: Text;
 Caminho: String;
Begin 
 write(output, ’Diga o caminho e o nome do arquivo: ’);
 readln(input, Caminho);
 assign(Arq, Caminho);
 {$I-} Append(Arq); {$I+}
 if IOResult = 0 then
 writeln(Arq, ’Mais uma nova linha adicionada no final’)
 else 
 begin
 rewrite(Arq);
 writeln(Arq, ’Minha primeira linha’);
 end
 close(Arq);
End. 
57
Professores:
Dante Corbucci Filho
Alexandre Plastino
Aula 10
Conteúdo:
- Tipos Estruturados (3a_ Parte)
 - Arquivos Texto (Text Files)

Outros materiais