Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo...

26
11/2/2015 1 D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre 2015-2016 Aula Teórica 14 Ficheiros de dados Processo de leitura/escrita em ficheiros de texto Manipulação de uma base de dados Ficheiros de dados do Matlab (.mat) Folhas de cálculo (.xls) Estruturas de dados Agregam diversos valores com alguma relação lógica entre si, podendo estes ser do mesmo tipo, ou de tipos diferentes Computação e Programação 2015 / 2016 2 Wrap Up da última aula Tipos de dados Estruturas de dados Iguais Arrays (vectores ou matrizes) Diferentes Structures (estruturas) Cell arrays (tabelas de células)

Transcript of Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo...

Page 1: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

1

D.E.M. – Área Científica de Controlo Automação e Informática Industrial

Computação e ProgramaçãoMEMec, LEAN - 1º Semestre 2015-2016

Aula Teórica 14

• Ficheiros de dados• Processo de leitura/escrita em ficheiros de texto • Manipulação de uma base de dados• Ficheiros de dados do Matlab (.mat)• Folhas de cálculo (.xls)

Estruturas de dados

• Agregam diversos valores com alguma relação lógica entre si, podendo estes ser do mesmo tipo, ou de tipos diferentes

Computação e Programação 2015 / 2016 2

Wrap Up da última aula

Tipos de dados Estruturas de dados

Iguais • Arrays (vectores ou matrizes)

Diferentes • Structures (estruturas)• Cell arrays (tabelas de células)

Page 2: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

2

Struct

(estrutura)

Vantagens

• os campos possuem identificadores, o que torna mais claro que tipo de informação contêm

• É fácil agrupar várias estruturas com a mesma “forma” num vector

Desvantagens

• numa estrutura não se pode aceder à informação através de indíces numéricos, o que faz com que não se possa percorrer toda a informação com ciclos

3

Wrap Up da última aula

• agrupa dados logicamente relacionados de qualquer tipo, num conjunto de campos

Computação e Programação 2015 / 2016

disp(aluno.numero)

Struct

(estrutura)

Criação • Preferencialmente através da função (constructor) struct. Exemplo:

Acesso aos dados

• Usando o operador . antes do nome do campo. Exemplo:

4

Wrap Up da última aula

• agrupa dados logicamente relacionados de qualquer tipo, num conjunto de campos

Computação e Programação 2015 / 2016

aluno = struct('nome','João','numero',22331)

Page 3: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

3

Alinhamento da AT 14

• Ficheiros de dados

• Processo de leitura/escrita em ficheiros de texto

• Manipulação de uma base de dados

• Ficheiros de dados do Matlab (.mat)

• Folhas de cálculo (.xls)

5Computação e Programação 2015 / 2016

Entrada / Saída de dados

• O disco rígido providencia um suporte não-volátil para armazenamento de dados (ao contrário da memória do computador cuja informação se perde ao terminar o programa)

6Computação e Programação 2015 / 2016

Page 4: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

4

• A gestão do conteúdo, comunicações, e a organização do disco rígido está normalmente a cargo do Sistema Operativo (Windows, MacOS, Unix, etc.)

• Os programas podem aceder (ler/escrever) à informação no disco rígido sob a forma de ficheiros

• Os ficheiros são blocos de informação identificados pelo Sistema Operativo com um dado nome, cuja forma exacta depende do Sistema Operativo

nome_do_ficheiro.extensão

Entrada / Saída de dados

7Computação e Programação 2015 / 2016

Formatos usuais dos ficheiros de dados

ASCII

.txt

.dat

.csv(…)

Ficheiros com dados em formato de texto (são editáveis nos editores de texto comuns

como o Notepad)

Binário .mat

Ficheiros em formato específico do MATLAB,

guardam os nomes e conteúdo das variáveis

Folha de cálculo

.xls Folhas de cálculo do Excel

8Computação e Programação 2015 / 2016

Page 5: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

5

Alinhamento da AT 14

