Informáticaparaas Ciênciase Engenharias Versão: C...

51
Informática para as Ciências e Engenharias Versão : C (Engenharia Civil) Aula 7 Pedro Barahona 2017 / 18

Transcript of Informáticaparaas Ciênciase Engenharias Versão: C...

Page 1: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Informática para as Ciências e EngenhariasVersão : C

(Engenharia Civil)Aula 7

Pedro Barahona2017 / 18

Page 2: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Sumário

• Ficheiros. Ficheiros de texto e binários.• Sistema de ficheiros.• Operações sobre ficheiros de texto.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 2

Page 3: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Problema da Pauta de ICE com Ficheiros [1]

• Faça um programa que produz a pauta com as notas finais de ICE poravaliação contínua, com os dados do ficheiro notasAC.txt. A pauta éescrita no ficheiro pautaAC.txt.

• O ficheiro notasAC.txt tem uma linha por aluno, com o número asnotas dos dois exercícios e do trabalho e dos dois testes do aluno (nº,exer1, exer2, trab, teste1, teste2). Os números estão separados por umespaço.

• A linha termina com um caracter “fim de linha” (representado por ↵)

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 3

58322 15.5 16.4 18.0 15.7 14.8 ↵57413 12.3 9.2 9.4 8.7 7.2 ↵55064 8.0 4.5 7.2 8.1 10.2 ↵...

notasAC.txt

Page 4: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Problema da Pauta de ICE com Ficheiros [2]

• O ficheiro pautaAC.txt tem uma primeira linha com 'Numero' e 'NotaFinal', separados por um tab (representado por ») . Depois, tem maisuma linha por cada aluno, com o número e a nota final por avaliaçãocontínua do aluno (nº e notaFinal), separados por um tab.

• A notaFinal de um aluno é:

§ um inteiro entre 10 e 20, se o aluno aprovou;

§ ‘Admitido’, se o aluno tem frequência e reprovou;

§ ‘Excluido’, se o aluno não tem frequência.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 4

Numero » Nota Final ↵58322 » 16 ↵5713 » Admitido ↵55064 » Excluido ↵...

pautaAC.txt

Page 5: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Problema [1]

1. Compreender totalmente o problema.

• Os dados de entrada e de saída estão em ficheiros de texto:notasAC.txt e pautaAC.txt.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 5

è

Numero » Nota Final ↵58322 » 16 ↵5713 » Admitido ↵55064 » Excluido ↵...

pautaAC.txt

58322 15.5 16.4 18.0 15.7 14.8 ↵57413 12.3 9.2 9.4 8.7 7.2 ↵55064 8.0 4.5 7.2 8.1 10.2 ↵...

notasAC.txt

Page 6: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Problema [2]

2. Caracterizar o problema.• Problema: Pauta de ICE com ficheiros.• Entrada: nomeFichNotas, nomeFichPauta.• Saída: nenhuma. O ficheiro nomeFichPauta é criado e escrito.

3. Generalizar o problema (sempre que for possível).• Não é possível generalizar este problema.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 6

Page 7: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Algoritmo [1]

4. Desenhar o algoritmo para resolver o problema.a) Conceber o algoritmo, decompondo o problema em sub-problemas.

• Como produzir o ficheiro tendo nomeFichNotas e nomeFichPauta?1. Ler os dados do ficheiro nomeFichNotas e colocá-los numa

matriz (notasAC).2. Gerar a matriz pauta a partir da matriz notasAC.3. Escrever os resultados no ficheiro nomeFichPauta com a matriz

pauta.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 7

Page 8: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Algoritmo [2]

b) Identificar, caracterizar e generalizar cada sub-problema.• Problema: Leitura das notas (de avaliação contínua).• Entrada: (string) nomeFichNotas.• Saída: matriz de números, com uma linha por aluno e seis

colunas (nº, E1, E2, P, T1, T2).

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 8

Page 9: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Algoritmo [3]

b) Identificar, caracterizar e generalizar cada sub-problema.• Problema: Pauta de ICE.• Entrada: matriz de números, com uma linha por aluno e seis

colunas (nº, E1, E2, P, T1, T2).• Saída: matriz de números, com uma linha por aluno e duas

colunas (nº e NF).

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 9

Page 10: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Algoritmo [4]

b) Identificar, caracterizar e generalizar cada sub-problema.• Problema: Escrita da pauta.• Entrada: (string) nomeFichPauta; matriz de números, com uma

linha por aluno e duas colunas (nº e NF).• Saída: nenhuma. O ficheiro nomeFichPauta é criado e escrito.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 10

Page 11: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Algoritmo [5]

c) Conceber o algoritmo, assumindo que os sub-problemas estãoresolvidos.

• Pauta de ICE com ficheiros ( nomeFichNotas, nomeFichPauta ) :• notasAC ç leNotas(nomeFichNotas).• pauta ç pautaICE(notasAC).• escrevePauta(nomeFichPauta, pauta).

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 11

Page 12: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Algoritmo [6]

5. Para cada sub-problema, desenhar o algoritmo para o resolver.• Leitura das notas ( nomeFichNotas ) :

(leitura de ficheiro)• Pauta de ICE ( notasAC ) :

(feito na aula teórica nº 4)• Escrita da pauta ( nomeFichPauta, pauta ) :

(escrita em ficheiro)

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 12

Page 13: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Implementação – Que questões?

1. Como é que se lê de um ficheiro?§ No problema: leNotas.

2. Como é que se escreve num ficheiro?§ No problema: escrevePauta.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 13

Page 14: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Sumário

• Ficheiros. Ficheiros de texto e binários.• Sistema de ficheiros.• Operações sobre ficheiros de texto.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 14

Page 15: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Ficheiro

• Ficheiros permitem guardar informação de forma permanente.

• Um ficheiro é um espaço de endereçamento logicamente contíguo,contendo um conjunto de dados “inter-relacionados”. É acessívelatravés de um identificador único (nome).

• O nome de um ficheiro é uma sequência de caracteres (uma string emMatlab).

• Um ficheiro pode conter dados (texto, imagem, som, etc.) ouprogramas.

• O SO encarrega-se de gerir os ficheiros e os discos em que estesresidem. A organização do disco é escondida aos programadores eutilizadores.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 15

Page 16: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Discos

• Discos rígidos (magnéticos - HD)

§ Mecânico: rotação do disco edeslocamento da cabeça para ler eescrever informação.

• Discos de estado sólido (SSD)

§ Eletrónico: acesso imediato aqualquer posição para ler eescrever.

§ Mais rápidos que os discos rígidos(magnéticos).

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 16

Page 17: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Tipos de ficheiros

• Ficheiros de texto

§ Contêm apenas bytes que podem ser interpretados comocaracteres imprimíveis: letras maiúsculas e minúsculas, algarismose sinais de pontuação.

§ A codificação usada é a ASCII ou uma derivada desta.

• Ficheiros binários

§ A interpretação do seu conteúdo está a cargo do programa que outiliza; contêm bytes que não correspondem a caracteresimprimíveis.

§ Podem ser dados (inteiros, reais), programas (códigos máquina deum dado CPU), sons (segundo uma codificação como o MP3),imagens (codificadas num formato como o JPEG), filmes (noformato MPEG, por exemplo), etc.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 17

Page 18: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Ficheiro imprime.m

• O ficheiro imprime.m contém um programa na linguagem MATLAB(que escreve mensagens no ecrã).§ Mais precisamente, repete n vezes a palavra ´hello’, mudando de

linha no final (caracter “\n”)

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 18

function imprime( n )for i=1:n

fprintf(‘hello\n’)end

end

Page 19: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

imprime.m codificado em ASCII

f102

u117

n110

c99

t116

i105

o111

n110

<sp>32

I73

m109

p112

r114

i105

m109

e101

(40

<sp>32

n110

<sp>32

)41

<nl>10

<tab>9

f102

o111

r114

<sp>32

i105

=61

149

:58

n110

<nl>10

<tab>9

<tab>9

f102

p112

r114

i105

n110

t116

f102

(40

�33

h104

e101

l108

l108

o111

\92

n110

�33

)41

;59

<nl>10

<tab>9

e101

n119

d100

<nl>10

e101

n110

d100

<nl>10

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 19

Page 20: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Sumário

• Ficheiros. Ficheiros de texto e binários.• Sistema de ficheiros.• Operações sobre ficheiros de texto.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 20

Page 21: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Sistema de ficheiros [2]

• O sistema de ficheiros está organizado hierarquicamente em forma de

árvore (“invertida”).

§ Raiz (a diretoria do topo, da qual “descendem” as outras diretorias

e os outros ficheiros).

« C:\ Windows

