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 :

[textread] Lecture d'un fichier avec des lignes vides


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 36
    Points : 22
    Points
    22
    Par défaut [textread] Lecture d'un fichier avec des lignes vides
    Bonjour à tous,
    je suis en train de faire une application qui lit un fichier *.csv (delimiter ;).
    Mon fichier ne se compose que d'une colonne:

    VarA1;
    VarA2;
    VarA3;

    VarB1;
    VarB2;

    VarC1;
    ...

    J'aimerai lire cette colonne et entrer les valeur (Var) dans des tableaux de cellules correspondants. ex Tableau1 = {VarA1 VarA2 VarA3} Tableau2 = {VarB1 Var...
    Il faut donc que je puisse faire un textread jusqu'à ma première ligne vide et remplir le premier tableau puis passer au deuxième etc

    Le probleme, c'est que je ne connait pas le nombre de ligne vide à trouver, donc je ne sait pas combien de tableaux de sortie je doit donner en retour de la fonction text read.

    Si vous avez une idée, merci d'avance
    Syb

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Bonjour,

    Si tu ne connais pas le nombres de ligne a lire avant ton blanc, le mieux est d'utiliser fgetl (voir help)

    Voici un morceau de code qui marche sur un fichier 'colonne'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    fich_id=fopen('donnees.txt','r');
    while 1
        a=str2double(fgetl(fich_id))
        if isnan(a)==1
            break
        end
    end
    tu récupères comme ca le numéro de la ligne ou tu as un blanc ainsi que les données. A toi de les intégrer dans ton tableau. Tu répètes autant de fois que nécessaire...

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 308
    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 308
    Points : 52 892
    Points
    52 892
    Par défaut
    La solution en utilisant TEXTREAD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    X=textread('data.txt','%s','delimiter','\n');
     
    idx=[0;find(strcmp(X,''))];
     
    for n=1:numel(idx)-1
     
        M{n}={X{idx(n)+1:idx(n+1)-1}};
     
    end
     
    M{n+1}={X{idx(n+1)+1:end}};

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 308
    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 308
    Points : 52 892
    Points
    52 892
    Par défaut
    Une petite question au passage... pourquoi vouloir absolument fractionner les différents tableaux ?

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 36
    Points : 22
    Points
    22
    Par défaut
    Bonjour et merci pour la réponse,

    Au sujet du fractionnement, en fait j'itère un traitement pour chaque type de variable (A, B, C...).
    Plutôt que d'avoir n fichiers pour n type de variables, j'aurai préféré un fichier pour toutes et après parser ce fichier.
    Ainsi je créé n tableaux que je fais passer dans ma fonction.

    Merci encore

    syb

    (PS: les var A, B et C sont des paramètres de blocs simulink. En relisant mon fichier, je créé mes blocs. L'avantage d'avoir un seul fichier est de ne pas créer les blocs les un sur les autres. Sinon l'autre solution (en multi fichiers) est de recupérer la position des blocs existants pour determiner où placer le prochain. Avec un seul fichier, donc un appel à mon script, je maîtrise mieux les endroits dans lesquels j'ajoute des blocs.)

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

Discussions similaires

  1. Lecture d'un fichier avec des caractères spéciaux
    Par pyrrhus33 dans le forum C++
    Réponses: 4
    Dernier message: 27/10/2014, 14h10
  2. lecture d'un fichier avec des caractères spéciaux
    Par Invité dans le forum SAS Base
    Réponses: 24
    Dernier message: 20/01/2011, 09h50
  3. Réponses: 4
    Dernier message: 19/03/2010, 15h11
  4. Lecture d'un fichier avec des espaces
    Par davasm dans le forum Linux
    Réponses: 6
    Dernier message: 02/04/2009, 11h26
  5. Créer un état avec des lignes vides
    Par sarmad354 dans le forum IHM
    Réponses: 1
    Dernier message: 25/11/2007, 18h56

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