Octave Ficheiros Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Ficheiros 5.1 Ficheiros (1) Na vossa pasta criar um ficheiro de texto chamado “abracadabra” (não é preciso ser um ficheiro do octave) Abrir o ficheiro e escrever lá qualquer coisa na primeira linha, por exemplo: “bla, ble, etc” Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Ficheiros 5.2 Ficheiros (2) Para se fazerem coisas com o conteúdo de um ficheiro é preciso primeiro 'abrir' o ficheiro: [fid,msg]=fopen(nome-do-ficheiro, modo) nome-do-ficheiro: string com o nome do ficheiro para abrir, por exemplo “abracadabra.txt” modo: uma das seguintes strings: “r” - se o ficheiro é para ser lido “w” - se o ficheiro é para ser escrito (substituindo o que lá estiver) “a” - se o ficheiro é para ser escrito (acrescentando ao que lá estiver) Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Ficheiros 5.3 Ficheiros (3) Ler um caracter do ficheiro: [c1,count] = fscanf(fid,”%c”,”C”) Ler dois caracteres do ficheiro: [c1,c2,count] = fscanf(fid,”%c %c”,”C”) ou então: v=[ ] for i=1:2 [v(i),count] = fscanf(fid,”%c”,”C”) Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Ficheiros 5.4 Ficheiros (4) Para testar se já chegamos ao fim do ficheiro: feof(fid) Devolve 1 ou 0, caso respectivamente já estejamos ou não no fim do ficheiro. Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Ficheiros 5.5 Ficheiros (5) Quando se deixa de usar um ficheiro é necessário “fechá-lo”: fclose(fid) Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Ficheiros 5.6 Exercício 1 Fazer uma função “le_caracteres” que retorna uma cadeia com todos os caracteres de um ficheiro juntamente com o comprimento dessa cadeia. function [cadeia,comprimento]=le_caracteres(nome_do_ficheiro) ... endfunction Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Ficheiros 5.7 Exercício 2 Fazer uma função “conta_vogais” que conta o número de vogais num ficheiro. function n=conta_vogais(nome_do_ficheiro) ... endfunction Dica: Para testarmos se um caracter c é uma vogal podemos fazer: c_maiusculo = toupper(c) if index("AEIOU",c_maiusculo) > 0 ... etc ... endif Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Ficheiros 5.8 Ler uma matriz de um ficheiro fscanf(fid,formato,[colunas,linhas]) octave:1> [matriz,c]=fscanf(fid,formato,[2,2]); octave:2> matriz' Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Ficheiros 5.9 Exercício 1 Fazer uma função “ler_matriz” que lê uma matriz de um ficheiro function n=ler_matriz(fid,formato,colunas) ... endfunction Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Ficheiros 5.10 Exercício 2 Fazer uma função “sel_matriz” que selecciona linhas de uma matriz se o valor na coluna 'coluna' está no intervalo [min,max]. function r=sel_matriz(matriz,coluna,min,max) ... endfunction Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Ficheiros 5.11 Exercício 3 Fazer uma função “med_mat” que calcula a média de todos os valores de uma linha de uma matriz function media=med_mat(matriz,linha) ... endfunction Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Ficheiros 5.12 Exercício 4 Fazer uma função “le_data” que lê uma data de um ficheiro e retorna 3 variáveis: dia, mês e ano function [dia,mes,ano]=le_data(fid) ... endfunction Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Ficheiros 5.13 Exercício 5 Fazer uma função “le_palavras” que lê uma sequência de palavras de um ficheiro. A sequência termina com o caracter “\t”. function seq_palavras=le_palavras(fid) ... endfunction Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Ficheiros 5.14 Registos Tal como uma matriz, um registo é um tipo de variável que contém vários valores. >> registo.nome = “Carlos”; >> registo.numero = 2345; >> registo registo = { nome = Carlos numero = 2345 } Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Ficheiros 5.15 Ler um registo de um ficheiro Fazer uma função “le_registo” que lê um registo de um ficheiro de chamadas de telemóvel. O ficheiro é composto de várias linhas e 3 colunas: data, descrição e número de minutos. function registo=le_registo(fid) ... endfunction Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Ficheiros 5.16