Un fichier .CSV est un fichier tableur, contenant des données sur chaque ligne séparée par un caractère de séparation (généralement une virgule, un point-virgule ou une tabulation).

Lorsque vous allez effectuer des analyses de données, vous aurez très souvent recours à des fichiers .csv.

 

Ouverture d’un fichier .CSV

La fonction fopen permet d’ouvrir un fichier .CSV.

ID_fichier = fopen(nom_fichier, permission)

Cette commande ouvre le fichier nom_fichier.csv avec la permission d’accès spécifiée dans la variable permission. ID_fichier vaut -1 si MATLAB n’arrive pas à lire le fichier.

 

Exemple:

% ouverture du fichier mon_fichier.csv en lecture
fid_txt = fopen('mon_fichier.csv', 'r');
if fid_txt == -1
  return;
end

 

Dès lors que cette fonction est utilisée, il faudra obligatoirement fermer le fichier une fois les opérations effectuées dessus terminées, et ceci avec la fonction fclose :

fclose(fid);

 

Lecture d’un fichier .CSV

Pour lire un fichier .CSV, la commande textscan est la plus rapide.

Data = textscan(ID_fichier, formatSpec)

Cette commande permet de lire les données contenues dans le fichier ouvert sous l’ID ID_fichier en fonction du format spécifié sous formatSpec. Cette commande renvoie les données dans la variable Data sous la forme d’un tableau de cellules.

 

Exemple :

Nous vous proposons de lire le fichier Donnees.csv dont le contenu est le suivant :

Prenom;   Nom;    Age;   Taille
Macky;    SALL;   59;    1.8
Khalifa;  DIOP;   55;    1.6
Fatou;    DIATTA; 20;    0.5
Paté;     NGOM;   NA;    0.0

 

Le code suivant permet de lire le fichier Donnees.csv :

formatSpec = '%s %s %d %f';
fid = fopen('Donnees.csv','r'); % ouverture du fichier

data = textscan(fid, formatSpec,...
                     'headerlines', 1,...
                     'delimiter',';',...
                     'TreatAsEmpty','NA'); % lecture du fichier

 fclose(fid); % fermeture du fichier

Dans le code ci dessus, nous ouvrons le fichier Donnees.csv avec la fonction fopen et nous le fermons à la fin du traitement avec la fonction fclose puis nous lisons le contenu du fichier avec la fonction textscan.

 

Nous donnons quelques propriétés à la fonction textscan :

  • ‘HeaderLines’, 1 : permet d’ignorer la première ligne, qui sera considéré comme l’entête;
  • ‘Delimiter’, ‘;’ : permet de spécifier le type délimiteur utiliser dans le fichier, ici ‘;’;
  • ‘TreatAsEmpty’, ‘NA’ : permet de considérer NA comme une valeur vide;
  • ‘EmptyValue’, NAN : permet d’affecter NAN au contenu considérer comme vide;
  • ‘CommentStyle’,‘//’ : permet de considérer tout contenu, qui vient après les // et sur la même ligne, comme un commentaire;
  • ‘MultipleDelimsAsOne’,1 : autorise une répétition sur le séparateur.

 

Ce code nous permet d’avoir le résultat suivant:

data =
    {4x1 cell}    {4x1 cell}    [4x1 int32]    [4x1 double]

>> data{1,1}

ans =
    'Macky'
    'Khalifa'
    'Fatou'
    'Paté'

>> data{1,2}

ans =
    'SALL'
    'DIOP'
    'DIATTA'
    'NGOM'

>> data{1,3}

ans =
          59
          55
          20
           0

>> data{1,4}

ans =
    1.8000
    1.6000
    0.5000
         0

 

Ecriture d’un fichier .CSV

La fonction fprintf permet d’écrire dans un fichier .CSV.

fprintf(ID_fichier, formatSpec, var_donnees)

Cette commande applique le format spécifié dans formatSpec aux données contenues dans la variable var_donnees et écris les données dans le fichier de sorties. La commande fprintf utilise le schéma de codage spécifié dans l’appel de la fonction fopen.

 

Exemple :

Nous vous proposons de recréer le fichier précédent. Ci-dessous, nous vous rappelons le contenu du fichier:

Prenom;   Nom;    Age;   Taille
Macky;    SALL;   59;    1.8
Khalifa;  DIOP;   55;    1.6
Fatou;    DIATTA; 20;    0.5
Paté;     NGOM;   NA;    0.0

 

Pour écrire un fichier de ce type, il faut toujours commencer par écrire l’entête du fichier. Ici nous pouvons le faire avec le code suivant :

fid = fopen('Sorties.csv','w');
Entete={'Prenom','Nom','Age','Taille'};
fprintf(fid,'%s;%s;%s;%s\n',Entete{:});

 

Ce qui nous permet de créer le fichier suivant :

 

‘%s;%s;%s;%s\n’ : permet de spécifier le format des données de sorties et le « ; » permet de préciser le délimiteur ensuite « \n » permet de faire un retour à la ligne après l’écriture des données contenu dans le tableau de cellule Entete.

 

Le code suivant nous permet d’écriture du corps du fichier:

formatSpec = '%s;%s;%d;%0.2f\n';

for i = 1:length(data{1,1})

  Coprs={data{1,1}{i},data{1,2}{i},data{1,3}(i),data{1,4}(i)};
  fprintf(fid,formatSpec,Corps{:});

end
fclose(fid);

 

Ce qui nous permet d’avoir le fichier complet :

 

Mise en pratique

Énonce

Nous vous proposons de faire un programme qui permet de créer le fichier Notes.csv de la capture d’écran ci-dessous. Le programme doit également permettre de lire le contenu du fichier pour calculer la moyenne de la classe.

 

Fichier Notes.CSV

 

Correction

Pour avoir la correction, il faut d’abord nous envoyez votre solution à l’adresse  et nous vous ferons parvenir la correction.