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 :

Chercher une valeur dans un fichier.txt


Sujet :

MATLAB

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Points : 55
    Points
    55
    Par défaut Chercher une valeur dans un fichier.txt
    Bonjour tout le monde

    Je vous explique mon problème :

    J'ai un fichier "Géometrie.txt" contenant un Bloque qui décrit les cordonnées de ma géometrie (triangle,par exemple), qui a la forme suivante: "pi = Xi Yi ;"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    p0 = 1. 0.2 ;
    p1 = 2. 0.5 ;
    p3 = 3. 0.1 ;

    mais avant ce bloque et aprés il y a un autre bloque qui contient des chaines de caractères et des chiffres mais ça m'interesse pas .

    Moi je dois à partire de matlab chercher dans le bloque qui contient les coordonnées de ma géomètrie qu'elle est Xi_max et Yi_max,
    Par exempledans ce cas là mon Xi_max=3 et Yi_max=0.5;
    J'ai cherché dans le forum mais il n y a rien qui corespond à mon problème.

    Aidez moi SVP
    Merci d'avance

  2. #2
    Expert éminent sénior
    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
    Points : 14 830
    Points
    14 830
    Par défaut
    Ca dépend de ce que tu peux faire sur ce fichier texte.
    Une solution "bourrin" serait de mettre toutes les autres lignes en commentaires (rajouter le signe % au début de toutes les lignes) puis d'évaluer le contenu de ton fichier texte en le lisant d'une traite avec TEXTSCAN.

    La solution propre consiste à lire le fichier avec TEXTSCAN, et à manipuler pour réussir à trouver les lignes qui t'intéresse pour trouver tes valeurs.

    Il n'y a pas de solution toute faite.
    Règles du Forum

    Adepte de la maïeutique

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Comme le dit Caro-Line on peut bricoler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    clear
    fid=fopen('donn.txt','r')
    signal=char(fread(fid,'char'))'
    [i,j] = find(signal=='p')
    mat=[str2num(signal(20:25));str2num(signal(33:38));str2num(signal(46:51))]
    max(mat(:,1))
    max(mat(:,2))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    mat =
        1.0000    0.2000
        2.0000    0.5000
        3.0000    0.1000
     
    ans =3
    ans 0.5000

  4. #4
    Débutant
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Points : 55
    Points
    55
    Par défaut
    J'ai essayé la méthode de phryte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    clear
    fid=fopen('C:\Documents and Settings\mehdi\Bureau\GEO.txt','r')
    signal=char(fread(fid,'char'))'
    [i,j] = find(signal=='p')
    mat=[str2num(signal(20:25));str2num(signal(33:38));str2num(signal(46:51))]
    max(mat(:,1))
    max(mat(:,2))
    mais ça donne :

    fid =

    -1

    ??? Error using ==> fread
    Invalid file identifier -1.

    je comprend pas.
    Fichiers attachés Fichiers attachés
    • Type de fichier : txt GEO.txt (693 octets, 69 affichages)

  5. #5
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    A priori ton fichier n'existe pas (au moins à l'emplacement indiqué). Pour faire propre, tu devrais vérifier la valeur de fid avant de continuer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    fid=fopen('C:\Documents and Settings\mehdi\Bureau\GEO.txt','r')
    if (fid == -1)
        warndlg('Erreur dans l''ouverture du fichier');
        return
    end
    signal=char(fread(fid,'char'))'
    ...
    Pour vérifier l'existence du fichier, tu peux utiliser la fonction EXIST.
    Tu peux aussi spécifier dynamiquement le fichier avec la fonction UIGETFILE.
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  6. #6
    Débutant
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Points : 55
    Points
    55
    Par défaut
    Bonjour,

    Cette fois ci j'ai redémaré Matlab et ça marchait mais pas comme il faut, en fait il a lu le fichier, mais il a pas trouvé les points, ce que j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     clear
    fid=fopen('C:\Documents and Settings\mehdi\Bureau\GEO.txt','r')
    signal=char(fread(fid,'char'))'
    [i,j] = find(signal=='p')
    mat=[str2num(signal(20:25));str2num(signal(33:38));str2num(signal(46:51))]
    max(mat(:,1))
    max(mat(:,2))
    et voila ce qu'il a trouvé :

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    fid =
    
         3
    
    
    signal =
    
    opti dime 3 elem tri3 ;
    
    *****************************************************************************
    
    ***************************** Materiaux *************************************
    
    *****************************************************************************
    
    yg0 = 70.E+3 ;
    
    nu0 = 0.33 ;
    
    
    
    Ep0 = 1.e-3 ;
    
    
    
    
    
    hp = 1.e-3;
    
    
    
    h = 3.e-3 ;
    
    
    
    
    
    *****************************************************************************
    
    ***************************** la géometrie **********************************
    
    *****************************************************************************
    
    
    
    
    
    
    
    p0 = 1   0.2  ;
    
    p1 = 2   0.7  ;
    
    p2 = 5   0.1  ;
    
    
    
    l01 = droi p0 p1 40 ;
    
    s0 = l01 tran (0. 0.8 0.) 24 ;
    
    
    
    
    
    
    
    
    i =
    
         1     1     1     1     1     1     1     1
    
    
    j =
    
         2   296   315   589   606   623   653   656
    
    
    mat =
    
         []
    
    ??? Index exceeds matrix dimensions.
    Apparament il trouve pas les colonnes (ls indices trouvés sont tres loins;je pense il ya une erreur dans cette etape :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mat=[str2num(signal(20:25));str2num(signal(33:38));str2num(signal(46:51))]
    et je ne sais meme^pas ça veut dire quoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (str2num(signal(?:?));)
    je comprend pas comment "phryte" a trouvé le bon resultat???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Code :
    mat =
        1.0000    0.2000
        2.0000    0.5000
        3.0000    0.1000
     
    ans =3
    ans 0.5000

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 100
    Points
    100
    Par défaut
    Bonjour,

    la commande str2num convertie une chaine de caractère (un string) en une valeur numérique. Autrement dis il récupère les valeur numérique de ton fichier (sous forme d'une chaine de caractère) et la converti en nombre.

    En ce qui concerne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mat=[str2num(signal(20:25));str2num(signal(33:38));str2num(signal(46:51))]
    je pense que les indices ne sont pas bon, ne faudrait-il pas utiliser les indices i et j extrait avant?

    Peux tu donner ton fichier texte (GEo.txt) afin que l'on puisse tester?

  8. #8
    Débutant
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Points : 55
    Points
    55
    Par défaut
    Salut
    mon fichier.text est en PJ dans le POST #4 (permalink)
    Fichiers attachés Fichiers attachés
    • Type de fichier : txt GEO.txt (693 octets, 81 affichages)

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 100
    Points
    100
    Par défaut
    héhé pardon je ne l'avais pas vu

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 100
    Points
    100
    Par défaut
    Tu n'as toujours que 3 valeurs de p a extraire ou est ce que tu as des fichiers ou tu dois extraire plus que 3 p?

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 100
    Points
    100
    Par défaut
    Essaies cela :

    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
     
    clear
    clc
    fid=fopen('C:\Documents and Settings\mehdi\Bureau\GEO.txt','r')
    signal=char(fread(fid,'char'))';
     
    %copie de la géométrie de GEO dans signal2 
    k= strfind(signal,'géometrie');
    signal2=signal(k:end);
     
    %copie de l'indice
    idx=strfind(signal2,'p');
     
    %copie dans mat des 3 premieres itérations de p dans signal2 
    for cp=1:3
        mat(cp,:)=[str2num(signal2(idx(cp)+5)) , str2num(signal2(idx(cp)+8:idx(cp)+11))];
    end
    mat

    Ce code est valable que si ton fichier ne possede que 3 valeurs de p (p0p1 et p2). étant donné que le terme 'p' reviens plusieurs fois dans ton fichier, il a fallu trier ceux a garder (en l'occurence les 3 premiers apres ***géometrie***).

  12. #12
    Débutant
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Points : 55
    Points
    55
    Par défaut
    en fait en tout j'ai '4 p' à extraire avec chaque p = i j ;

    Ton code ça marche bien ,mais quand j'ai essayé de changer la la borne de la boucle 3--> cp =4 ça marche pas ?.

    qu'est ce que il faut changer j'en ai besoin que de 4p

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 100
    Points
    100
    Par défaut
    si tu as toujours 4 p a extraire, il te suffit de modifier l'indice de fin de boucle
    Si pour chaque p tu as 3 valeurs a extraire (au lieu de 2), il faut que tu rajoute un str2num dans le calcul de mat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mat(cp,:)=[str2num(signal2(idx(cp)+5)) , str2num(signal2(idx(cp)+8:idx(cp)+11)) , str2num(signal2(idx(cp)+?:idx(cp)+?)) ];
    en remplacant les ? par le nombre de caractère entre p et la 3eme valeur numérique a extraire.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par Medoou Voir le message
    Ton code ça marche bien ,mais quand j'ai essayé de changer la la borne de la boucle 3--> cp =4 ça marche pas ?.

    qu'est ce que il faut changer j'en ai besoin que de 4p
    bizare j'ai essayé et pour moi cela fonctionne ...
    Cela doit venir de ton fichier GEO ... peux tu me montrer celui avec 4p ?

  15. #15
    Débutant
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Points : 55
    Points
    55
    Par défaut
    Ouiiiii, Merci beaucoup,
    c'est bon ça marche tres bien, mais pour quoi quand j'ai testé avec :
    p0 = 1 0.2 ;

    p1 = 2 0.7 ;

    p2 = 5 0.1 ;

    p3 = 10 0.;

    il a lu :
    p0, p1et p2 comme ils sont ya pas de probleme,mais il a lu p3:

    p3 = 1. 0. ;

    et du coup le max pour lui est toujours 5 est pas 10,???

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 100
    Points
    100
    Par défaut
    parceque le programme extrait un unique caractère situé 5 cartactères apres p. Si tu a un nombre a 2 chiffre, il ne copie que le premier chiffre.
    De meme, pour les deuxieme valeurs de p (0.1, etc), le programme copie les 3 caractères qui suivent le 8eme caractère apres p.

    Pour p3, le 5eme caractère apres p est le 1 du 10. les 8,9 et 10 caractères sont 0.

    nb : j'ai fais une erreur,l'indice du 2 eme str2num n'est pas +11 mais+10.

  17. #17
    Débutant
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Points : 55
    Points
    55
    Par défaut
    et dans ce cas là qu'est ce qu'il faut changer,quand j'ai des valeur à 2 chiffres comme 2.5 ou 10.?????
    Après avoir pensé que c'est résolu .

    il faut pas rajouter autres chose genre "signal2(idx(cp)+?" pour lire le deusième chiffre:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for cp=1:3
        mat(cp,:)=[str2num(signal2(idx(cp)+5)???(signal2(idx(cp)+6)) , str2num(signal2(idx(cp)+8:idx(cp)+11))];
    je ne sais pas?????

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Points : 100
    Points
    100
    Par défaut
    essaies cela :

    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
     
    fid=fopen('C:\Documents and Settings\mehdi\Bureau\GEO.txt','r')
    signal=char(fread(fid,'char'))';
     
    %copie de la géométrie de GEO dans signal2 
    k= strfind(signal,'géometrie');
    signal2=signal(k:end);
     
    %copie de l'indice
    idx=strfind(signal2,'p');
     
    %copie dans mat des 3 premieres itérations de p dans signal2 
    for cp=1:4
        mat(cp,:)=[str2num(signal2(idx(cp)+4:idx(cp)+7)) , str2num(signal2(idx(cp)+8:idx(cp)+12))];
    end
    mat
    Avec ce code, ta premiere valeur de p peut contenir 3 caractères (cela peut etre un nombre ou un point, une virgule, etc).
    La seconde valeur de p peut contenir 5 caractères (point y compris).

    Si tu as plus de 3 caractères pour la premiere valeur de p et 5 pour la 2eme valeur de p, il faudra reprendre le programme (et cela sera plus complexe).

  19. #19
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour.
    Un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    clear
    fid=fopen('GEO.txt','r');
    signal=char(fread(fid,'char'))';
    j = strfind(signal,'p0');
    j=j(2);
    mat=[str2num(signal(j+5:j+12));str2num(signal(j+20:j+27));str2num(signal(j+36:j+44))]
    max(mat(:,1))
    max(mat(:,2))
    Je ne vois pas de p3 ?

  20. #20
    Débutant
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Points : 55
    Points
    55
    Par défaut
    Parfait Chris05 merci beaucoup tu es géni.
    c'est résolu.
    pour phryte regarde ce fichier il ya un autre point p3:
    Fichiers attachés Fichiers attachés
    • Type de fichier : txt GEO.txt (710 octets, 111 affichages)

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

Discussions similaires

  1. modification d'une valeur dans un fichier txt
    Par oliv27400 dans le forum MATLAB
    Réponses: 5
    Dernier message: 05/12/2011, 20h07
  2. Chercher une valeur dans un fichier..
    Par tonykart13 dans le forum Général Python
    Réponses: 2
    Dernier message: 26/10/2011, 21h19
  3. Chercher une valeur dans un fichier placé dans un dossier
    Par nilsmatlab dans le forum Interfaces Graphiques
    Réponses: 9
    Dernier message: 09/06/2011, 08h40
  4. Comment chercher une valeur dans un fichier text?
    Par lili81 dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/06/2008, 16h18
  5. récupérer une valeur dans un fichier .txt ?
    Par _n1n1_ dans le forum VB.NET
    Réponses: 5
    Dernier message: 27/04/2007, 19h19

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