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 :

Extraction de nombres dans un fichier txt


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2009
    Messages : 26
    Par défaut Extraction de nombres dans un fichier txt
    Bonjour,

    voilà j'ai un fichier .txt dont voici un extrait

    ##DATA PROCESSING=DIGITIZED BY NIST FROM HARD COPY (FROM TWO SEGMENTS)
    ##XUNITS=1/CM
    ##YUNITS=TRANSMITTANCE
    ##XFACTOR=1.000000
    ##YFACTOR=1
    ##DELTAX=1.039640
    ##FIRSTX=421.832
    ##LASTX=4000.27
    le but sur matlab est de reprendre les valeurs de delta X le firtstX et le lastX
    j'ai commencé mon programme par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    clc;
    clear;
    %ouverture du fichier
    fid=fopen('IR_aceton.txt');
    x=(fread(fid,'uint8=>char'))';
    fclose(fid)
     
    %% Recherche de deltax
     
    pos=findstr(x,'##DELTAX=');
    Mais je ne sais pas aller plus loin...

    Merci d'avance si vous avez une réponse à mon problème

  2. #2
    Expert confirmé
    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
    Par défaut
    Tu y as été un peu violemment

    Je te conseillerais d'utiliser plutôt TEXTSCAN pour lire ton fichier ce qui te permettra de récupérer les lignes séparément.
    Et même si tu sais exactement le nombre de lignes de début qu'il y a à passer, d'éviter de lire celles-ci.

    Quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    %ouverture du fichier
    fid=fopen('IR_aceton.txt');
    res=textscan(fid,'%s','headerlines',5);
    fclose(fid);
    %Pour visualiser juste :
    res{1}
    %il suffit ensuite de traiter chaque ligne
    deltax = textscan(res{1}{1},'##DELTAX=%d');
    A tester (ce que je n'ai pas fait)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2009
    Messages : 26
    Par défaut
    je n'ai pas collé l'entier du fichier.txt mais
    le but de ce fichier est de récupérer les données d'un spectre infrarouge. D'un appareil à l'autre la position du delta x peut alors changer de position et peut se retrouver sur une autre ligne.
    comment faire pour chercher automatiquement la ligne contenant ce deltax.

    le code que tu m'as donné ne donne rien. J'espère que tu pourras m'aider

    et je ne comprends pas
    res{1} pourquoi le mettre en crochet??
    et pourquoi mettre 2 fois {1} dans text scan

    NB: voici le fichier txt à traiter
    http://www.cijoint.fr/cjlink.php?fil...cijFeE3Jaq.txt

  4. #4
    Expert confirmé
    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
    Par défaut
    Ben oui je ne l'ai pas testé

    Essaye de fouiller l'aide de TEXTSCAN et de "jouer" avec.
    Pour les {} voir Les tableaux de cellules (cell array)

    Je ne me souviens jamais si TEXTSCAN va renvoyer une cellule contenant un tableau de cellules ou directement le tableau de cellules d'où les multiples {}.

    L'objectif pour toi (qui est atteignable avec TEXTSCAN) c'est de récuperer les lignes de ton fichier dans un tableau de cellules.
    Une fois que tu as le tableau de cellules tu peux utiliser STRMATCH pour trouver quelle est la ligne qui commence par exemple par ##DELTAX.

    Une fois que tu l'as tu peux réutiliser TEXTSCAN (ou SSCANF ou REGEXP...) sur la ligne pour récupérer ce que tu veux.

  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 317
    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 317
    Par défaut
    Une solution avec TEXTREAD :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    X = textread('IR_aceton.txt','%s','delimiter','\n');
     
    idx = find(strncmp(X,'##DELTAX=',9));
     
    for n = 1:numel(idx)
        num = str2double(X{idx}(10:end))
    end
    J'ai mis une boucle FOR parce que je n'ai pas compris si la ligne pouvait apparaître plusieurs fois dans le fichier

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2009
    Messages : 26
    Par défaut
    la valeur ne devrait apparaitre qu'une seule fois.

    idx = find(strncmp(X,'##DELTAX=',9)); je ne comprends pas le 9, j'ai pourtant regardé dans l'help de matlab...

    mais le reste est parfaitement comprehensible merci!!!

  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 317
    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 317
    Par défaut
    STRNCMP compare les N premiers caractères (ici N = 9)

    Si la ligne n'apparait qu'une fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    X = textread('IR_aceton.txt','%s','delimiter','\n');
     
    idx = strncmp(X,'##DELTAX=',9);
     
    num = str2double(X{idx}(10:end))

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2009
    Messages : 26
    Par défaut
    merci c'est extra ca marche
    maintenant j'ai un autre problème
    j'ai un vecteur
    421.832000 0.9400 0.9460 0.9510 0.9550 0.9600
    et j'aimerais utiliser que la première valeur en premier.

    Puis j'aimerais former un vecteur contenant les 5 valeurs suivantes.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2009
    Messages : 26
    Par défaut
    j'ai oublié de préciser en dessus que j'ai une centaine de ligne comme celle-ci et que j'aimerais faire la meme chose pour chaque ligne...

Discussions similaires

  1. Extraction des lignes d'un fichier txt dans un tableau
    Par med.ben235 dans le forum Débuter
    Réponses: 1
    Dernier message: 28/04/2014, 17h56
  2. Réponses: 11
    Dernier message: 07/06/2013, 19h31
  3. le nombre d'occurence d un mot dans un fichier txt
    Par mirafrance dans le forum Langage
    Réponses: 2
    Dernier message: 21/01/2011, 09h05
  4. Réponses: 6
    Dernier message: 26/05/2008, 20h08
  5. nombre de lignes dans un fichier .txt
    Par marieo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 31/10/2007, 15h22

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