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 :

utiliser textscan à répétition


Sujet :

MATLAB

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut utiliser textscan à répétition
    Bonjour à tous,

    j'aimerais de l'aide pour m'aider à comprendre l'utilisation de la fonction textscan.
    Mon fichier se compose d'une en-tête avec différents paramètres que je lis en limitant la lecture complète comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data = textscan(fid, '%s',30, 'delimiter', '\n', 'whitespace', ''); % lit les 30 premières lignes entières
    En fonction de cette en-tête, je sais que je vais avoir 420 fois un ensemble de données à lire, le numéro de la ligne où ça va commencé. L'ensemble des données se présente sous la forme suivante : 44 lignes de 44 valeurs séparées par des virgules.
    Pour les lire, j'utilise ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    delimString = repmat('%d', 1, 44); 
    for a=1:420
        startLine = ligne_debut_premiere_frame+(a-1)*(44+2); %correspond vraiment au numéro de ligne de chaque début d'ensemble des données
        Y{a} = cell2mat(textscan(fid, delimString, 44, 'headerlines', 44-1, 'delimiter', ','));
    end
    Pour la première itération, j'ai bien mon premier ensemble de données, pour le second je n'ai plus que 23 lignes puis je passe à 21 lignes jusqu'à la 28ème itération et finalement, Y{a>28} est vide...

    Pourtant si je teste la lecture de mon premier ou dernier ensemble cela fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fid = fopen(filename); % ouvre le fichier
    temp1=cell2mat(textscan(fid, delimString, 44, 'headerlines', 25-1, 'delimiter', ','));
    fclose(fid)
    fid = fopen(filename); % ouvre le fichier
    temp2=cell2mat(textscan(fid, delimString, 44, 'headerlines', 19299-1, 'delimiter', ','));
    fclose(fid)
    Par contre, cela ne fonctionne plus dès lors que j'enchaine les textscan. En reprenant, la lecture du premier et du dernier, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fid = fopen(filename); % ouvre le fichier
    temp11=cell2mat(textscan(fid, delimString, 44, 'headerlines', 25-1, 'delimiter', ','));
    temp21=cell2mat(textscan(fid, delimString, 44, 'headerlines', 19299-1, 'delimiter', ','));
    fclose(fid)
    J'obtient ce que je veux dans "temp11" mais "temp21" est vide.

    Y'aurait-il un truc que je n'aurais pas vu ? Bien sûr si j'ouvre et ferme à chaque itération le fichier, ça doit fonctionner mais quand même, y'a plus jolie !!!

    Merci de votre aide

    Christophe
    INCIA : MATLAB R2014a sous MAC OS 10.9.3

    Nous piétinerons éternellement aux frontières de l'Inconnu, cherchant à comprendre ce qui restera toujours incompréhensible. Et c'est précisément cela qui fait des nous des hommes. Isaac Asimov

  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 302
    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 302
    Points : 53 163
    Points
    53 163
    Par défaut
    Je pense qu'il faut revenir au début du fichier avant chaque appel à TEXTSCAN, ou alors se déplacer en relatif par rapport à la dernière position lue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fid = fopen(filename); % ouvre le fichier
    temp11=cell2mat(textscan(fid, delimString, 44, 'headerlines', 25-1, 'delimiter', ','));
    frewind(fid);
    temp21=cell2mat(textscan(fid, delimString, 44, 'headerlines', 19299-1, 'delimiter', ','));
    fclose(fid)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    Comment dire... MERCI, MERCI et MERCI Dut...

    Christophe
    INCIA : MATLAB R2014a sous MAC OS 10.9.3

    Nous piétinerons éternellement aux frontières de l'Inconnu, cherchant à comprendre ce qui restera toujours incompréhensible. Et c'est précisément cela qui fait des nous des hommes. Isaac Asimov

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

Discussions similaires

  1. Utilisation de 'TEXTSCAN' ou 'dlmread'
    Par Medoou dans le forum MATLAB
    Réponses: 4
    Dernier message: 29/07/2009, 16h30
  2. [textscan] Utilisation
    Par mihaispr dans le forum MATLAB
    Réponses: 4
    Dernier message: 16/06/2009, 09h12
  3. Réponses: 6
    Dernier message: 12/01/2009, 10h31
  4. Réponses: 10
    Dernier message: 15/07/2008, 14h35
  5. Réponses: 0
    Dernier message: 11/07/2008, 12h30

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