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érer des variables à partir d'un fichier .txt


Sujet :

MATLAB

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 63
    Points : 55
    Points
    55
    Par défaut Récupérer des variables à partir d'un fichier .txt
    Bonjour à tous,
    j'ai un fichier texte (.txt) et je veux récupérer des nombres avant de les stocker dans un tableau. pour cela j'ai utilisé le code dessous mais le problème c'est que j’arrive pas à lire tout le fichier (la lecture se faite juste sur le début du fichier ).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    fid=fopen('Explication.txt','rt')
    S=textscan(fid, '%s %f %s %f', 'Delimiter', ':');
    fclose(fid);
    voici une partie du fichier texte et les valeurs concernées sont en rouge.



    ********************************************* Recalcul la pile
    ---------------------------------------------
    --- Solive n°: 16
    Inertie Section :1735700 > Inertie Reel+ : 1075583
    MPlastique Section :538500 > MPlastique Reel+ : 394902.75
    Charge Section/Connecteur: 2242 > Charge Reel : 1046.1
    Dernière Section : 150x50x12x2
    Section Retenue : So150x50x12x2
    ---------------------------------------------
    --- Solive n°: 15
    Inertie Section :1735700 > Inertie Reel+ : 1347023
    MPlastique Section :538500 > MPlastique Reel+ : 494562.75
    Charge Section/Connecteur: 2242 > Charge Reel : 1310.1
    Dernière Section : 150x50x12x2
    Section Retenue : So150x50x12x2
    ---------------------------------------------
    --- Solive n°: 14
    Inertie Section :1735700 > Inertie Reel+ : 1347023
    MPlastique Section :538500 > MPlastique Reel+ : 494562.75
    Charge Section/Connecteur: 2242 > Charge Reel : 1310.1
    Dernière Section : 150x50x12x2
    Section Retenue : So150x50x12x2
    ---------------------------------------------
    --- Solive n°: 13
    Inertie Section :1735700 > Inertie Reel+ : 1160408
    MPlastique Section :538500 > MPlastique Reel+ : 426046.5
    Charge Section/Connecteur: 2242 > Charge Reel : 1128.6
    Dernière Section : 150x50x12x2
    Section Retenue : So150x50x12x2


    Merci d'avance.

  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 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Voici une solution :

    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
    A = [];
    B = [];
    C = [];
     
    fid = fopen('Explication.txt', 'rt');
     
    while 1
     
        if feof(fid)
            break
        end
     
        str = fgetl(fid);
     
        if isempty(str)
            continue
        end
     
        if strncmp(str, 'Inertie Section', 15)        
            A = [A sscanf(str, 'Inertie Section :%*d > Inertie Reel+ : %d')];
        elseif strncmp(str, 'MPlastique Section', 18)
            B = [B sscanf(str, 'MPlastique Section :%*d > MPlastique Reel+ : %f')];
        elseif strncmp(str, 'Charge Section/Connecteur', 25)
            C = [C sscanf(str, 'Charge Section/Connecteur: %*d > Charge Reel : %f')];
        end    
     
    end
     
    fclose(fid);

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    C'est exactement ce que je voulais, Merci beaucoup pour votre aide.

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    Bonjour,
    y a-t-il une possibilité pour récupérer ce que vient après " Dernière Section : " dans le fichier texte au-dessus et les stockées sous forme chaîne de caractère ?

    Merci d'avance.

  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 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Comme ceci par exemple :

    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
    A = [];
    B = [];
    C = [];
    D = {};
     
    fid = fopen('Explication.txt', 'rt');
     
    while 1
     
        if feof(fid)
            break
        end
     
        str = fgetl(fid);
     
        if isempty(str)
            continue
        end
     
        if strncmp(str, 'Inertie Section', 15)        
            A = [A sscanf(str, 'Inertie Section :%*d > Inertie Reel+ : %d')];
        elseif strncmp(str, 'MPlastique Section', 18)
            B = [B sscanf(str, 'MPlastique Section :%*d > MPlastique Reel+ : %f')];
        elseif strncmp(str, 'Charge Section/Connecteur', 25)
            C = [C sscanf(str, 'Charge Section/Connecteur: %*d > Charge Reel : %f')];
        elseif strncmp(str, 'Dernière Section', 16)
            D = [D strrep(str, 'Dernière Section : ', '')];
        end    
     
    end
     
    fclose(fid);

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    j'ai essayé la solution mais le tableau D reste toujours vide et égale à " 0×0 empty cell array " !!!

  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 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Le code ci-dessus renvoi ceci sur ma machine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >> D
     
    D = 
     
        '150x50x12x2'    '150x50x12x2'    '150x50x12x2'    '150x50x12x2'

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    pour moi le code renvoi une cellule vide :


    Nom : prblmf.png
