slides computação e programação memec+lean · d.e.m. – Área científica de controlo...
TRANSCRIPT
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