• Ficheiros de dados

• Processo de leitura/escrita em ficheiros de texto

• Manipulação de uma base de dados

• Ficheiros de dados do Matlab (.mat)

• Folhas de cálculo (.xls)

9Computação e Programação 2015 / 2016

Leitura / escrita formatada de ficheiros

• Os ficheiros não são apenas uma forma de guardar informação no disco rígido, podem ser também uma forma de comunicação relativamente simples e segura entre programas

• Um ficheiro de texto com dados, criado num programa especializado, pode ser facilmente consultado ou modificado em qualquer editor de texto comum

• Uma função pode ser facilmente criada para ler o seu conteudo e aplicá-lo nos cálculos de outro programa

10Computação e Programação 2015 / 2016

Page 6: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

6

Processo de leitura/escrita em ficheiros

Abertura

Fecho

Manipulação

Usualmente uma operação de− Leitura− Escrita Total− Escrita em Anexo

Cria ligação entre o ficheiro no disco rígido e um identificador

no nosso código fonte

Termina ligação do ficheiro com o programa, libertando-o para

ser utilizado por outros programas

1)

2)

3)

11Computação e Programação 2015 / 2016

Processo de leitura/escrita em ficheiros

Abertura

Fecho

Manipulação

fgetl

fgets

fscanf

textscan

fprintf

fopen

fclose

1)

2)

3)

Funções básicas

Leitura

Escrita

12Computação e Programação 2015 / 2016

Page 7: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

7

Abertura de ficheiros

• Cria ligação entre o ficheiro no disco rígido e um identificador no código fonte do programa

Sintaxe: fid = fopen(nome_ficheiro, permissão)

Permissões

permissão Descrição

r abertura para leitura

w abertura para escrita

a anexação

Identificadores

fid Descrição

-1 Erro na abertura

0 a 2 identificadores reservados para o MATLAB

3 ousuperior

identificador do ficheiro

13Computação e Programação 2015 / 2016

Fecho de ficheiros

• Termina ligação do ficheiro com o programa, libertando-o para ser utilizado por outros programas

Sintaxe: resultado = fclose(fid)

Identificadores

resultado Descrição

-1 erro no fecho

0 sucesso

14Computação e Programação 2015 / 2016

Page 8: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

8

Processo usual de abertura/fecho

• Excerto de código fonte num script

representando o processo de abertura e fecho de um ficheiro

15Computação e Programação 2015 / 2016

Escrita em ficheiros

Descrição: grava num ficheiro o conteúdo formatado de uma cadeia de caracteres (também serve para escrever no ecrã)

Sintaxe: fprintf(fid,texto)

fprintf(fid,formato,var)

Permissão necessária:'w' – escrita (cria um novo ficheiro ou re-escreve o ficheiro existente)

'a' – anexação (acrescenta a informação ao final do ficheiro)

16Computação e Programação 2015 / 2016

Page 9: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

9

Exemplo de escrita em ficheiro de texto

Juntar o sufixo 't' à permissão para ficheiros texto (ver help da função fopen)

Ciclo que percorre o

vector e escreve os seus

elementos linha-a-linha

17Computação e Programação 2015 / 2016

Variável contendo o

identificador do ficheiro

Exemplo de escrita em ficheiro de texto

>> escreveMeusDados

>>

• Notepad

• Editor do MATLAB• A execução do script

anterior cria um novo ficheiro de texto chamado MeusDados.txt com o conteúdo do vector

18Computação e Programação 2015 / 2016

Page 10: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

10

Exemplo de escrita em ficheiro de texto

Permissão para anexação

Devido à forma como funciona

a função fprintf no

MATLAB, o ciclo for não é

realmente necessário

nalguns casos

19Computação e Programação 2015 / 2016

Exemplo de escrita em ficheiro de texto

>> escreveMeusDados2

>>

• Notepad

• Editor do MATLAB• A execução do script

anterior anexa o novo conjunto de valores ao ficheiro MeusDados.txt

20Computação e Programação 2015 / 2016

Page 11: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

11

Exemplo de código fonte completo

21Computação e Programação 2015 / 2016

Leitura de ficheiros linha-a-linha

função Descrição

fgetlLê uma cadeia de caracteres do ficheiro especificado até encontrar o carácter \n, descartando-o

fgets

Semelhante à instrução fgetl mas mantém o carácter de controlo \n na cadeia de caracteres. Permite especificar um númeromáximo de caracteres a ler.

feofDevolve um valor lógico verdadeiro se na última operação de leitura for encontrado o fim do ficheiro

22Computação e Programação 2015 / 2016

Page 12: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

12

Leitura de ficheiros linha-a-linha

Descrição: ambas as funções lêm uma linha do ficheiro

Sintaxe: tline = fgetl(fid)

tline = fgets(fid,num_caract_maximo)

Permissão necessária: 'r' – leitura

23Computação e Programação 2015 / 2016

Exemplo de leitura linha-a-linha

eof

Enquanto não for encontrado o fim

do ficheiro

Obter nova linha

24Computação e Programação 2015 / 2016

Page 13: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

13

>> leitura_linha_a_linha

5.3 a

2.2 b

3.3 c

4.4 a

1.2 b

>>

• A execução do script anterior apresenta os dados com a nova formatação no ecrã. Note-se que, neste caso, os dados não ficaram guardados em memória, já que todas variáveis são redefinidas a cada passagem pelo ciclo.

Exemplo de leitura linha-a-linha

25Computação e Programação 2015 / 2016

Exemplo de leitura de ficheiro com cabeçalho

Leitura do cabeçalho de dimensão conhecida

Leitura dos dados

26Computação e Programação 2015 / 2016

Page 14: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

14

>> leitura_com_cabecalho

5.3 a

2.2 b

3.3 c

4.4 a

1.2 b

>> disp(cabecalho)

Guarda valores e código

Data: 2011-11-01

Autores: José e Mariana

>> disp(cabecalho(2,:))

Data: 2011-11-01

Exemplo de leitura de ficheiro com cabeçalho

27Computação e Programação 2015 / 2016

Leitura de ficheiros completos

função Descrição

fscanf

Lê dados formatados a partir de um ficheiro para variáveis compativeis com o formato especificado. Utiliza os mesmos caracteres de controlo da instrução fprintf.

textscanSemelhante à instrução fscanf mas o resultado é armazenado num cell array .

28Computação e Programação 2015 / 2016

Page 15: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

15

Exemplo de leitura de ficheiro completo

Leitura do conteúdo completo

Separação e conversão dos

dados

29Computação e Programação 2015 / 2016

>> leitura_de_uma_vez

dados =

5.3450 2.2220 3.3320 4.4160 1.1780

97.0000 98.0000 99.0000 97.0000 98.0000

valores =

5.3450 2.2220 3.3320 4.4160 1.1780

codigo =

abcab

Exemplo de leitura de ficheiro completo

• A execução do script anterior guarda todos os dados na forma numérica sendo necessária a reconversão dos caracteres utilizando a função char.

30Computação e Programação 2015 / 2016

Page 16: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

16

Alinhamento da AT 14

• Ficheiros de dados

• Processo de leitura/escrita em ficheiros de texto

• Manipulação de uma base de dados

• Ficheiros de dados do Matlab (.mat)

• Folhas de cálculo (.xls)

31Computação e Programação 2015 / 2016

Nome: Joã Silmes

Número: 22331

Nota: 15

30

Nome: João Silva

Número: 22331

Nota: 15

2

Nome: João Silva

Número: 22331

Nota: 15

1

Turma: AM21T

Alu

no

s

Turma AM21T

Número da ficha Nome Numero de Aluno Nota

1 João Silva 22331 15

2 Paulo Almeida 98734 17

… … … …

30 Manuel Gomes 12345 12

Exemplo base de dados de alunos

Usar um vector de estruturas para construir uma base de

