Dans ce qui suit, nous allons partager avec vous quelques astuces pour manipuler les fichiers sous MATLAB.

 

Tester l’existence d’un fichier ou d’un dossier

Tester l’existence d’un fichier est une action courante qu’il est nécessaire de mettre en œuvre pour améliorer la robustesse de son code. MATLAB est livré avec une fonction nommée exist qui effectue ce test.

La documentation de exist indique que cette fonction renvoie une valeur en fonction de la nature de l’objet dont on souhaite tester l’existence. Dans notre cas, les valeurs renvoyées pour l’existence d’un fichier ou d’un dossier sont respectivement 2 et 7.

 

Donc pour tester l’existence d’un fichier, on fera par exemple :

if exist(filename, 'file')~=2
  error('Le fichier n''existe pas'); 
end

 

Et pour tester l’existence d’un dossier, on fera par exemple :

if exist(pathname, 'dir')~=7
  error('Le dossier n''existe pas');
end

 

Concaténer le nom d’un fichier et celui d’un répertoire

Pour obtenir le chemin d’accès complet à un fichier, il faut concaténer le nom du fichier avec celui du dossier où il se trouve.

 

On voit souvent ce type de concaténation :

>> repertoire = 'D:\dossierA\dossierB\';
>> fichier = 'image.jpg';
>> chemin = [repertoire fichier]

chemin =
D:\dossierA\dossierB\image.jpg

ou

>> repertoire = 'D:\dossierA\dossierB';
>> fichier = 'image.jpg';
>> chemin = [repertoire '\' fichier]

chemin =
D:\dossierA\dossierB\image.jpg

 

On voit déjà que la présence ou non du dernier séparateur dans le nom du dossier peut poser problème. Il y a aussi un autre problème plus grave. Le séparateur de nom n’est pas le même sur tous les systèmes d’exploitation. Si le code doit pouvoir fonctionner sur n’importe quelle machine, il faut pouvoir gérer cette différence. Il est possible de récupérer le séparateur en utilisant la fonction filesep.

Mais la meilleure solution consiste à utiliser la fonction fullfile qui va déterminer automatiquement le séparateur à utiliser en fonction du système d’exploitation courant.

 

Sous Windows :

>> repertoire = 'D:\dossierA\dossierB';
>> fichier = 'image.jpg';
>> chemin = fullfile(repertoire, fichier)

chemin = 
D:\dossierA\dossierB\image.jpg

ou

>> repertoire = 'D:\dossierA\dossierB\';
>> fichier = 'image.jpg'; 
>> chemin = fullfile(repertoire, fichier) 

chemin = 
D:\dossierA\dossierB\image.jpg

 

De même sous Linux :

>> repertoire = 'D:/dossierA/dossierB'; 
>> fichier = 'image.jpg'; 
>> chemin = fullfile(repertoire, fichier) 

chemin = 
D:/dossierA/dossierB/image.jpg

ou

>> repertoire = 'D:/dossierA/dossierB/'; 
>> fichier = 'image.jpg';
>> chemin = fullfile(repertoire, fichier) 

chemin = 
D:/dossierA/dossierB/image.jpg

 

Cette technique est très efficace pour concaténer les deux arguments de sortie des fonctions uigetfile et uiputfile :

>> [fichier, repertoire] = uigetfile

fichier =
fic_t.mat

repertoire =
C:\Users\Mamad\Documents\MATLAB\

>> chemin = fullfile(repertoire, fichier)

chemin =
C:\Users\Mamad\Documents\MATLAB\fic_t.mat

 

Lister les fichiers d’une certaine extension dans un répertoire

Il faut utiliser la fonction dir.

 

Exemple:

Nous allonlister tous les fichiers avec l’extension .m dans le répertoire C:\Users\Mamad\Documents\matlabpourtous:

>> rep = 'C:\Users\Mamad\Documents\matlabpourtous';
>> ext = '*.m';
>> chemin = fullfile(rep,ext);
>> list = dir(chemin)

 

Commande DIR

 

La fonction dir retourne alors une variable list de type Structure dont les différents champs sont :

  • name : nom du fichier ;
  • date : date de modification du fichier ;
  • bytes : taille du fichier (en octets) ;
  • isdir : valeur booléenne 0 (car on ne liste que des fichiers ici) ;
  • datenum : date de modification du fichier (format de date MATLAB).

 

Nommer une suite de fichiers

Il existe deux solutions peu différentes : l’une utilise la fonction sprintf, l’autre la concaténation de chaînes de caractères et la fonction num2str.

 

Exemple:

Pour générer des noms de fichiers test1.txt, test2.txt…, testN.txt :

for n = 1:3
  nomFichier = sprintf('test%d.txt',n) 
end

ou

for n = 1:3
  nomFichier = ['test' num2str(n) '.txt']
end

 

Résultat :

nomFichier =
test1.txt


nomFichier =
test2.txt

nomFichier =
test3.txt

 

Note:

Comme la fonction num2str fait appel à sprintf, il est généralement plus flexible d’utiliser la solution avec sprintf seul.

 

Quelques commandes utiles:

MATLAB possède des fonctions et des commandes qui permettent d’obtenir la liste des répertoires accessibles, la liste des fichiers d’un répertoire donné les éditer et éventuellement les effacer.

  • matlabpath : donne la liste des répertoires accessible par MATLAB;

  • addpath (‘C:Users\Mamad\Documents\matlabpourtous’) : ajoute C:Users\Mamad\Documents\matlabpourtous à la liste matlabpath des répertoires accessibles par MATLAB ;

  • p = pwd : retourne dans p le chemin d’accès au répertoire de travail actuel ;

  • cd C:Users\Mamad\Documents\matlabpourtous : change le répertoire de travail pour celui spécifié par path ;

  • d = dir ou d = ls : retourne dans d la liste des fichiers du répertoire de travail ;

  • what : retourne la liste des m-files et des mat-files du répertoire de travail ;

  • edit test : édite le m-file test.m, identique à Open dans le menu File ;

  • delete test.m : efface le m-file test.m ;

  • type test : affiche le le m-file test.m dans la fenêtre de commande;

  • winopen(‘carto.xls’) : ouvre une application windows à partir de MATLAB;

  • ! dir : exécute la commande dir de Dos;

  • ! cmd.exe : lance le shell de Dos.