1 Introdução a Programação COM 100 REGISTROS e ARQUIVOS Aula 09.

Post on 18-Apr-2015

112 views 0 download

Transcript of 1 Introdução a Programação COM 100 REGISTROS e ARQUIVOS Aula 09.

1

Introdução a Programação

COM 100

REGISTROS e ARQUIVOS

Aula 09

2

Registros

• tipo de estrutura de dados heterogêneo

• é uma estrutura definida pelo usuário que representa uma diversidade de valores distintos

• os elementos de um record são denominados campos, onde cada campo de um determinado record possui um nome e um tipo definido.

• utiliza-se o Var ou Type para definir-se um record

3

Exemplo:

Type

TipoRegistro = Record

Nome : String[20];

CPF : String[14];

Tel : String[10];

Cidade : String[20];

Estado : String[10];

End; {fim do registro}

Var

X : TipoRegistro;

4

Begin

X.Nome := ‘Axl Rose’;

Readln(X.CPF);

Readln(X.Tel);

X.Cidade := ‘Maryanna’;

X.Estado := ‘Imprevisível’;

Writeln(X.Nome);

Writeln(X.CPF);

Writeln(X.Tel);

Writeln(X.Estado)

End.

5

Begin

X.Nome := ‘Axl Rose’;

Readln(X.CPF);

Readln(X.Tel);

X.Cidade := ‘Maryanna’;

X.Estado := ‘Imprevisível’;

With X Do

Writeln(Nome);

Writeln(Estado);

Writeln(Tel)

End.

6

Observação:

Quando se escreve um procedimento ou função que recebe um array como argumento, o tipo do array deve estar predefinido num comando TYPE.

Exemplo:

Type

TipoVetor ; Array[1..10] of Byte;

...

...

Procedure Inchalah( V : TipoVetor );

7

Comandos - Arquivo

ASSIGN: associa a variável do tipo arquivo a um nome de arquivo específico o disco

ASSIGN(VarArquivo, “NomeDisco.txt”);

8

Comandos - Arquivo

REWRITE: cria um novo arquivo e o abre para operações de gravação (escrita). Alternativamente, o comando APPEND abre um arquivo já existente, de modo que você possa adicionar um novo texto no fim do arquivo.

Utiliza-se os procedimentos WRITE E WRITELN.

9

Comandos - Arquivo

RESET: abre um arquivo existente, de modo que você pode usar o READ e READLN para ler os valores de dados e linhas de texto de um arquivo.

OBS. Um arquivo texto pode ser aberto somente para uma operação por vez: gravação, junção ou leitura.

10

Diretivas {$I-} e {$I+}

Desligam ou ligam a verificação de erros de I/O. Especificamente, você pode desligar a verificação de erros ara evitar um erro em tempo de execução, que ocorreria se você tenteasse abrir um arquivo inexistente para leitura ou junção. A função IORESULT informa se ocorreu ou não algum erro

11

Comandos - Arquivo

A função EOF retorna com um valor do tipo BOOLEAN, que indica se o programa chegou ou não ao fim de um arquivo, durante uma operação de leitura.

O comando CLOSE fecha o arquivo que foi aberto para leitura ou escrita.

12

Variável de Arquivo-Texto

Exemplo:Var VarDeArquivo : TEXT;

uma variável do tipo TEXT pode ser definida local ou globalmente, mas diferentemente das outras estruturas, o comprimento de uma variável de arquivo não é especificado.

13

Variável de Arquivo-Texto

Const NomeArqDisco = `AgendaRed.txt`

Var Agenda : TEXT;

BEGINAssign(Agenda, NomeArqDisco);

END.

14

BEGINAssign(Agenda, NomeArqDisco);

Rewrite(Agenda); {cria um novo arquivo para operação de escrita}

Append(Agenda); {bre um arquivo existente para escrever um novo texto no final do mesmo}

Reset(Agenda); {abre um arquivo existente para a leitura} END.

15

OBS.: se um nome de arquivo já existir no disco, o comando Rewrite escreverá por cima dele, logo a versão antiga será perdida.

Os comandos Append e Reset necessitam que um arquivo exista no disco.Para evitar erros em tempo de execução:

16

{$I-}Reset(Agenda)

{$I+}

If IORESULT = 0 Then{Lê o arquivo}

Else{Ocorreu um erro de I/O}

17

Escrevendo Dados:

Write(Agenda, ‘Esta string vai ser escrita’);

Writeln(Agenda, ‘Outra string !!!!’);

OBS.: caracteres de retorno de carro e nova linha o final.

18

Lendo Dados:

Read(Agenda, <lista de variáveis>);

OBS.: lê um ou mais valores de dados de um arquivo aberto e deixa o ponteiro de arquivo na linha atual; assim os comandos subseqüentes poderão ler informações adicionais na mesma linha.

19

Lendo Dados:

Readln(Agenda, <lista de variáveis>);

