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 :

postraitement d'un fichier issu d'une simulation


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2015
    Messages : 3
    Points : 2
    Points
    2
    Par défaut postraitement d'un fichier issu d'une simulation
    Bonjour,
    Je souhaite automatiser le postraitement d'un fichier (que voici en dessous) avec matlab de façon à tracer la résistance et l'inductance en fonction de la fréquence.
    Je souhaite donc à partir de ce fichier, créer un vecteur contenant la résistance, un vecteur contenant l'inductance et un vecteur contenant la fréquence.
    Mon problème vient du fait que les lignes de ce fichier ne sont pas de la même longueur, de plus sur une même ligne, il ya à la fois des caractères et des nombres.
    Auriez vous déjà rencontré un cas comme celui-ci? Pourriez-vous svp me conseiller?

    Fichier:

    Row 1: n2 to nout
    Impedance matrix for frequency = 1 1 x 1
    0.267284 +6.8744e-007j
    Impedance matrix for frequency = 10 1 x 1
    0.267284 +6.87386e-006j
    Impedance matrix for frequency = 100 1 x 1
    0.267286 +6.82725e-005j
    Impedance matrix for frequency = 1000 1 x 1
    0.267303 +0.000639155j
    Impedance matrix for frequency = 10000 1 x 1
    0.267313 +0.00628902j
    Impedance matrix for frequency = 100000 1 x 1
    0.267338 +0.0628533j
    Impedance matrix for frequency = 1e+006 1 x 1
    0.269151 +0.628219j
    Impedance matrix for frequency = 1e+007 1 x 1
    0.336135 +6.2037j
    Impedance matrix for frequency = 1e+008 1 x 1
    0.707089 +61.1711j
    Impedance matrix for frequency = 1e+009 1 x 1
    2.1036 +606.982j


    Merci de votre aide.

    Cdt,

    Tomed

  2. #2
    Membre régulier
    Homme Profil pro
    Apprenti
    Inscrit en
    Octobre 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 34
    Points : 71
    Points
    71
    Par défaut
    Bonjour Tomed,

    Pour être sur, dans ton fichier qu'est ce qui correspond à la fréquence, l'inductance et à la résistance ?
    Et quel type de fichier dois-tu traiter, des fichiers ".txt" ?

    j'ai rapidement pondu le script ci-dessous, je pense que ça peut-être largement optimisé, mais ça peut quand même te servir de base pour régler ton problème

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    function test
     
        % Variables
        % ----------------------
        nbLignes = 21;
        iterateurTabFrequence = 1;
        iterateurTabNombreComplexe = 1;
     
        % Importation du fichier
        allText = importdata('text.txt');
     
        % On parcours les donnée récupérées jusqu'à la dernière ligne
        % ---------------------------------------------------------------------
        for i = 1 : nbLignes
     
            % Ligne ou on recupère la fréquence, donc les numéro de ligne pair
            % et on zappe la première ligne
            if ((mod(i, 2) == 0))
     
                % On recupère la fréquence
                tabFrequence(iterateurTabFrequence) = str2double(allText.textdata{i, 6});
     
                iterateurTabFrequence = iterateurTabFrequence + 1;
     
            end
     
            % Ligne ou on recupère le nombre complexe, donc les numéro de ligne
            % impaire ( et on zappe la première ligne)
            if((mod(i, 2) == 1) && (i ~= 1))
     
               tabNombreComplexePartieReel(iterateurTabNombreComplexe) =  str2double(allText.textdata{i, 1});
               tabNombreComplexePartieComplexe(iterateurTabNombreComplexe) =  str2double(allText.textdata{i, 2});
     
               iterateurTabNombreComplexe = iterateurTabNombreComplexe + 1;
     
            end
        end
     
     
    end
    Bon courage !

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2015
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour Mike_stx,

    Merci de ton retour.
    En effet, j'ai pu me faire bien aider sur le sujet.
    En fait, Impedance matrix for frequency = 1 1 x 1
    0.267284 +6.8744e-007j
    en rouge c'est la fréquence, en bleu c'est la résistance et en vert c'est l'inductance.
    Aussi, par défaut en fonction du nombre de fréquences, le nombre de lignes fichier peut varier, le nombre de lignes n'est donc pas maitrisé...
    Voici le code que l'on m'a montré si cela peut te servir:
    Cordialement,
    Tomed

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    format long % pour les formats longs
    % Pour choisir le fichier
    [f r]=uigetfile('*.mat','Charger le fichier ...');
    % Pour ouvrir le fichier choisi precedemment
    fp=fopen([r f],'r');
    % Pour lire la premiere ligne
    % fgetl permet aussi de passer à la ligne suivante après la lecture
    % on passe donc directement à la ligne 2 dans le fichier
    line=fgetl(fp); 
    % Compteur pour incrémenter dans la boucle l'indice des lignes
    % en effet il s'agira d'un vecteur de nlignes et 1colonne
    cpt=1;
    % Boucle pour lire l'integralite du fichier ligne par ligne
    % feof permet de faire un test de fin de fichier:findendoffile
    while(feof(fp)==0)
        % ---
        % Lecture de chaque ligne 2 par 2
        % Traitement de la ligne 1
        line1=fgetl(fp);
    % determination de la position du = qui est répétitif dans le fichier
        ind1=find(line1=='=');
    % determination de la position du x qui est répétitif dans le fichier    
        ind2=find(line1=='x');
    % récupération de la position de la fréquence et conversion en num 
    % prendre seulement la deuxieme position ou l'on trouve un x d'ou le
    % ind2(2)
        tempo=str2num(line1(ind1+1:ind2(2)-1));
        freq(cpt,1)=tempo(1);  % récupérer chaque fréquence en Hz du fichier
        % Traitement de la ligne 2
        line2=fgetl(fp);
    % determination de la position du + qui est répétitif dans le fichier   
        ind1=find(line2=='+');
    % determination de la position du j qui est répétitif dans le fichier
        ind2=find(line2=='j');
    % récupération de la position de R et conversion en num 
    % prendre tout sur la ligne jusqu'à l'indice juste avant le +    
        R(cpt,1)=str2num(line2(1:ind1-1));
    % récupération de la position de Lomega et conversion en num 
    % prendre tout sur la ligne entre l'indice juste après le + jusqu'à 
    % l'indice juste avant le j    
        Lomega(cpt,1)=str2num(line2(ind1+1:ind2-1));
        % Incrementer 'cpt' de façon à balayer toutes les lignes du fichier 
        cpt=cpt+1;
    end
    % Pour fermer le fichier
    fclose(fp);

  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 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 : 52 880
    Points
    52 880
    Par défaut
    Citation Envoyé par tomed Voir le message
    Voici le code que l'on m'a montré si cela peut te servir:
    Ou plus directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    fid = fopen('data.txt', 'rt');
     
    fgetl(fid);
     
    M = fscanf(fid, 'Impedance matrix for frequency = %f%*f x %*f\n%f + %fj\n', [3, inf]);
     
    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. fichier issu d'une bufferisation avec des include
    Par xxxavvv dans le forum Langage
    Réponses: 0
    Dernier message: 27/04/2010, 14h15
  2. [Batch] Copier un fichier issu d'une saisie
    Par kamille dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 26/10/2009, 18h37
  3. Ecriture de fichier issu d'une BDD
    Par manichstar10 dans le forum JDBC
    Réponses: 1
    Dernier message: 19/07/2007, 19h41
  4. Réponses: 3
    Dernier message: 15/05/2007, 09h28

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