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 :

Charger un fichier de données avec une entête


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 89
    Points : 43
    Points
    43
    Par défaut Charger un fichier de données avec une entête
    Bonjour. je désire charger un fichier contenant plusieurs colonnes de données de même taille. Ce fichier possède toutefois une entête en amont.

    J'ai déjà mis ce petit bout de code qui marche bien pour de simple fichier avec seulement des valeurs,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [nom,rep] = uigetfile('*.dat', 'Lecture d''un fichier de données');
    G_TypData = '.dat';
    nomFich = strcat(G_RepData{1}, G_NomData{1}, G_TypData)
     
            M=textread(nomFich);
    Mais il me met une erreur logique que je n'arrive toutefois pas à surmonter!!
    ??? Trouble reading number from file (row 1, field 1) ==> $date 080522212026\n
    La première ligne de mon entête contient effectivement la date. Comment peut on faire pour que la matrice soit chargé à partir de la i-ème ligne pour s'affranchir de l'entête?

    Merci.

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Règles du Forum

    Adepte de la maïeutique

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 89
    Points : 43
    Points
    43
    Par défaut
    En fait mon problème est un peu plus compliqué!!

    Avant tout chose voici la forme d'un fichier que je traite:

    entête
    entête
    entête
    entête
    tps Amp11 Amp12
    1 0,001 0,002
    2 0,001 0,002
    3 0,001 0,002
    4 0,001 0,002
    5 0,001 0,002
    6 0,001 0,002
    6 0,001 0,002
    7 0,001 0,002

    Le nombre de colonne n'est pas défini, je peux avoir 3 colonnes comme ici, comme 5, 7,9,11,13,15....(2n+1)

    Mon objectif est donc de charger ce fichier est de détecter le nombre de colonne afin de définir mes variables par la suite.

    Je pensais que la fonction textread pouvait agir comme un xlsread ou toutes les valeurs peuvent être chargées dans une matrice M et ensuite accéder aux colonnes par (M:i)....

  4. #4
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Et bien tu lis déjà tous les nombres dans une seule variable grâce au lien que je t'ai donné, et ensuite tu traites les lignes (par exemple avec STRREAD ou REGEXP) pour avoir une matrice.

    Attention : si tu as réellement des virgules dans ton texte MATLAB ne les prendra pas en compte comme séparateur de décimales, tu devras d'abord les transformer en point (avec par exemple STRREP).

    Enfin en tout cas tu ne trouveras pas de fonction toute faite pour traiter tes fichiers.
    Règles du Forum

    Adepte de la maïeutique

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 89
    Points : 43
    Points
    43
    Par défaut
    Le problème est que je n'arrive pas à charger mes données.
    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
          [nom,rep] = uigetfile('*.aqs', 'Lecture d''un fichier de données');
            cd(rep_cour);
            if nom == 0
                return;
            end
     
            G_NbFich = 1;
     
            G_RepData{1} = rep;
            G_NomData{1} = strtok(nom, '.');
            nomFich = strcat(G_RepData{1}, G_NomData{1}, G_TypData);
            N=textread(nomFich,'headlines',17)
    j'ai aussi essayé avec N(:,: ) et j'obtiens le message d'erreur:
    ??? Number of outputs must match the number of unskipped input fields.

  6. #6
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Le problème vient du fait que :
    - tu as oublié de mettre le format qui doit venir en 2nde entrée de textread. Comme tu ne connais pas le nombre de colonnes, tu peux déjà commencer brutalement en mettant tout somplement '%s'
    - 'headlines' n'est pas le bon terme => 'headerlines'
    Règles du Forum

    Adepte de la maïeutique

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 89
    Points : 43
    Points
    43
    Par défaut
    Merci pour la réponse.

    Ca commence à bien marcher. Le problème est qu'il me met les valeurs les unes a la suite des autres.

    Voici le résultat que j'obtiens (partiellement):

    ans =

    '0.000000e+000'
    '1.953125E-0011'
    '2.441406E-0011'

    Il s'agit en fait de la première valeur de chacune de mes trois colonnes.

    Comment faire pour garder les colonnes?

    Par ailleurs le format du nombre restituer est entre ' ', cela pose t'il un problème pour la suite?

  8. #8
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    En forçant le delimiter ça devrait être mieux pour avoir les colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    N=textread(nomFich,'%s','headerlines',5,'delimiter','\n')
    Après bien sûr il faut traiter N pour le transfomer en une matrice numérique, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Matrice=str2num(char(N))
    Règles du Forum

    Adepte de la maïeutique

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/01/2011, 13h01
  2. Trie d'un fichier de données avec une colonne date
    Par lil-works dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 03/03/2009, 00h27
  3. [C#] [.NET CF] des fichiers de données avec l'application
    Par safisoft13 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 06/06/2005, 09h30
  4. [format des données avec une procédure stockée]
    Par viny dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 10/03/2005, 13h24
  5. Réponses: 2
    Dernier message: 14/05/2004, 14h32

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