dados da turma

32Computação e Programação 2015 / 2016

Page 17: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

17

>> gerir_alunos

Introduza o número do aluno, ou 0 para terminar: 12345

Introduza o nome: Antero Palhinhas

Introduza a nota: 14

Novo aluno!

Introduza o número do aluno, ou 0 para terminar: 98765

Introduza o nome: Julia Mansinho

Introduza a nota: 17

Novo aluno!

Introduza o número do aluno, ou 0 para terminar: 45678

Introduza o nome: Vitor Faquinha

Introduza a nota: 19

Novo aluno!

Exemplo de introdução manual

33Computação e Programação 2015 / 2016

Ler dados para um vector de estruturas

• A leitura dos dados para a ficha de um aluno pode ser feita de uma só vez, se for conhecido o formato da informação fornecida

• Esta forma é mais comum na leitura de ficheiros de textoformatados

• Neste caso é necessário dar quatro passos:1. Ler todos os dados de um aluno para uma string

2. Partir a string no número de campos desejado

3. Converter os valores numéricos

4. Atribuir os dados aos campos da estrutura

34Computação e Programação 2015 / 2016

Page 18: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

18

Ler dados para um vector de estruturas

• O vector completo de alunos pode ser lido num ciclo, que se repete até ao fim do ficheiro, em que, a cada nova linha, se acrescenta uma nova estrutura (um novo elemento) ao vector

• Todos os dados de um aluno são escritos na mesma linha do ficheiro, podendo ser separados por caracteres especiais, ou organizados por colunas

• No caso de serem separados por caracteres especiais, a função strtok pode ser utilizada para fazer a partição da string

35Computação e Programação 2015 / 2016

Ler dados para um vector de estruturas

• Caso os dados sejam organizados por colunas, basta utilizar os índices da string

lida do ficheiro para separar os dados.

36Computação e Programação 2015 / 2016

Page 19: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

19

Ler dados para um vector de estruturas

>> turmaMEMec = leTurmaFicheiro('turma_MEMec.dat');

>> apresentaTurma(turmaMEMec);

Numero Nome Nota

12345 Antero Palhinhas 14

98765 Julia Mansinho 17

45678 Vitor Faquinha 19

Dados organizados por colunas [número] [nome] [nota]

37Computação e Programação 2015 / 2016

Escrever um vector de estruturas

• A escrita para um ficheiro requer que seja fornecido um identificador à função fprintf

38Computação e Programação 2015 / 2016

Page 20: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

20

Escrever um vector de estruturas

• A mesma função pode ser utilizada para escrever a base de dados para o ecrã ou para um ficheiro, dado que o identificador 1 é reservado pelo MATLAB para o ecrã

>> escreveTurma(turma,1)

Numero Nome Nota

12345 Antero Palhinhas 14

98765 Julia Mansinho 17

45678 Vitor Faquinha 19

39Computação e Programação 2015 / 2016

Escrever um vector de estruturas

>> id = fopen('BaseDeDados.txt','wt');

>> escreveTurma(turma,id);

>> fclose(id);

40Computação e Programação 2015 / 2016

Page 21: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

21

Alinhamento da AT 14

• Ficheiros de dados

• Processo de leitura/escrita em ficheiros de texto

• Manipulação de uma base de dados

• Ficheiros de dados do Matlab (.mat)

• Folhas de cálculo (.xls)

41Computação e Programação 2015 / 2016

Função pré-definida load *revisão

Descrição: carrega de um ficheiro para o workspace

um conjunto de variáveis sem formatação

Sintaxe: load

load NomeFicheiro Variáveis

load(NomeFicheiro, 'Variáveis')

>> load meu_ficheiro

>> load meu_ficheiro variavel_2

>> load meu_ficheiro var*

>> load ('meu_ficheiro', 'variavel_1');meu_ficheiro.mat

42Computação e Programação 2015 / 2016

Page 22: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

22

Função pré-definida save *revisão

