IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

lecture de fichier CSV


Sujet :

MATLAB

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Points : 78
    Points
    78
    Par défaut lecture de fichier CSV
    Bonjour à tous,

    D'abord quelqu'un peut me dire l'intéret d'un fichier CSV par rapport à un fichier excel ?
    En effet, j'ai un fichier CSV avec des chaines de caractères et des nombres décimaux. Le point est utilisé au lieu de la virgule dans ces nombres, ce qui fait que, quand j'ouvre mon fichier CSV le nombre 1.01 par exemple est affiché en tant que 01.Jan . Comment régler ce problème ?

    De plus, la seule fonction que je connais sous Matlab pour lire des fichiers CSV est csvread(filename.csv), mais celle ci ne marche pas quand le fichier contient des chaines de caractères. Pensez vous que je peux quand meme lire un fichier CSV en utilisant la fonction xlsread ? Quelle configuration dois je utiliser pour éviter d'afficher des dates au lieu de nombres à la lecture d'un fichier CSV?

    merci beaucoup,

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Citation Envoyé par bakaratoun Voir le message
    D'abord quelqu'un peut me dire l'intéret d'un fichier CSV par rapport à un fichier excel ?
    Les fichiers text (dont le format CSV fait partie) sont une des méthodes les plus robustes (pas forcément les plus efficace) pour de partager des fichiers entre différentes machines ou différents logiciels, ou encore différentes versions d'un même logiciel.

    Citation Envoyé par bakaratoun Voir le message
    Le point est utilisé au lieu de la virgule dans ces nombres,
    Et heureusement ! CSV signifie "Comma-Separated Values" soit "Valeurs Séparées par une Virgule" en français. Donc si la virgule était choie à la fois comme séparateur de valeur et comme séparateur décimale, la lecture du fichier serait bien moins pratique

    Citation Envoyé par bakaratoun Voir le message
    ce qui fait que, quand j'ouvre mon fichier CSV le nombre 1.01 par exemple est affiché en tant que 01.Jan . Comment régler ce problème ?
    Avec quelle fonction lis-tu ce fichier ?

    Citation Envoyé par bakaratoun Voir le message
    De plus, la seule fonction que je connais sous Matlab pour lire des fichiers CSV est csvread(filename.csv), mais celle ci ne marche pas quand le fichier contient des chaines de caractères.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >> help csvread
     CSVREAD Read a comma separated value file.
        M = CSVREAD('FILENAME') reads a comma separated value formatted file
        FILENAME.  The result is returned in M.  The file can only contain
        numeric values.
    Tu peux utiliser TEXTREAD ou TEXTSCAN

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Points : 78
    Points
    78
    Par défaut
    merci pour la réponse.
    En effet, je n'utilise aucune fonction. Quand je clique dessus, il s'ouvre sous format Excel, et j'obtiens des dates au lieu de chiffre. Donc je suppose qu'il faudra modifier quelques configurations d'Excel pour éviter cela. Connaissez vous lesquelles ?

    voilà

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Points : 78
    Points
    78
    Par défaut
    j'ai utilisé la fonction textread et ca me donne ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >> A=textread('file.csv')
    ??? Error using ==> dataread
    Trouble reading number from file (row 1, field 1) ==> Temp;Vect1;Vect2;Vect3;
     
    Error in ==> textread at 177
    [varargout{1:nlhs}]=dataread('file',varargin{:});
    Quoique c'est un fichier csv, les chaines de caractères sont séparées par un point virgule. Est ce que c'est normal ?

    merci

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Citation Envoyé par bakaratoun Voir le message
    Quoique c'est un fichier csv, les chaines de caractères sont séparées par un point virgule. Est ce que c'est normal ?
    Ben... voir le paragraphe "Variantes françaises" ici

    Et si tu nous montrais plutôt quelques lignes de ton fichier pour voir à quoi il ressemble ?

    Sinon, il faut prendre le temps de lire la documentation des fonctions.
    TEXTREAD a besoin de plus d'un argument en entrée...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Points : 78
    Points
    78
    Par défaut
    bonjour,
    voici un exemple de fichier que j'aimerais lire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Time;Vect1;Vect2;Vect3
    0;1;2;3
    1;1;2;3
    2;1;2;3
    3;1;2;3
    4;1;2;3
    voici une tentative de lecture à l'aide de textread.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [txt,num]=textread('essai.txt','%s%d','delimiter',';')
    le problème c'est que je ne sais pa comment écrire les param et value (%s%d) parceque les chaines de caractères sont sur la meme ligne.

    voilà

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [T,V1,V2,V3] = textread('test.csv','%s%d%d%d','delimiter',';','headerlines',1);
    ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TV = dlmread('test.csv',';',1,0);

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Points : 78
    Points
    78
    Par défaut
    merci beucoup, ca marche.

    le seul inconvenient c'est qu'il faut connaitre d'avance le nombre de colonne dans mon fichier csv. .

    imagine par exemple que j'ai un fichier avec 100 variables (c'est possible dans mon cas). C'est pas du tout pratique d'écrire %s%s%s..100 fois, non ?

    y a t il un autre moyen plus sympa à l'instar de la fonction xlsread qui crée [txt,num] sans préciser d'avance la longueur de txt ?

    merci beaucoup

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 318
    Points : 52 958
    Points
    52 958
    Par défaut
    La question ne se pose pas avec DLMREAD

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Points : 78
    Points
    78
    Par défaut
    le seul problème c'est que dlmread ne lit pas les chaines de caractères et remplace les "empty fields" par 0. (moi j'aimerai bien remplacer les champs vides par un NaN). j'ai essayé`d'utiliser le param 'emptyvalue',NaN mais ca ne marche pas pour dlmread .

    voici le fichier csv que j'aimerai lire, avec des guillemets cette fois, un point virgule comme delimiter et un point pour les nombres décimaux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    "Time";"Vect1";"Vect2;"Vect3"
    "0";"1";"2";"3"
    "1";"1";"2";"3"
    "2";"1";"2";"3"
    "3";"1";"2";"3"
    "4";"1";"2";"3"
    "5";"1";"2";"3"
    connaissez vous une fonction qui permet de créer un vecteur [txt,num] tel que txt stocke les chaines de caractères et num les valeurs numériques ?

    la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [txt,num]=xlsread('essai.csv')
    ne marche pas car Excel considère d'emblée les champs avec des valeurs décimales (le point comme Decimal Symbol) comme des dates. 1.01 c'est 1.Jan.

    merci de votre aide

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Points : 78
    Points
    78
    Par défaut
    bonjour,

    je me demande si c'est possible d'avoir comme séparateur ";" ?(guillemets et point virgule). En fait, c'est ce aue j'obtiens quand j'ouvre mon fichier csv avec un NotePad. C'est un peu genant car on ne peut pas spécifier comme délimiteur ";". .

    avez vous déjà eu ce genre de problèmes ?
    merci beaucóup

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 209
    Points : 78
    Points
    78
    Par défaut
    bonjour,

    j'ai fait un petit programme pour traiter mon fichier csv et éliminer les séparateur genant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    fid=fopen('essai.txt');
     
    l=fgets(fid);
    txt={};
    for k=1:(length(l)-3)
        if strcmp(l(k),'"')&& ~strcmp(l(k+1),';')
            j=k+1;
            name='';
            while ~strcmp(l(j),'"')
                name=strcat(name,l(j));
                j=j+1;
            end
            txt=cat(2,txt,name);
        end
    end
    fclose(fid)
    j'obtiens le résultat suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >> txt
     
    txt = 
     
        'time'    'vect1'    'vect2'    'vect3'
    Pour récupérer les valeurs numériques, j'aimerais utiliser dlmread. Le seul problème c'est qu'il faut préciser le délimiteur pour que dlmread fonctionne. Or dans mon cas, le délimiteur '";"' n'est pas pris en compte par Matlab.

    Avez vous des pistes de recherche ?
    Merci de votre aide.

  13. #13
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    fid = fopen('test.csv','rt');
     
        str = fgetl(fid);
     
        txt = strread(str,'%q','delimiter',';');
     
        ncol = numel(txt);
     
        k = 1;
        while ~feof(fid)
            str = fgetl(fid);
            num(k,1:ncol) = strread(str,'"%f"','delimiter',';');
            k = k+1;
        end
     
    fclose(fid);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lecture de fichier CSV
    Par Glob dans le forum Codes sources à télécharger
    Réponses: 3
    Dernier message: 09/04/2013, 11h38
  2. [Flex3] rafraichissement lecture de fichier csv
    Par zyanya dans le forum Flex
    Réponses: 8
    Dernier message: 20/06/2011, 17h48
  3. VB.Net - Lecture de fichiers csv
    Par House MD dans le forum VB.NET
    Réponses: 16
    Dernier message: 19/10/2008, 17h56
  4. [CSV] Lecture de fichier CSV
    Par fthem dans le forum Langage
    Réponses: 18
    Dernier message: 23/09/2008, 09h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo