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 :

Récupération de données colonnes dans un fichier .txt


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut Récupération de données colonnes dans un fichier .txt
    Bonjour à tous,
    Je suis confronté à plusieurs problèmes.

    J'ai couramment l'habitude de faire l'acquisition des 2 colonnes de données contenues dans mes fichiers .txt au travers de la syntaxe suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    chemin=strcat(root,mes,'.TXT')
    [col1, col2]= textread(chemin,'%f %f','delimiter',',','headerlines',42);
    Hors cette fois-ci il y a des grandeurs non numériques situées après mes données, ce qui engendre un message d'erreur. Il est donc à mon avis nécessaire de stopper l'acquisition de données grâce à un compteur dont la valeur est associée à la chaîne de caractères NUMBER_OF_POINT contenue dans le header du .txt.

    Donc en premier lieu, je souhaite extraire du Header (collé ci-dessous) l'information numérique liée à la chaîne de caractères NUMBER_OF_POINT soit 14001.
    Comment procéder?


    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    POWER_UNIT	dBm
    NB_OF_SWEEPS	8
    NB_OF_AVERAGES	8
    SCALE_NUMBER	0
    SAMPLING_RATE	- - - -
    DETECTION_THRESHOLD	-50.00 dBm
    RELATIVE_DETECTION_THRESHOLD	45.00 dBc
    SPECTRAL_RANGE	1530.000-1565.000 nm
    EQUIVALENT_NOISE_BANDWIDTH	35 pm
    RBW	0.10 nm
    RBW_MODE	CUSTOM
    NUMBER_OF_PEAK	0
    NUMBER_OF_POINT	14001
    WAVELENGTH_CALIBRATION	Factory
    POWER_OFFSET	- - - -
    SPECTRAL_OFFSET	0.000 nm
    TRACE_ANALYSIS	Standard
    SNR_MEASUREMENT	IEC
    SNR_NOISE_POSITION	Fixed offset
    SNR_DISTANCE	50.00 GHz
    SNR_DISTANCE_MODE	AUTO
    SNR_WIDTH	10.00 GHz
    SNR_WIDTH_MODE	AUTO
     
    PEAK_LIST
    Position	Ch.	Peak Power	Left SNR	SNR Avg.	Right SNR	ENBW(pm)	Pi	P auto	p|i	Pp-Pavg	Pp-Pmax	BW 3.0dB	Worst SNR	Delta Position	Ch. Pi	Noise Avg.

    A la suite du Header les 14001 données sont présentées sous forme de 2 colonnes
    dont j'aimerais faire l'acquisition. Il est nécessaire de stopper l'acquisition après 14001 acquisitions sinon la lecture des lignes qui suivent entraînent un message d'erreur.
    Comment faire?


    Merci d'avance pour votre aide,

    matlabeur

  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 166
    Points
    53 166
    Par défaut
    Citation Envoyé par matlabeur Voir le message
    Donc en premier lieu, je souhaite extraire du Header (collé ci-dessous) l'information numérique liée à la chaîne de caractères NUMBER_OF_POINT soit 14001.
    Si la ligne recherchée est toujours à la même position :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    filename = fullfile(root, [mes '.TXT']);
     
    fid = fopen(filename, 'rt');
     
    for n = 1:12
        fgetl(fid)
    end
     
    numberOfPoint = fscanf(fid, 'NUMBER_OF_POINT %d');
     
    fclose(fid);
    Sinon :
    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
    17
    18
    19
    20
    21
    filename = fullfile(root, [mes '.TXT']);
     
    fid = fopen(filename, 'rt');
     
    while 1
     
        if feof(fid)
            numberOfPoint = [];
            break
        end
     
        str = fgetl(fid);
     
        if strncmp(str, 'NUMBER_OF_POINT', 15)
            numberOfPoint = sscanf(str, 'NUMBER_OF_POINT %d');
            break
        end
     
    end
     
    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)

Discussions similaires

  1. [Batch] Récupération d'une variable dans un fichier txt
    Par killgones dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 09/07/2014, 09h17
  2. [Débutant] récuperer données enregistrées dans un fichier TXT
    Par asous dans le forum MATLAB
    Réponses: 4
    Dernier message: 06/11/2009, 12h06
  3. Récupération de données structurées dans un fichier
    Par magicland dans le forum Débuter
    Réponses: 6
    Dernier message: 08/06/2008, 15h55
  4. Récupération de données pour mettre dans un fichier .txt
    Par lince102 dans le forum Interfaces Graphiques
    Réponses: 10
    Dernier message: 24/01/2008, 11h29

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