Descrição: grava num ficheiro um conjunto de

variáveis sem formatação

Sintaxe: save

save NomeFicheiro Variáveis

save(NomeFicheiro, 'Variáveis')

>> save meu_ficheiro

>> save meu_ficheiro variavel_1 variavel_2

>> save meu_ficheiro v*

>> NomeFicheiro = 'meu_ficheiro';

>> save(NomeFicheiro, 'variavel_1')meu_ficheiro.mat

43Computação e Programação 2015 / 2016

Anexação de dados a um ficheiro .mat

>> save –append meu_ficheiro nova_variavel

>> whos -file meu_ficheiro

Name Size Bytes Class Attributes

nova_variavel 1x1 8 double

variavel_1 1x1 8 double

variavel_2 1x1 8 double

meu_ficheiro.mat

44Computação e Programação 2015 / 2016

Page 23: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

23

Alinhamento da AT 14

• Ficheiros de dados

• Processo de leitura/escrita em ficheiros de texto

• Manipulação de uma base de dados

• Ficheiros de dados do Matlab (.mat)

• Folhas de cálculo (.xls)

45Computação e Programação 2015 / 2016

Ligação a folhas de cálculo

função Descrição

xlswriteInstrução de escrita numa folha de cálculo com extensão .xls (formato padrão do Microsoft Excel)

xlsreadInstrução de leitura a partir de uma folha de cálculo com extensão .xls (formato padrão do Microsoft Excel)

46Computação e Programação 2015 / 2016

Page 24: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

24

Descrição: cria uma folha de Excel, ou escreve dados numa folha

já existente, e numa dada gama de índices

Sintaxe: xlswrite(nome,M,folha,gama)

Exemplo Matlab2Excel

>> matriz = [12.7 1.98 -99

11.3 2.01 -87];

>> xlswrite('meu_teste.xls',matriz);

>>

47Computação e Programação 2015 / 2016

Exemplo Matlab2Excel

>> matriz = [12.7 1.98 -99

11.3 2.01 -87];

>> xlswrite('meu_teste.xls',matriz,'Minha Folha', ...

'B3:D4');

Acrescenta a nova folha ao ficheiro e escreve a matriz

nos índices indicados

48Computação e Programação 2015 / 2016

Page 25: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

25

Descrição: lê dados a partir de uma folha de Excel, separando a informação numérica da informação de texto

Sintaxe: [num,txt] = xlsread(nome,folha,gama)

Exemplo Excel2Matlab

>> val = xlsread('meu_teste.xls')

val =

12.7000 1.9800 -99.0000

11.3000 2.0100 -87.0000

49Computação e Programação 2015 / 2016

>> [num,text] = xlsread('meu_teste.xls','Grupo',...

'A3:C4')

num =

423

987

text =

'c' '' 'David'

'd' '' 'Burt'

Exemplo Excel2Matlab

Lê da folha e gama especificadas, e atribui os

valores numéricos a um array, e o texto a um cell array

50Computação e Programação 2015 / 2016

Page 26: Slides Computação e Programação MEMec+LEAN · D.E.M. – Área Científica de Controlo Automação e Informática Industrial Computação e Programação MEMec, LEAN - 1º Semestre

11/2/2015

26

• Fechar sempre os ficheiros que foram abertos.

• Verificar sempre se os ficheiros foramcorrectamente abertos e fechados.

• Utilizar uma repetição até atingir o fim do ficheiroquando se lê um ficheiro linha-a-linha, para garantirque toda a informação é lida.

• Ter o cuidado de utilizar a string de formataçãocorrecta com as funções fscanf ou textscan.

Boas práticas de Programação

Computação e Programação 2015 / 2016 51

As aulas teóricas contêm contribuições dos profs. José Borges e Miguel Silva

52

Referências

• Capítulo 9 de Stormy Attaway (2012), “Matlab: A Practical

Introduction to Programming and Problem Solving”, Elsevier.

Computação e Programação 2015 / 2016