OBS.: lê um ou mais valores de dados, de um arquivo aberto, na linha atual e depois pula par ao início da próxima linha do arquivo.nformações adicionais na mesma linha.

20

Embora um arquivo do tipo texto contenha somente caracteres ASCII, um comando Read ou Readln pode ler apropriadamente os valores de dados para ambas as variáveis, numéricas ou string.

21

VarTotal : Real;Arq : Text;Produto : String[20];

BeginAssign(Arq, ‘ESTOQUE.TXT’);Reset(Arq);...Readln(Arq, Total, Produto);

....

22

Os caracteres a seguir, servem como delimitadores entre um e outro valor dentro de um arquivo texto:a) um caractere de espaçob) um caractere de tabulaçãoc) um caractere de return

Quando na leitura de uma seqüência de valores numéricos de um arquivo texto, a procedure READ reconhece esses caracteres como separadores entre um valor e outro.

23

Entretanto, uma tentativa de ler uma string de caracteres não-numéricos pra uma variável numérica resulta em erro em tempo de execução, exatamente como aconteceria com uma operação de entrada pelo teclado.

Tipicamente, um programa usa uma estrutura de loop para ler os dados armazenados em um arquivo seqüencial.

24

Cada iteração do loop pode ler um item de dado, ou uma linha de itens de dados. Se você tiver certeza do número de itens ou linhas que estão armazenadas no arquivo, pderá usar um loop FOR para ler os dados.

Entretanto, uma abordagem mais típica é usar a função EOF (end of file).

25

While not EOF(Agenda) DoBegin

Readln(Arq, Total, Produto);

...End;

OBS.: o programa deve fechar o arquivo quando a operação de leitura ou escrita terminar.

26

FECHANDO UM ARQUIVO

Close(Agenda);

esse comando fecha o arquivo externo em disco, mas não termina a associação entre a variável de arquivo o nome do arquivo. o programa pode usar novamente um comando RESET, REWRITE, ou APPEND, para reabrir o mesmo arquivo (sem fazer um novo ASSIGN).

27

Program Tabajara;Const

MaxAlunos = 30;Type

RegAluno : RecordNome : String[20];Nota : Real

End;Var

Classe : Array[1 .. MaxAlunos] of RegAluno

ArqClasse : Text;

28

BEGIN{lendo os dados}For i := 1 To MaxAlunos Do

BeginRead(Classe[ i ].Nome); Read(Classe[ i ].Nota)

End;

{escrevendo os dados}Assign(ArqClasse, “Classe.txt”);Rewrite(ArqClasse);

29

For i := 1 To MaxAlunos Do Begin Write(ArqClasse, Classe[ i ].Nome); Writeln(ArqClasse, Classe[ i ].Nota) End;

{fechando o arquivo}

Close(ArqClasse);

30

{abrindo o arquivo para leitura}Reset(ArqClasse);i := 1;While not EOF(ArqClasse) Do Begin Readln(Classe[ i ].Nome, Classe[ i ].Nota); Inc(i); End;

...END.

31

ARQUIVOS TIPADOS Um arquivo tipado contém uma seqüência de componentes individuais acessíveis, todos pertencendo ao mesmo tipo de dado ou estrutrua de dados.

Var VariavelARq : FILE OF TipoArquivo;

TipoArquivo: padrão, definido pelo usuário, exceto outro tipo FILE.

32

ARQUIVOS TIPADOS X TEXTO

um arquivo tipado aberto está disponível para ambas operações, leitura e escrita, ao mesmo tempo.

o Turbo Pascal usa os seus próprios formatos internos de dados para armazenar os componentes de um arquivo tipado no disco. (não é armazenado o formato de linha a linha de texto em ASCII).

33

ARQUIVOS TIPADOS X TEXTO

um programa que funciona com um arquivo tipado usa a procedure SEEK, embutida no Turbo Pascal, para acessar um determinado registro em qualquer posição especificada dentro do arquivo. O programa pode ler o registro para a memória ou escrever um novo registro na mesma posição.

34

o comando SEEK é utilizado na programação de arquivos com acesso randômico.

PASSOS BÁSICOS

1) defina o tipo do componente do arquivo e declare a variável de arquivo como uma estrutura do tipo FILE (as declarações TYPE e VAR).

35

2) estabeleça uma associação entre a variável de arquivo e um nome de arquivo no disco (a procedure Assign).

3) abra um novo arquivo ou um arquivo existente no disco (a procedure Reset ou Rewrite). Em ambos os casos, o arquivo está aberto tanto para a leitura como para a escrita ao mesmo tempo.

36

4) especifique uma determinada posição de registro no arquivo, como o alvo de uma operação subseqüente de leitura ou escrita (SEEK). Leia o registro para a memória (READ), ou escreva um novo registro para a posição de arquivo selecionada (WRITE).

5) feche os arquivos no final das operações (CLOSE).