Upload
vannguyet
View
222
Download
0
Embed Size (px)
Citation preview
1
Instituto Superior Técnico,Dep. de Engenharia Mecânica - ACCAII
Manipulação avançada de ficheiros
• Leitura / escrita de ficheiros
• Formato ascii
• Formato .mat
• Ligação a folhas de cálculo (Microsoft Excel)
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Entrada / Saída de dados
2222
2
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Entrada / Saída de dados
3333
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010 4444
ASCII: .txt
.dat
Binário: .mat
Folha de cálculo: .xls
Formatos dos ficheiros de dados
(ficheiros de dados/texto típicos,podem ser abertos com o Notepad)
(ficheiros em formato proprietátioque SÓ podem ser abertos com oMatlab. Guardam os nomes econteúdo das variáveis)
(podem ser aberto com o Microsoft Excel)
3
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Revisão das instruções entrada / saída
5555
Funções entrada: teclado → input
ficheiros → load
Funções saída: ecrã ← disp
ecrã / ficheiros ← fprintf
ficheiros ← save
>> Avaliacao = input('Tipo de avaliação: ','s');
Tipo de avaliação: Testes
>> Notas = input('Notas [N1 N2]: ');
Notas [N1 N2]: [12 14]
>> fprintf('Média dos %s é %.2f',Avaliacao,mean(Not as))
Média dos Testes é 13.00
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Leitura / escrita simples de ficheiros
6666
Funções entrada: ficheiros → load
Funções saída: ficheiros ← save
>> A = [8 9]; B = [ 1 2 3];
>> save dados A B
>> clear all
>> load dados
>> A
A =
8 9
>> B
B =
1 2 3
4
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Leitura / escrita simples de ficheiros
7777
>> A = [8 9]; B = [ 1 2 3];
>> save dados.txt A B -ascii
>> clear all
>> load dados
??? Error using ==> load
Unable to read file dados: No such file or director y.
>> load -ascii dados.txt
??? Error using ==> load
Number of columns on line 1 of ASCII file C:\MATLAB\dados.txt
must be the same as previous lines.
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Leitura / escrita formatada de ficheiros
8888
• Leitura / escrita de ficheiros em que os dados são
armazenados com uma formatação específica
(conhecida!)
• Exemplos que justificam a necessidade:
• compatibilidade entre software quando os ficheiros de
dados são partilhados com outras aplicações
• os dados são gerados por outras aplicações, por exemplo
os controladores das cartas de entrada para aquisição de
sinais gerados por sensores
5
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010 9999
Processo de leitura/escrita em ficheiros
Abertura
Fecho
Manipulação− Leitura− Escrita Total− Escrita c/ Anexação
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Abertura / fecho de ficheiros
10101010
Abertura: fid = open(nome_ficheiro, permissão)
Fecho: fclose(fid)
Permissões
permissão Descrição
r abertura para
leitura
w abertura para
escrita
a anexação
Identificadores
fid Descrição
-1 erro de abertura
0 a 2 identificadores
reservados para o
MATLAB
3 ousuperior
identificador do
ficheiro
6
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Exemplos
11111111
>> fid = fopen('dados.txt','r');
>> if fid == -1
disp('File not open successful')
else
% ...
end
>> %...
>> closeresult = fclose(fid);
>> if closeresult == -1
disp('There were problems closing the file.')
elseif closeresult == 0
disp('File closed.')
end
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Instrução de escrita de ficheiros
12121212
Descrição: grava num ficheiro o conteúdo formatado
de uma cadeia de caracteres (também serve para
escrever no ecrã)
Sintaxe: f printf(fid,texto)
fprintf(fid,formato, var)
7
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010 13131313
% 0- 12 .5 u
Inicio da
especificação
Flags Precisão
Caracter de
controlo
Tamanho
da cadeia
Especificação da cadeia de formatação:
Especificação da formatação
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Utilização de caracteres de formatação
14141414
Descrição Caracteres Descrição
Flags
Sinal -
Sinal +
Espaço
Zero
Justificação à esquerda
Impressão do caracter de sinal ("+" ou "-" )
Insere espaço em branco
Enche espaço disponível com zeros
Caracteres
de
formatação
\n
\t
\b
%%
New line
Horizontal tab
Backspace
Símbolo de percentagem
Caracteres de
controlo
%c%d,%i
%u%f%s
Single character
Decimal notation (signed)
Decimal notation (unsigned)
Fixed-point notation
String of characters
8
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Exemplo: fprintf
15151515
>> test_1
The loop variable is 1
The loop variable is 2
The loop variable is 3
>>
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Escrita não destrutiva: Anexação
16161616
Objectivo: anexar novos dados sem destruir o conteúdo existente
Abertura: fid = open(nome_ficheiro, permissão)
Escrita: fprintf(fid,formato, var)
9
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Instruções de leitura de ficheiros
17171717
comando Descrição
fgetl
Lê uma cadeia de carácteres do ficheiro
especificado linha a linha até ao carácter “end of
line”. O final do finheiro é assinalado pelo, que
pode ser testado com a instrução feof(fid) .
fgetsSemelhante à instrução fgetl , mas mantém o
carácter de controlo \n no final da linha.
Sintaxe:
tline = fgetl(fid)
tline = fgets(fid,numero_caracteres_maximo)
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Exemplo: load
18181818
>> load subjexp
??? Error using ==> load
Unable to read file subjexp: No such file or directory.
>> load subjexp.dat
??? Error using ==> load
Unknown text on line number 1 of ASCII file
D:\MyTeaching\200910\CP\Lectures\AT16\subjexp.dat
"a".
10
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Exemplo: fgetl
19191919
>> fileex
5.30 a
2.20 b
3.30 c
4.40 a
1.10 b
File close successful
eof
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Instruções de leitura de ficheiros
20202020
comando Descrição
fscanf
Lê dados formatados a partir de um ficheiro
para variáveis compativeis com o formato
especificado. Podem ser usados os caracteres
de controlo da instrução fprintf .
textscanSemelhante à instrução fscanf mas o
resultado é armazenado num cell array .
Sintaxe:
[variável,contador] = fscanf(fid,formato,tamanho)
cell_array = textscan(fid,formato)
11
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Exemplo: fscanf
21212121
>> fileex_2
mat =
5.3000 2.2000 3.3000 4.4000 1.1000
97.0000 98.0000 99.0000 97.0000 98.0000
nums =
5.3000 2.2000 3.3000 4.4000 1.1000
text =
abcab
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Exemplo: textscan
22222222
>> fileex
5.30 a
2.20 b
3.30 c
4.40 a
1.10 b
File close successful
12
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Ligação a folhas de cálculo
23232323
comando Descrição
xlswriteInstrução de escrita numa folha de cálculo com
extensão .xls (formato padrao do Microsoft
Excel)
xlsreadInstrução de leitura a partir de uma folha de
cálculo com extensão .xls (formato padrao do
Microsoft Excel)
Sintaxe:
[estado,mensagem]= xlswrite(nome,vars,folha,gama)
[numérica,texto,outros] = xlsread(nome)
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Exemplo Matlab2Excel
24242424
13
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
>> test_xls
nums =
12.7000 5.0200 -98.0000
63.9000 -0.2000 56.0000
Exemplo Excel2Matlab
25252525
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
>> test_xls2
nums =
123
333
432
987
text =
'a' '' 'Cindy'
'b' '' 'Suzanne'
'c' '' 'David'
'd' '' 'Burt'
Exemplo Excel2Matlab
26262626
14
José Borges - Miguel Pedro Silva Computação e Programação 2009 / 2010
Referências
27272727
• Capítulo 8 de Stormy Attaway (2009), “Matlab: A Practical
Introduction to Programming and Problem Solving”, Elsevier.