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

Post on 11-Jan-2019

217 views 0 download

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

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)

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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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