§ Ramos (as outras diretorias).

§ Folhas (ficheiros).

• Cada diretoria pode conter ficheiros e outras (sub-)diretorias.

• Nesta árvore, a pesquisa de um ficheiro é eficiente.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 21

Page 22: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Sistema de ficheiros [1]

x.log

Raiz C:\ WindowsDiretoria Raiz

Diretoria Ficheiro

Programs Users

Matlab Office Luis

matlab.exe word.exe

ICE AM1

fact.m20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 22

teste1.docx.m

Page 23: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Sistema de ficheiros [3]

• O separador (\ em Windows) é usado para indicar que subdiretorias eficheiros estão localizados numa diretoria.

• O caminho para o ficheiro (pathname) pode ser:§ absoluto – o caminho completo a partir da diretoria raiz;§ relativo – o caminho a partir da diretoria corrente.

• Notações especiais (que podem ser usadas nos caminhos):§ “.” representa a diretoria corrente;§ “..” representa a diretoria pai da diretoria corrente.

• O comando cd <nomeDaDiretoria> muda a diretoria corrente.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 23

Page 24: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Sistema de ficheiros [1]

x.log

Raiz C:\ WindowsDiretoria Raiz

Programs Users

Matlab Office Luis

matlab.exe

ICE AM1

fact.m20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 24

teste1.docx.m

Nome absoluto: C:\Users\Luis\ICE\fact.mNome relativo: ICE\fact.m

Diretoria corrente: C:\Users\Luis

Page 25: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Sumário

• Ficheiros. Ficheiros de texto e binários.• Sistema de ficheiros.• Operações sobre ficheiros de texto.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 25

Page 26: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Ficheiros – Abertura … fecho

• Para ler ou escrever num ficheiro, é necessário começar por abrir oficheiro.

• À medida que se lê/escreve, a posição corrente avança.• No fim das leituras/escritas, é necessário fechar o ficheiro.

Posição corrente

Início Fim

Posição corrente após a leitura

Leitura de N bytes do ficheiro.Ao deslocamento corrente é somado N.

N

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 26

Page 27: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Abertura de um ficheiro

• A função (instrução)fich = fopen( nomeFicheiro, ’r’ )fich = fopen( nomeFicheiro, ’w’ )

permitem abrir um ficheiro nomeFicheiro para leitura (’r’, read) oupara escrita (’w’, write) e retorna:§ um número não negativo, que é o identificador do ficheiro no

contexto do programa, se a operação tiver sucesso;§ −1, em caso de erro.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 27