Affichages : 121
Taille : 1,3 Ko


    est ce que le probléme c'est que la fonction " strrep" marche pas sur ma version matlab (R2017a) ??

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Test ceci dans le Command Window de MATLAB :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    str = 'Dernière Section : 150x50x12x2' 
     
    strrep(str, 'Dernière Section : ', '')
    Tu devrais obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >> str = 'Dernière Section : 150x50x12x2'
     
    str =
     
    Dernière Section : 150x50x12x2
     
    >> strrep(str, 'Dernière Section : ', '')
     
    ans =
     
    150x50x12x2
     
    >>

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    oui , j'ai obtenu ça :



    Nom : prblm2.png
Affichages : 126
Taille : 5,8 Ko




    mais dans le code ça marche pas !

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Fais des copier/coller, pas des captures d'écran.

    Envoi nous le fichier Explication.txt (mis dans une archive zip ou rar)

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    voici le fichier :


    Explication.rar

  13. #13
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Si j'exécute le code suivant avec le fichier que tu nous as fourni :

    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
    A = [];
    B = [];
    C = [];
    D = {};
     
    fid = fopen('Explication.txt', 'rt');
     
    while 1
     
        if feof(fid)
            break
        end
     
        str = fgetl(fid);
     
        if isempty(str)
            continue
        end
     
        if strncmp(str, 'Inertie Section', 15)        
            A = [A sscanf(str, 'Inertie Section :%*d > Inertie Reel+ : %d')];
        elseif strncmp(str, 'MPlastique Section', 18)
            B = [B sscanf(str, 'MPlastique Section :%*d > MPlastique Reel+ : %f')];
        elseif strncmp(str, 'Charge Section/Connecteur', 25)
            C = [C sscanf(str, 'Charge Section/Connecteur: %*d > Charge Reel : %f')];
        elseif strncmp(str, 'Dernière Section', 16)
            D = [D strrep(str, 'Dernière Section : ', '')];
        end    
     
    end
     
    fclose(fid);
    J'obtiens bien :

    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
    >> D
     
    D = 
     
      Columns 1 through 5
     
        '150x50x12x2'    '150x50x12x2'    '150x50x12x2'    '150x50x12x2'    '200x80x30x2'
     
      Columns 6 through 11
     
        '200x80x30x2'    '200x80x30x2'    '200x80x30x2'    '100x100x3'    '100x100x3'    '100x100x3'
     
      Columns 12 through 16
     
        '100x100x3'    '100x100x3'    '100x100x3'    '100x100x3'    '100x100x3'

  14. #14
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    oui, moi aussi j'ai pas compris, finalement le problème c'est dans " è " du mot "Dernière" , parce que quand je remplace le " é " avec un " e " ça marche normale , mais je peux pas remplacer à chaque fois à la main parce que le fichier Explication.txt c'est juste un tout petit exemple , après je vais traiter des fichiers txt qui contient des milliers de lignes.
    y a-t-il une solution pour ça ?

  15. #15
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Tu travailles sur Mac ou Linux ?

  16. #16
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    Linux

  17. #17
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Essaie ceci :

    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
    A = [];
    B = [];
    C = [];
    D = {};
     
    fid = fopen('Explication.txt', 'rt');
     
    while 1
     
        if feof(fid)
            break
        end
     
        str = fgetl(fid);
     
        if isempty(str)
            continue
        end
     
        if strncmp(str, 'Inertie Section', 15)        
            A = [A sscanf(str, 'Inertie Section :%*d > Inertie Reel+ : %d')];
        elseif strncmp(str, 'MPlastique Section', 18)
            B = [B sscanf(str, 'MPlastique Section :%*d > MPlastique Reel+ : %f')];
        elseif strncmp(str, 'Charge Section/Connecteur', 25)
            C = [C sscanf(str, 'Charge Section/Connecteur: %*d > Charge Reel : %f')];
        elseif strncmp(str, 'Derni', 5)
            tmp = strsplit(str, ':');
            D = [D strtrim(tmp(2))];
        end    
     
    end
     
    fclose(fid);

  18. #18
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    super , tu m'a vraiment aidé , Merci beaucoup

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

Discussions similaires

  1. [Python 3.X] Récupérer des variables à partir d'un fichier txt
    Par tstky dans le forum Calcul scientifique
    Réponses: 5
    Dernier message: 28/02/2019, 12h07
  2. Réponses: 5
    Dernier message: 17/06/2008, 18h05
  3. Réponses: 2
    Dernier message: 26/01/2007, 15h58
  4. Réponses: 4
    Dernier message: 19/03/2006, 16h20

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