Florence Nicol Unité de Neurosciences Cognitives Université Catholique de Louvain Louvain-la-Neuve, Belgique florence.nicol@psp.ucl.ac.be 05 Mai 2004 F.Nicol - Matlab E/S - 1
Plusieurs formats d affichage : short = format court à 5 chiffres (par défaut) long = format long à 15 chiffres short e = format court à 5 chiffres en virgule flottante long e = format long à 15 chiffres en virgule flottante short g = meilleur des deux formats courts à 5 chiffres long g = meilleur des deux formats longs à 15 chiffres Commande format :» Imposer un format d affichage Ex : pi format long pi format revenir au format par défaut pi Remarque : le format d affichage est différent du format de calcul qui se fait en double précision (de 10-308 à 10 +308 ) F.Nicol - Matlab E/S - 2
Commande disp : disp(a) disp( texte ) disp([ texte,num2str(a)])» permet d afficher un tableau de valeurs numériques ou de caractères» affichage du tableau sans écrire le nom de la variable» toutes les valeurs du tableau à afficher doivent être du même format (soit du texte soit des valeurs numériques) Ex : convertir les données numériques en une chaîne de caractères commande num2str(a) («number to string») Ex : A = magic(5); matrice 5*5 du carré magique disp(a) A disp( hello ) disp([ hello, le déterminant du carré magique est :,num2str(det(a))]) F.Nicol - Matlab E/S - 3
Commande input var = input( un texte )» permet de demander à l utilisateur de saisir des données numériques» les données numériques saisies à la suite du texte seront affectées à la variable var» la fin de la saisie est provoquée par un retour chariot var = input( un texte )» entrer une chaîne de caractères (numériques ou alphabétiques) Ex1 : x = [1 2 3]; rep = input( entrer le vecteur x : ); %saisir x ou 1 2 3 disp([ le vectuer est :, num2str(rep)]); Ex2 : rep=input( Voulez-vous continuer le cours?(oui/non) :, s ); disp([ la réponse est :,rep]) F.Nicol - Matlab E/S - 4
Importer des données : charger des données dans l espace de travail à partir d un fichier Exporter des données : sauver des variables de l espace de travail dans un fichier Dans Matlab, plusieurs fonctions selon le format des données : format texte : codes ASCII (American Standard Code for Information Interchange) format binaire : images, sons, Autres formats :» format HDF (Hierarchical Data Format) : format standard pour échange de données scientifiques» format Matlab MAT = fichier binaire spécifique à Matlab, sert à sauver les variables d un espace de travail Fonctions d Entrée/Sortie de bas niveau : utilisables avec tout format de données» basées sur les fonctions d E/S de la bibliothèque du langage standard ANSI-C (langage très répandu de programmation structuré et très près du langage machine) F.Nicol - Matlab E/S - 5
Format des données : Format texte : les données sont des codes ASCII (American Standard Code for Information Interchange) adopté comme standard dans les années 60 stocker les caractères par son équivalent en code numérique sur 8 bits (256 caractères possibles)» caractères numériques et alphabétiques» visualisation dans un éditeur de texte Format binaire : pas code ASCII et non visualisable dans un éditeur de texte plus compact qu un format texte (moins d espace dans la mémoire vive)» Images, sons ou autres formats (format MAT) Autres formats : HDF (Hierarchical Data Format) format développé par NCSA (National Center for Supercomputing Applications)» Échange de données graphiques ou numériques» Offre des performances en lecture/écriture comparable au format binaire» Portabilité entre machines F.Nicol - Matlab E/S - 6
Utiliser l assistant d importation :» facilité d utilisation» opère sur la plupart des fichiers de données numériques Utiliser les fonctions Matlab d importation :» utilisation plus complexe des lignes de commande» opérations d importation dans un fichier M (cf Programmation)» opère sur des fichiers de données numériques mais aussi alphabétiques Remarque :» quand on importe des données dans l espace de travail, les variables existantes sont automatiquement écrasées F.Nicol - Matlab E/S - 7
Utiliser l assistant d importation : Etape 1 : menu File>Import Data ou commande uiimport Ex : dans C:\MATLAB6p5\work Importer le fichier grades.txt F.Nicol - Matlab E/S - 8
Etape 2 : sélectionner un fichier visualisation d une partie du fichier et des données ou copier les données à partir du fichier texte Menu Edit>Paste Special ou sélectionner l option Clipboard F.Nicol - Matlab E/S - 9
Etape 3 : spécifier le caractère qui délimite les données dans data : toutes les données numériques du fichier dans textdata : tout le texte du fichier dans rowheaders : le texte dans la colonne la plus à gauche des données dans colheaders : le texte dans la ligne la plus en haut L assistant reconnaît les fichiers qui utilisent des entêtes texte et les extrait comme des variables séparées. Il peut aussi ignorer ces lignes dans Textheader lines (nb de lignes ignorées). F.Nicol - Matlab E/S - 10
Etape 4 : par défaut, les variables numériques et texte sont importées dans des variables séparées variable data : les données numériques variable textdata (rowheaders et colheaders) : les données texte Pour créer une variable correspondant à chaque ligne (ou chaque colonne) de données et utiliser le texte en entête comme nom des variables : choisir l option «Create vectors from each» Etape 5 : Sélectionner les variables à importer F.Nicol - Matlab E/S - 11
Format des données : Fonctions :» présentation uniforme de lignes et de colonnes» séparateur : caractère texte délimitant chaque item (ex : espace, virgule, point-virgule, tabulation, )» données numériques ou alphabétiques» possibilité d une ou plusieurs lignes texte d entête ainsi que des étiquettes des lignes et des colonnes commande load : données numériques, caractère séparateur espace seulement commande dlmread : données numériques, tout caractère séparateur commande csvread : données numériques, caractère séparateur virgule seulement commande textread : données numériques avec texte d entête commande fscanf : fonction d Entrée/Sortie de bas niveau F.Nicol - Matlab E/S - 12
Commande load données numériques seulement caractère séparateur espace seulement même nombre d éléments dans chaque ligne load nomfich.ext» importe dans l espace de travail les données contenues dans le fichier nomfich.ext et créé la variable nomfich contenant les données dans l espace de travail» par défaut, la commande load cherche à importer un fichier.mat si aucune extension.ext n est pas spécifiée Ex : load gradesload.txt; A=load( gradesload.txt ); importe les données du fichier dans l espace de travail charge les données du fichier dans la variable A A = load( nomfich.ext )» retourne dans le tableau A le contenu du fichier nomfich.ext F.Nicol - Matlab E/S - 13
Commande dlmread données numériques tout caractère séparateur A= dlmread( nomfich.ext, séparateur,range)» retourne dans la variable A les données ASCII du fichier nomfich.ext délimitées par le caractère séparateur séparateur» séparateur =, séparateur virgule (par défaut) ; séparateur point-virgule \t séparateur tabulation etc» range = [R1 C1 R2 C2] : vecteur définissant le bloc de données à importer (les lignes et les colonnes sont comptées à partir de 0) - R1 et C1 = position (resp. ligne et colonne) du coin supérieur gauche - R2 et C2 = position (resp. ligne et colonne) du coin supérieur droit - par défaut, [R1 C1 R2 C2] = [0 0 N M] où N est le nombre de lignes et M le nombre de colonnes du fichier nomfich.ext F.Nicol - Matlab E/S - 14 0 1 2 Ex : A=dlmread('gradesdlm.txt',';') A = 0 85 90 95 1 90 92 98 2 100 95 97 3 77 86 93 4 89 95 98 5 92 93 99 A=dlmread('gradesdlm.txt',';',[1 0 3 2]) A = 90 92 98 100 95 97 77 86 93
Commande csvread Commande fscanf données numériques seulement caractère séparateur virgule seulement A = csvread( nomfich.ext, R, C, range)» retourne dans la variable A les données ASCII du fichier nomfich.ext délimitées par le caractère séparateur virgule uniquement» R et C = position (resp. ligne et colonne) de début de lecture des données dans le fichier (par défaut, R = 0 et C = 0)» range = [R1 C1 R2 C2] : vecteur définissant le bloc de données à importer - R1 et C1 = position (resp. ligne et colonne) du coin supérieur gauche (correspondants à R et C) - R2 et C2 = position (resp. ligne et colonne) du coin supérieur droit» cf. fonctions d Entrée/Sortie de bas niveau F.Nicol - Matlab E/S - 15
Commande textread données numériques et données texte A = textread( nomfich.ext, format, param,value)» format = format des données ex : %f lit un nombre à virgule flottante %s lit les caractères jusqu au séparateur %*f ignore les nombres à virgule flottante» param = paramètres supplémentaires prenant les valeurs value ex : delimiter = caractère séparateur (par défaut caractère espace) headerlines = nombre de lignes d entête du fichier à ignorer emptyvalue = valeur d une cellule manquante entre deux séparateurs (par défaut 0) matlab = les caractères suivant % sont ignorés (lignes de commentaires de Matlab) c = les caractères entre /* et */ sont ignorés (lignes de commentaires du langage C) F.Nicol - Matlab E/S - 16
Utiliser l assistant d importation :» facilité d utilisation Utiliser les fonctions Matlab d importation :» utilisation plus complexe des lignes de commande» opérations d importation dans un fichier M (cf. Programmation)» opère sur des fichiers dans différents formats Remarque :» quand on importe des données dans l espace de travail, les variables existantes sont automatiquement écrasées F.Nicol - Matlab E/S - 17
Utiliser l assistant d importation : Etape 1 : menu File>Import Data ou commande uiimport Ex : dans C:\MATLAB6p5\toolbox\matlab\demos Importer le fichier mri.mat Importer le fichier ngc6543a.jpg F.Nicol - Matlab E/S - 18
Etape 2 : sélectionner un fichier visualisation d une partie du fichier et des données F.Nicol - Matlab E/S - 19
Etape 4 : par défaut, les variables numériques et texte sont importées dans des variables séparées Visualisation des données Etape 5 : Sélectionner les variables à importer F.Nicol - Matlab E/S - 20
Format des données : Fonctions :» fichiers audio : fichiers *.au et *wav» fichiers audio-video : fichiers *.avi» fichiers images : fichiers *.jpeg, *.tiff, *.bmp, *.giff,» fichiers Matlab : fichiers *.mat» fichiers classeurs : fichiers excel *.xls, fichiers lotus *.wk1» fichiers HDF : cf. fichiers hdf commande auread : importe des données audio de format Sun Microsystems commande wavread : importe des données audio de format Windows commande aviread : importe des données audiovisuelles de format AVI commande imread : importe des données images de différents formats commande load : importe des données variables Matlab de format MAT commande xlsread : importe des données de format classeur Excel commande wk1read : importe des données de format classeur Lotus commande hdf : importe des données de format hdf F.Nicol - Matlab E/S - 21
Exporter des données dans différents formats ASCII Les fonctions utilisées dépendent de la quantité de données à exporter et de leur format Fonctions : Commande diary :» tableaux numériques ou de caractères» petits tableaux» séparateur espace seulement Commande dlmwrite :» données numériques» séparateur : tout caractère Commande save :» données numériques» séparateur : espace ou tabulation Commande fprintf :» données numériques et alphabétiques» fonction d Entrée/Sortie de bas niveau F.Nicol - Matlab E/S - 22
Commande save : save nomfich.txt var1 var2 var3 -ASCII -TABS» exporte les variables var1 var2 et var3 dans le fichier nomfich.txt au format ASCII (séparateur espace par défaut ou tabulation si option -TABS)» par défaut, exporte les données dans un fichier.mat si l option -ASCII n est pas spécifiée Ex1 : save exsave1.txt gradesload ASCII Ex2 : A=[1 2 3; 4 5 6]; B=[7 8 9; 10 11 12]; C=[13 14; 15 16]; D= hello ; save exsave2.txt A -ASCII save exsave3.txt A B -ASCII save exsave4.txt A B C -ASCII save exsave5.txt D ASCII (sauve le code ASCII équivalent aux caractères) F.Nicol - Matlab E/S - 23
Commande dlmwrite : dlmwrite( nomfich.txt,m, séparateur )» exporte le tableau M dans le fichier nomfich.txt au format ASCII» séparateur : tout caractère (qui apparaît entre les items sauf en fin de ligne), = virgule (par défaut) = espace = pas de séparateur Ex : dlmwrite( exdlm1.txt,a) par défaut, séparateur virgule dlmwrite( exdlm2.txt,a, ; ) séparateur ; dlmwrite( exdlm3.txt,a, ) pas de séparateur F.Nicol - Matlab E/S - 24
Commande diary :» crée une copie de la session Matlab et de toutes les commandes exécutées dans un fichier (excepté les graphiques) diary nomfich.txt;.... diary off;» ouvrir le fichier nomfich.txt dans un éditeur de texte pour supprimer les lignes de texte superflues» Si le fichier existe déjà, les données exportées sont placées à la fin du fichier (les données existantes ne sont pas écrasées) Ex : diary exdiary.txt; A; B; C; D; diary off; diary exdiary.txt help diary; diary off; Ouvrir le fichier exdiary.txt et supprimer les lignes de texte superflues F.Nicol - Matlab E/S - 25
Exporter des données dans différents formats binaires Les fonctions utilisées dépendent du format des données Fonctions : commande auwrite : exporte des données audio dans le format Sun Microsystems commande wavwrite : exporte des données audio dans le format Windows commande aviwrite : exporte des données audio-vidéo dans le format AVI commande addframe : capture les clichés et les sauvegarde dans un fichier AVI commande imwrite : exporte les données images dans différents formats (*.jpeg, *.tiff, *.bmp, *.giff, ) commande wk1write : exporte les données dans le format classeur Lotus commande save : exporte des variables Matlab dans le format MAT commande hdf : exporte les données dans le format HDF F.Nicol - Matlab E/S - 26
Sauvegarder une séquence de graphiques dans une animation Matlab :» Sauvegarder l animation dans le format MAT : nécessite Matlab pour visualiser la séquence» Sauvegarder l animation dans le format audio-video AVI Création d une animation au format AVI» Créer un fichier AVI : commande avifile aviobj=avifile( nomfich.avi, Propriété,valeur, ) crée un fichier nomfich.avi et retourne un objet fichier AVI avec des propriétés spécifiées ex : fps = nombre de cadres par seconde colormap = matrice définissant la palette de couleurs» Capturer la séquence de graphiques dans un fichier AVI : commande addframe» Ecrire et fermer le fichier AVI : commande close Convertir une animation Matlab existante en fichier AVI :» Commande movie2avi F.Nicol - Matlab E/S - 27
Très similaires aux fonctions C d entrée/sortie Si un format de données n est pas supporté par une fonction Matlab de haut niveau, on peut utiliser les fonctions de bas niveau si on sait comment les données sont formatées Toutes les opérations sur un fichier (lecture et écriture de données) doivent se faire entre des commandes d ouverture et de fermeture de fichiers Structure : Ouvrir un fichier...... Fermer le fichier Fonctions d entrée/sortie F.Nicol - Matlab E/S - 28
Avant toute opération sur un fichier : commande fopen fid=fopen( nomfich.ext, permission )» ouvre un fichier nomfich.ext et renvoie un identificateur de fichier fid utilisé comme argument dans les autres fonctions d entrée/sortie» accès au fichier requis : permission r ouvre en lecture seulement un fichier existant (par défaut) w ouvre en écriture seulement un fichier existant ou créé un nouveau fichier; efface le contenu du fichier a idem w mais le contenu n est pas effacé; placera les nouvelles données écrites à la fin du fichier r+ ouvre en lecture et en écriture un fichier existant placera les nouvelles données écrites en début de fichier et écrasera le contenu du fichier w+ ouvre en lecture et en écriture un fichier existant ou crée un nouveau fichier; efface le contenu du fichier a+ idem w+ mais le contenu n est pas effacé placera les nouvelles données écrites à la fin du fichier La commande fopen retourne un entier non négatif (identificateur de fichier) [fid,message]=fopen( nomfich.ext, permission )» fid = -1 si fopen produit une erreur (ouvrir un fichier qui n existe pas)» message d erreur (dépend du système d exploitation) F.Nicol - Matlab E/S - 29
Après toute opération sur un fichier : commande fclose status=fclose(fid)» ferme un fichier identifié par fid lors de son ouverture par la commande fopen» renvoie un entier : 0 si le fichier est correctement fermé 1 si fclose a produit un erreur à la fermeture status = fclose( all )» ferme tous les fichiers ouverts Matlab ferme automatiquement tous les fichier ouverts lors d une session dès qu on quitte la session Matlab F.Nicol - Matlab E/S - 30
Localisation de données temporaires :» commande tempdir : retourne le nom du répertoire temporaire» commande tempname : génère un nom de fichier temporaire pour gérer des données temporaires Ex : manipulation de données dans un fichier temporaire fid=fopen(tempname, w ). fonctions d entrée/sortie. fclose(fid) F.Nicol - Matlab E/S - 31
Commande fread : A=fread(fid, taille, précision )» lit tout ou partie d un fichier binaire identifié par fid lors de son ouverture et retourne les données dans une matrice A» taille : étendue des valeurs lues dans le fichier N = lit les N premières valeurs du fichier inf = lit jusqu à la fin du fichier (par défaut) [n m] = lit les valeurs du fichiers arrangées dans un tableau n*m» précision : contrôle le type des données de chaque valeur (caractère, entier, nombre à virgule flottante) char et uchar = caractères signés et non signés (8 bits) short et long = entiers courts et longs (16 et 32 bits) float et double = valeurs à virgule flottante de précision simple et double (32 et 64 bits) (option par défaut) Visualiser les données : disp(a)» affiche le contenu d un tableau de valeurs numériques A sans afficher le nom de la variable» affiche le texte si A est une chaîne de caractères F.Nicol - Matlab E/S - 32
Commande fwrite : count=fwrite(fid, A, précision )» écrit les éléments d une matrice A dans un fichier identifié par fid et les enregistre dans un format numérique spécifié par précision» retourne le nombre de valeurs écrites dans le fichier» précision : contrôle le type des données de chaque valeur (caractère, entier, nombre à virgule flottante) char et uchar = caractères signés et non signés (8 bits) short et long = entiers courts et longs (16 et 32 bits) float et double = valeurs à virgule flottante de précision simple et double (32 et 64 bits) F.Nicol - Matlab E/S - 33
Commande fscanf : Commande sscanf : A=fscanf(fid, format,taille)» lit un fichier texte identifié par fid et retourne les données dans une matrice A» format : interprétation des données %s = interprète une chaîne de caractères %d = interprète des entiers %e, %f et %g = nombres à virgule flottante %*d = ignore les valeurs entières dans les données» taille : étendue des valeurs lues dans le fichier N = lit les N premières valeurs du fichier inf = lit jusqu à la fin du fichier (par défaut) [n m] = lit n*m éléments du fichier arrangés dans un tableau n*m A = sscanf(s, format, taille)» lit des données à partir d une chaîne de caractères S plutôt que d un fichier» retourne les données dans une matrice A et les convertit en un format spécifié par précision» taille : étendue des valeurs lues dans le fichier (même option que fscanf) Ex : S = '2.7183 3.1416'; A = sscanf(s,'%f') lit les éléments de S, les convertit en valeurs numériques à virgule flottante et les retourne dans la matrice A F.Nicol - Matlab E/S - 34
Commande fprintf : count = fprintf(fid, format,a)» écrit les données de la matrice A dans un fichier identifié par fid» retourne le nombre de bytes écrit dans le fichier» format : interprétation des données %s = interprète une chaîne de caractères %d = interprète des entiers %e = notation exponentielle %f = valeurs décimales à virgule fixe \n = retour à la ligne \t = espace tabulation Ex : crée un fichier texte contenant une table des exponentielles x = 0:.1:1; y = [x; exp(x)]; fid = fopen('exp.txt','w'); fprintf(fid, Fonction exponentielle\n\n ); écrit le titre «Fonction exponentielle» suivi de deux retours à la ligne fprintf(fid,'%6.2f\t%12.8f\n',y); écrit pour chaque ligne : fclose(fid); %6.2 = un nombre de 6 caractères et 2 chiffres après la virgule suivi d un espace tabulation %12.8 = un nombre de 12 caractères et 8 chiffres après la virgule suivi d un retour à la ligne Commande sprintf : S = sprintf( format,a) Ex : sprintf('%d',round(pi)) 3 sprintf('%s','hello') hello» écrit les données de la matrice A dans une chaîne de caractères S plutôt que dans un fichier» convertit les données dans un format spécifié par format F.Nicol - Matlab E/S - 35
Indicateur de position :» Quand un fichier est ouvert, un pointeur de position spécifie une position particulière dans le fichier» Détermine où commence l opération suivante (lecture ou écriture)» Par défaut, après l ouverture d un fichier par la commande fopen, l indicateur de position se trouve au début du fichier Déplacement de l indicateur de position :» Toute opération de lecture ou d écriture avance l indicateur d une position» Les déplacements de l indicateur s effectuent en terme de bytes et non en terme d éléments du fichier. Ainsi, dans un fichier contenant des éléments de type entier «short», chaque élément du fichier utilise 2 bytes en mémoire. Une opération de lecture ou d écriture d un élément entier «short» déplacera donc l indicateur de 2 bytes Ex : caractère : char 1 byte = 8 octets (ou 8 bits) entier court : short 2 bytes = 16 octets entier long : long 4 bytes = 32 octets simple précision : float 4 bytes = 32 octets double précision : double 8 bytes = 64 octets F.Nicol - Matlab E/S - 36
Déplacer la position de l indicateur : status = fseek(fid, offset, origine)» positionne l indicateur de position du fichier identifié par fid» retourne dans status : 0 si le déplacement se fait correctement -1 si fseek a rencontré une erreur» offset : valeur (positive ou négative) du déplacement spécifiée en bytes offset>0 déplacement vers la fin du fichier offset=0 pas de déplacement offset<0 déplacement vers le début du fichier» origine : point d origine à partir duquel on effectue le déplacement bof ou -1 début du fichier cof ou 0 position courante eof ou +1 fin du fichier F.Nicol - Matlab E/S - 37
Localiser l indicateur de position : pos = ftell(fid)» localise l indicateur de position du fichier identifié par fid» renvoie la valeur de l offset à partir du début du fichier ( bof ) dans la variable pos : un entier non négatif spécifié en bytes» retourne la valeur -1 si ftell rencontre une erreur F.Nicol - Matlab E/S - 38
Exemple 1 : Fichier texte «car.txt» contenant le texte «data in file» : Début du fichier Fin du fichier Position bof 1 2 3 4 5 6 7 8 9 10 11 12 eof Contenu d a t a i n f i l e Indicateur Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 en nb de bytes Création du fichier texte : datacar.m 1 5 6 3 4 s='data in file'; %ouverture du fichier car.txt en écriture fid=fopen('car.txt','w'); %écrire le texte dans le fichier count=fprintf(fid,'%s',s); %fermeture du fichier fclose(fid); %afficher le nombre de bytes du fichier disp(['nombre de bytes dans le fichier : ',num2str(count)]); F.Nicol - Matlab E/S - 39 8 2 7 9
Fichier positioncar.m 1 %déterminer l'indicateur de position %ouverture du fichier en lecture fid=fopen('car.txt','r'); %offset en début de fichier pos=ftell(fid); %afficher le nombre de bytes en début du fichier disp(['offset en début de fichier : ',num2str(pos)]); 5 6 %faire reculer l'indicateur de 4 bytes fseek(fid,-4,'cof'); pos1=ftell(fid); %lire le caractère suivant car=fread(fid,1,'char'); pos2=ftell(fid); disp([num2str(pos1),' bytes avant le caractère ',car]); disp(['le caractère ',car,' se trouve à la position ',num2str(pos2)]); 2 %lire et afficher tout le texte S=fread(fid,'char'); texte=char(s'); disp(['le texte est : ',texte]); 7 %aller à la fin du fichier fseek(fid,0,'eof'); pos=ftell(fid); disp(['offset à la fin du fichier : ',num2str(pos),' bytes']); 3 4 %avancer de 8 bytes à partir de bof fseek(fid,8,'bof'); %offset pos1=ftell(fid); %lire le caractère suivant car=fread(fid,1,'char'); pos2=ftell(fid); disp([num2str(pos1),' bytes avant le caractère ',car]); disp(['le caractère ',car,' se trouve à la position ',num2str(pos2)]); 8 9 %lire le dernier caractère du fichier fseek(fid,-1,'eof'); pos1=ftell(fid); car=fread(fid,1,'char'); pos2=ftell(fid); disp([num2str(pos1),' bytes avant le caractère ',car]); disp(['le caractère ',car,' se trouve à la position ',num2str(pos2)]); %fermeture du fichier fclose(fid); F.Nicol - Matlab E/S - 40
Exemple 2 : Fichier binaire «five.bin» contenant les entiers de 1 à 5 : Début du fichier Fin du fichier Position bof 1 2 3 4 5 6 7 8 9 10 eof Contenu 0 1 0 2 0 3 0 4 0 5 Indicateur Offset 0 1 2 3 4 5 6 7 8 9 10 en nb de bytes 1 4 2 3 Création du fichier binaire : datanum.m A=1:5; %ouverture du fichier en écriture fid=fopen('five.bin','w'); %écrire les valeurs dans le fichier au format short fwrite(fid,a,'short'); %fermeture du fichier status=fclose(fid); 5 F.Nicol - Matlab E/S - 41
Fichier positionnum.m %Rechercher les positions dans le fichier five.bin 1 2 3 4 5 %ouverture du fichier en lecture fid=fopen('five.bin','r'); %déplacer l'indicateur de position de 6 bytes à partir du début du fichier fseek(fid,6,'bof'); %lire le nombre suivant four=fread(fid,1,'short'); position=ftell(fid); disp(['position de l''indicateur après le nombre ',num2str(four),' est : ',num2str(position),' bytes']); %reculer l'indicateur de 4 bytes fseek(fid,-4,'cof'); %lire le nombre suivant three=fread(fid,1,'short'); position=ftell(fid); disp(['position de l''indicateur après le nombre ',num2str(three),' est : ',num2str(position),' bytes']); %fermeture du fichier fclose(fid); F.Nicol - Matlab E/S - 42
Commande fgetl : tline = fgetl(fid)» lit une ligne d un fichier texte identifié par fid et l enregistre dans une chaîne de caractères tline sans le caractère de fin de ligne» retourne -1 si fgetl rencontre la fin du fichier Remarques :» fichiers texte seulement» commence la lecture de la ligne à partir de l indicateur de position (par défaut, le début du fichier à son ouverture F.Nicol - Matlab E/S - 43
Exemple : fichier ligne.m %lire les deux premières lignes du fichier texte fgetl.m %ouverture du fichier en lecture fid=fopen('fgetl.m','r'); %lire la première ligne du fichier tline = fgetl(fid); %afficher la première ligne disp(tline); %lire la deuxième ligne : l'indicateur de position se trouve au début de la deuxième ligne tline = fgetl(fid); %afficher la deuxième ligne disp(tline); F.Nicol - Matlab E/S - 44