Lecture d'un fichier texte sous matlab.

safae -  
 safae -
Bonjour,

je voudrais crée un programme qui me lit les données d'un fichier texte et qui stocke toutes les données de ce fichier dans une structure sachant que j'ai utilisé pour l'ecriture du fichier texte la syntaxe xml. exemp:<propriete>min;max;<\propriete>.

merci d'avance pour votre aide

1 réponse

  1. khunlun Messages postés 123 Statut Membre 28
     
    Bonjour

    Y aurait-il un oubli ?
    exemp:<propriete>;min;max;<\propriete>
    Si oui, ca simplifierais grandement les choses.

    function res = MaFonction(inStr)

    fid = fopen(inStr,'r');
    while ~feof(fid)
    currentLine = fgetl(fid);
    ind = strfind(currentLine, ';');

    currentField = currentLine(1,1:ind(1,1)-1);
    res.(currentField).min = str2double(currentLine(1,ind(1,1)+1:ind(1,2)-1));
    res.(currentField).max = str2double(currentLine(1,ind(1,2)+1:ind(1,3)-1));
    end
    fclose(fid);

    Avec la commande suivante

    data = MaFonction('monFichier.txt');

    data est une structure contenant les propriétés.
    Ces propriétés ayant deux champs min et max.
    Pour accéder à une valeur, la sintaxe est :

    data.temperature.min (par exemple)

    Bonne journée
    0
    1. safae
       
      merci beaucoup pour votre aide,
      non non il n'y a pas d'oubli
      je suis debutante et je n'y arrive pas trop.
      voilà un exemple d'un code que j'ai fait je voudrai extraire de la variable tline (signal et calib)
      pour les stocker aprés dans une structure pour l'instant je voudrai qu'il y'ait que ça dans var j'ai essayé d'utiliser la variable tline pour me simplifier la tache au lieu de lire tout le fichier texte avant d'implementer ça dans mon code qui lit le fichier text et avec la structure que j'ai crée dans mon code j'arrive à extraire tout ce qu'il y'a entre <TYPE_PROPERTIES></TYPE_PROPERTIES> par contre ça s'affiche ainsi
      {'Format;#;State;#;Size;#;Unit;#;Min;#;Max;#;Resol;#;Accuracy;#;BlockPath'} et moi je veux que chaque donnée soit affiché dans une cellule. j'esper que j'ai été suffisemment clair. essayer de m'aider svp je suis debutante en matlab.

      tline = '<TYPE>Signal <TYPE>Entrée <TYPE_PROPERTIES>Format;#;State;#;Size;#;Unit;#;Min;#;Max;#;Resol;#;Accuracy;#;BlockPath</TYPE_PROPERTIES></TYPE></TYPE><TYPE>calib<TYPE>calibration<TYPE_PROPERTIES>Format;#;State;#;Size;#;Unit;#;Min;#;Max;#;Resol;#;Accuracy;#;BlockPath</TYPE_PROPERTIES><\TYPE><\TYPE>';
      num=1;

      for i=1:numel(tline)
      a = strfind(tline,'<TYPE>');
      a = a(i)+length('<TYPE>');
      %idxstrt = [idxstrt(i) length(tline)];

      b = strfind(tline,'<TYPE>');
      b= b(i+1)+length('<TYPE>');
      num=num+1;
      var = tline(a:(b-length('<TYPE>')-1))
      end
      end
      voilà ce qui s'affiche quand j'excute ce code moi je veux qu'il n'yait que signal et calib
      var =
      Signal
      var =
      Entrée <TYPE_PROPERTIES>Format;#;State;#;Size;#;Unit;#;Min;#;Max;#;Resol;#;Accuracy;#;BlockPath</TYPE_PROPERTIES></TYPE></TYPE>
      var =
      calib
      ??? Attempted to access b(5); index out of bounds because numel(b)=4.
      Error in ==> exemple at 13
      b= b(j+1)+length('<TYPE>');
      0