% abertura do ficheiro ‘notasAC.txt’% em modo de leiturafichN = fopen(‘notasAC.txt’, ‘r’;% abertura do ficheiro ‘pautaAC.txt’% em modo de leiturafichP = fopen(’pautaAC.txt’, ’w’);

Page 28: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Fecho de um ficheiro

• A função (instrução)res = fclose( fich )

permite fechar o ficheiro identificado por fich e retorna:§ 0, se a operação tiver sucesso;§ −1, em caso de erro.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 28

% fecho do ficheiro ‘notasAC.txt’% aberto em modo de leitura% com identificador fichNresN = fclose(fichN);% fecho do ficheiro ‘pautaAC.txt’% aberto em modo de leitura% com identificador fichPresP = fclose(fichP);

Page 29: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Memória central (RAM)

Escrita num ficheiro

• Na escrita de um ficheiro, a informação guardada na memória central étransferida para o disco.

Zona de memóriacom N bytes

Disco

N bytes contíguos do

ficheiro

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 29

Page 30: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Escrita num ficheiro de texto

• A função (instrução)res = fprintf( fich, formato, v1, v2, ..., vn )

(com n≥0)escreve a string formato, “preenchida” com os valores v1, v2, ..., vn, noficheiro identificado por fich.

• Retorna o número de bytes escritos no ficheiro.

• NOTA: Esta função é semelhante à anterior, printf, que escreve a stringformato no ecrã.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 30

% Escrita de uma linha (no ficheiro aberto com % identificador fichP) contendo os números 50123 e 17,% separados por um tab.fprintf(fichP, ’%d\t%d\n’, 50123, 17);% o numero de bytes escritos é “desprezado”

Page 31: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Formatos

• Um formato é uma string com informação sobre o tipo dos valoresomissos (a escrever ou a ler).

• Alguns tipos frequentes:§ %d número inteiro (com sinal) ; Nota: %i é equivalente.§ %f número real§ %s string§ %c carácter

• Alguns caracteres especiais de formatação:§ \n mudança de linha§ \t tab

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 31

Page 32: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Formatos – Exemplo

>> num = 50123;>> nota = 17;>> fichE = fopen(’exemplo.txt’, ’w’);fichE = 23 % o id retornado pode ser outro>> str = ’aprovado’;>> x = fprintf(fichE, ’Numero %d\tNota final %d (%s).\n’, ...num, nota, str)% é escrita uma linha no ficheiro sem eco no terminalx = 39>> close(fichE)% podia-se ter verificado se o ficheiro foi bem fechado...>> printf(’Numero %d\tNota final %d (%s).\n’, ...num, nota, str)% a mesma ordem de escrita mas para o terminalNumero 50123 Nota final 17 (aprovado).

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 32

Page 33: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Memória central (RAM)

Leitura de um ficheiro

• Na leitura de um ficheiro, a informação guardada no disco étransferida para a memória central.

• Só se podem ler dados se a posição corrente do ficheiro não estiverno fim do ficheiro.

Zona de memóriacom N bytes

Disco

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 33

N bytes contíguos do

ficheiro

Page 34: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Teste ao fim de um ficheiro

• Para evitar ler um ficheiro para além do seu final (o que origina umerro) dever ser verificado se já se atingiu o seu fim com a instrução

valorLógico = feof( fich )

• Que permite testar se a posição corrente do ficheiro, identificado porfich, atingiu o seu final (eof é a abreviatura de end of file) e retorna:§ true (1), se tiver chegado ao fim;§ false (0), se não tiver chegado ao fim.§ Tipicamente um ficheiro é lido num ciclo WHILE

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 34

while !feof(fich)... % ler o conteúdo do ficheiro identificado por fich

end

Page 35: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Leitura de uma linha do ficheiro

• Tipicamente um ficheiro é lido linha a linha com a instruçãostr = fgetl( fich )

que lê todos os caracteres do ficheiro identificado por fich, da posiçãocorrente até ao fim da linha, e retorna-os (exceto o ‘\n’) na string str.

• Se não ler nada, por haver uma linha vazia, retorna −1.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 35

% leitura de linha do ficheiro de notas>> linha = fgetl(fichN);% Se fosse a primeira linha lida, a variável linha seria a string% ’58322 15.5 16.4 18.0 17.7 14.8�.

58322 15.5 16.4 18.0 15.7 14.8 ↵57413 12.3 9.2 9.4 8.7 7.2 ↵55064 8.0 4.5 7.2 8.1 10.2 ↵...

notasAC.txt

Page 36: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Programa [1]

6. Para cada sub-problema (começando pelos mais simples),implementar o respetivo algoritmo e testar o “sub-programa”.

• Problema: Leitura das notas (de avaliação contínua).• Entrada: (string) nomeFichNotas.• Saída: matriz de números, com uma linha por aluno e seis colunas (nº,

E1, E2, P, T1, T2).

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 36

function notas = leNotas( nomeFich )% documentacao em anexo

notas = []; % Criar uma matriz notas vazia.fich = fopen(nomeFich, 'r'); % Abrir o ficheiro para leitura.while ~feof(fich)

linha = fgetl(fich); % Ler uma linha do ficheiro.notas = [notas ; str2num(linha)];

endfclose(fich); % Fechar o ficheiro.

end

A matriz notas começa vazia poisnão se sabe o seu tamanho !

Page 37: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Regra de Programação

• O código deve ser eficiente.

§ Os vetores e as matrizes devem ser criados com as posiçõesnecessárias, para que não se escreva numa posição inexistente.

§ A única exceção à regra anterior é quando os dados vêm deficheiro e não sabemos prever o seu número. A alternativa seriapercorrer o ficheiro duas vezes, o que seria ainda mais ineficiente.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 37

Page 38: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Programa [2]

6. Para cada sub-problema (começando pelos mais simples),implementar o respetivo algoritmo e testar o “sub-programa”.

• Problema: Escrita da pauta.

• Entrada: (string) nomeFichPauta; matriz de números, com uma linha por aluno e duas colunas (nº e NF).

• Saída: nenhuma. O ficheiro nomeFichPauta é criado e escrito.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 38

function escrevePauta( nomeFich, pauta )% documentacao em anexo

fich = fopen(nomeFich, 'w'); % Abrir o ficheiro para escrita.fprintf(fich, 'Numero\tNota Final\n'); % Escrever a 1ª linha.numAlunos = size(pauta, 1);for i = 1 : numAlunos % Escrever uma linha por aluno

(...) endfclose(fich); % Fechar o ficheiro.

end

Page 39: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Programa [2]

• Para cada aluno escreve-se no ficheiro uma linha que começa pelo seunúmero e termina num valor inteiro (>= 19) ou uma das palavras‘Admitido’ ou ‘Excluido’, consoante a nota obtida.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 39

...for i = 1 : numAlunos

numero = pauta(i, 1);nota = pauta(i, 2);if nota >= 10

fprintf(fich, '%d\t%d\n', numero, nota);elseif nota >= 0

fprintf(fich, '%d\tAdmitido\n', numero);else

fprintf(fich, '%d\tExcluido\n', numero);end

end...

Page 40: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Programa [3]

7. Implementar o algoritmo que resolve o problema e testar oprograma pedido.

• Problema: Pauta de ICE com ficheiros.

• Entrada: nomeFichNotas, nomeFichPauta.

• Saída: nenhuma. O ficheiro nomeFichPauta é criado e escrito.

• Que pode ser chamada diretamente da consola

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 40

function pautaICEFich( nomeFichNotas, nomeFichPauta )% documentacao em anexo

notasAC = leNotas(nomeFichNotas);pauta = pautaICE(notasAC); % como na aula 4escrevePauta(nomeFichPauta, pauta);

end

>> pautaICEFich(�notasAC.txt�, �pautaAC.txt�)

Page 41: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Problema da Pauta de ICE com Ficheiros –versão 2

• Faça um programa que produz a pauta com as notas finais de ICE poravaliação contínua, com os dados do ficheiro notasAC_v2.txt. A pauta éescrita no ficheiro pautaAC.txt (tal como na 1ª versão).

• O ficheiro notasAC_v2.txt tem dois tipos de linhas:

§ <número do aluno>

As linhas que se seguem dizem respeito a este aluno.

§ <prova>:<nota na prova>

onde <prova> é �exercicio 1�, �exercicio 2�, ‘trabalho’, �teste 1�ou ‘teste 2�.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 41

Page 42: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Problema_v2

1. Compreender totalmenteo problema.

• O formato das linhas dos ficheirosde dados é diferente.

• O problema é semelhante pelo quenos concentraremos no sub-problema de leitura das notas.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 42

58322 15.5 16.4 18.0 15.7 14.8 ↵57413 12.3 9.2 9.4 8.7 7.2 ↵55064 8.0 4.5 7.2 8.1 10.2 ↵...

notasAC.txt

58322↵exercicio 1:15.5↵exercicio2:16.4↵trabalho 1:18.0↵teste 1:15.7↵teste 2:14.8↵57413↵exercicio 1:12.3↵exercicio2:9.2↵trabalho 1:9.4↵teste 1:8.7↵teste 2:7.2↵(...)

notasAC_v2.txt

Page 43: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Algoritmo_v2 [1]

4. Desenhar o algoritmo para resolver o problema.• Pauta de ICE com ficheiros v2 ( nomeFichNotas, nomeFichPauta ) :• Ler os dados do ficheiro nomeFichNotas e colocá-los numa matriz

(notasAC).• notasAC ç leNotas_v2(nomeFichNotas).

• Pauta ç pautaICE(notasAC).

• escrevePauta(nomeFichPauta, pauta).

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 43

Page 44: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Algoritmo_v2 [2]

5. Para cada sub-problema, desenhar o algoritmo para o resolver.Leitura das notas ( nomeFichNotas ) :§ notas ç [].§ Enquanto não se tiver chegado ao fim do ficheiro, ler uma nova

linha e extrair o tipo e o número.« tipo: 1 – nº de aluno; 2 – E1; 3 – E2; 4 – P; 5 – T1; 6 – T2.« número: o número do aluno ou a nota da prova.

§ Se tipo == 1, notas ç [notas ; numero, 0, 0, 0, 0, 0].§ Se tipo ≠ 1, notas(<linha corrente>, tipo) ç número.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 44

Page 45: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Algoritmo_v2 [3]

5. Para cada sub-problema, desenhar o algoritmo para o resolver.

Extrair tipo e número ( linha ) :§ Encontrar as posições do ‘:’ na linha.

§ Se não há ‘:’ na linha: o tipo é 1; o número ocupa todas as posiçõesda linha.

§ Se há ‘:’ na linha: descobre-se o tipo comparando a string àesquerda de ‘:’ com ‘trabalho 1’, ‘trabalho 2’ e ‘teste 1’; o númeroocupa as posições à direita de ‘:’.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 45

Page 46: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Programa_v2 [1]

6. Para cada sub-problema (começando pelos mais simples),implementar o respetivo algoritmo e testar o “sub-programa”.

• Problema: Extrair tipo e número.• Entrada: (string) linha.• Saída: (inteiro) tipo, (inteiro) número.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 46

function [tipo, numero] = extraiTipoENum(linha)% documentacao em anexo

posicoes = findstr(linha, ':');if length(posicoes) == 0 % Formato linha: <numero do aluno>

tipo = 1;numero = str2num(linha);

else % Formato da linha: <prova>:<nota na prova>(...)

endend

Page 47: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Programa_v2 [2]

• O bloco else determina o tipo e o número a devolver.

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 47

else % Formato da linha: <prova>:<nota na prova>pos = posicoes(1);prova = linha(1 : pos−1);if strcmp(prova, ’exercicio 1') == 1

tipo = 2;elseif strcmp(prova, ’exercicio 2') == 1

tipo = 3;elseif strcmp(prova, ’trabalho') == 1

tipo = 4;elseif strcmp(prova, 'teste 1') == 1

tipo = 5;else % strcmp(prova, 'teste 2') == 1

tipo = 6;endnumero = str2num( linha(pos+1 : end) );

end

Page 48: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Programa_v2 [3]

6. Para cada sub-problema (começando pelos mais simples),implementar o respetivo algoritmo e testar o “sub-programa”.

• Problema: Leitura das notas (versão 2).• Entrada: (string) nomeFichNotas.• Saída: matriz de números, com uma linha por aluno e seis colunas (nº,

E1, E2, P, T1, T2).

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 48

function notas = leNotas_v2( nomeFich )% documentacao em anexo

notas = []; % Criar uma matriz notas vazia.fich = fopen(nomeFich, 'r'); % Abrir o ficheiro para leitura.while ~feof(fich)

linha = fgetl(fich); % Ler uma linha do ficheiro....

endfclose(fich); % Fechar o ficheiro.

end

Page 49: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Programa_v2 [4]

6. Para cada sub-problema (começando pelos mais simples),implementar o respetivo algoritmo e testar o “sub-programa”.

• Problema: Leitura das notas (versão 2).• Entrada: (string) nomeFichNotas.• Saída: matriz de números, com uma linha por aluno e seis colunas (nº,

E1, E2, P, T1, T2).

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 49

...while ~feof(fich)

linha = fgetl(fich); % Ler uma linha do ficheiro.[tipo, numero] = extraiTipoENum(linha);if tipo == 1 % acrescenta uma linha

notas = [notas ; numero, 0, 0, 0, 0, 0];else % insere a nota na coluna = tipo

notas(end, tipo) = numero;end

end...

Page 50: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Resolução – Programa_v2 [3]

7. Implementar o algoritmo que resolve o problema e testar oprograma pedido.

• Problema: Pauta de ICE com ficheiros (versão 2).• Entrada: (string) nomeFichNotas, (string) nomeFichPauta.• Saída: nenhuma. O ficheiro nomeFichPauta é criado e escrito.

• Que pode ser chamada diretamente da consola

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 50

function pautaICEFich_v2( nomeFichNotas, nomeFichPauta )% documentacao em anexo

notasAC = leNotas_v2(nomeFichNotas);pauta = pautaICE(notasAC); % como na aula 4escrevePauta(nomeFichPauta, pauta);

end

>> pautaICEFich_v2(�notasAC_v2.txt�, �pautaAC_v2.txt�)

Page 51: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T07/icec_t07.pdf · ondeé exercicio1 , exercicio2 ,‘trabalho’, teste1

Para Estudar esta Aula

• Manual do Octave§ Capítulo 14

« Tem várias funções que podem ser úteis

• (ou confusas)

« Estas secções focam particularmente o que demos aqui:

• 14.2.1 Opening and Closing Files

• 14.2.3 Line-Oriented Input

• 14.2.4 Formatted Output

20 Abril 2018 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 51