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 :

Lecture / Recupération / Modification / Réécriture d'un fichier texte


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Lecture / Recupération / Modification / Réécriture d'un fichier texte
    Bonjour,

    Utilisant Matlab depuis peu, j'ai été amené à faire, pour mon travail, de la lecture (récup') de données à partir d'un fichier texte, de la modification de ces données et de la réécriture du fichier texte. Plus simplement cette procédure équivalente à changer dans un fichier texte une chaine de caractères où qu'elle soit.

    Comme j'ai pas mal galéré et je me suis aidé par ci par là de bouts de procédures proposées dans plusieurs forums voici un récapitulatif qui j'espère pourra aider certains d'entre vous.

    Ici l'objectif est de changer la valeur 0. de hardeding

    --------------------------------------------
    Le fichier texte à modifier : propietes_mat.txt
    --------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    caracteristiques materiau
    elasticity    young        210000.     poisson        0.3
    plasticity    hardening    0.          yield          250.
    material      steel
    -------------------
    Algorithme Matlab :
    -------------------
    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
    clear all
     
    %---------------------------------------------
    %1ere Partie : 
    %Lecture des données du fichier .txt
    %---------------------------------------------
     
    fid=fopen('proprietes_mat.txt','r');
    i=0;
    Data=[];
    % récupération de toutes les lignes du fichier initialement ouvert sous un tableau de cellules Data
    while feof(fid)==0
    	i=i+1;
    	tline=fgets(fid);
    	Data{i}=tline;
    end
    fclose(fid);
    % fermeture du fichier.
     
    %---------------------------------------------
    %2ème Partie : 
    %Transformation des données du tableau de cellules pour une utilisation avec les fonctions de Matlab
    %---------------------------------------------
     
    plast=[]; 
    for j=1:size(Data,2)
    	Data_mat(j,1)=cellstr(Data{j}); %transformation du tableau en format : cell array  en un tableau en format : string array
    	Data_mat_2=cell2mat(Data_mat(j,1)); %transformation d'une cellule du tableau (format string) en une chaine de caractères simple
    	read=textscan(Data_mat_2,'%5c',1); %scan de la chaine et récupération des 5 premiers caractères de la chaine dans une cellule
    	clear Data_mat_2;
    	read2=read{1,1}; %transformation de la cellule de caractères en un string.
    	if read2=='plast' %on cherche à trouver quelles sont les lignes qui commencent par 'plast'
    		plast=[plast,j];
    	end
    	clear read2;
    end
    clear Data,clear j,clear i;
     
    %---------------------------------------------
    %3ème Partie : 
    %Modification d'une des chaines de caractères
    %---------------------------------------------
    for i=1:size(plast,2) %utilisation de la boucle si jamais il y a plusieurs ligne commencant par plast que l'on aimerait modifier.
    	Data_mat(plast(1,i),1)=regexprep(Data_mat(plast(1,i),1),'hardening    0.     ','hardening    110.   '); %réécriture d'une partie de la chaine de caractère
    end
     
    %---------------------------------------------
    %3ème Partie : 
    %Réécriture du fichier corrigé dans le fichier texte
    %---------------------------------------------
    fid=fopen('proprietes_mat.txt','w');
    for k=1:size(Data_mat,1)
    	Data_mat_2=cell2mat(Data_mat(k,1)); %transformation d'une cellule du tableau (format string) en une chaine de caractères simple
    	fwrite(fid,Data_mat_2); %écriture
    	fprintf(fid,'\n'); %permet de passer à la ligne suivante dans l'écriture du fichier
    	clear Data_mat_2
    end
    fclose(fid);
    %-------------------------------------------------------------------
    %-------------------------------------------------------------------
    Ca peut paraitre long mais j'ai pas trouvé plus simple.

    Olivier

  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
    Citation Envoyé par Olivier.D Voir le message
    Ca peut paraitre long mais j'ai pas trouvé plus simple.
    Une autre 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
    % Lecture du fichier
    fid = fopen('proprietes_mat.txt','r');
        X = fread(fid,[1,inf]);
    fclose(fid);
     
    % Paramètres à modifier
    str = 'hardening';
    val = '100.';
     
    % Modification des paramètres
    idx = strfind(X,str)+13;
    X(idx:idx+11) = 32;
    X(idx:idx+numel(val)-1) = val;
     
    % Réécriture du fichier
    fid = fopen('proprietes_mat2.txt','w');
        fwrite(fid,X);
    fclose(fid);

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Ca m'aurait bien aidé de trouver ca avant, vu comme ça c'est très simple et rapide.

    Merci beaucoup je vais ainsi pouvoir simplifier mon code !!

Discussions similaires

  1. lecture et écriture à partir d'un fichier text
    Par bigmonstre dans le forum Débuter
    Réponses: 6
    Dernier message: 18/02/2010, 14h02
  2. Réponses: 5
    Dernier message: 05/04/2008, 13h49
  3. Réponses: 1
    Dernier message: 26/09/2007, 20h55
  4. recupérer un nombre dans un fichier texte
    Par coincoin22 dans le forum Linux
    Réponses: 10
    Dernier message: 13/08/2007, 12h37
  5. Réponses: 20
    Dernier message: 09/02/2006, 10h45

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