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 :

Manipulation de texte sous Matlab


Sujet :

MATLAB

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur opto-électronique
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur opto-électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 157
    Points
    157
    Par défaut Manipulation de texte sous Matlab
    Bonjour à tous,

    J'ai quelques soucis avec la manipulation de texte sous matlab, j'espère que vous pourrez m'aider.

    Je dispose d'un fichier dans lequel j'ai écrit le résultat d'un traitement de données. Ces résultats sont écrits sous la forme suivante:

    t1 a1 b1 c1...
    t2 a2 b2 c2...
    ...
    tn an bn cn


    A un moment, un problème sur les données traitées m'oblige a sauter un certain nombre de lignes jusqu'à pouvoir retrouver des données utilisables. Une fois que j'ai ces données, je voudrais faire une sorte de "reverse engineering" afin de remonter dans mon fichier texte et de réécrire les données que j'avais sauté.

    Une petit dessin étant mieux qu'un long discours, voici l'état de mon fichier à l'heure actuelle ('\n' signifiant que j'ai juste un retour à la ligne sur la ligne en question):

    t1 a1 b1 c1...
    t2 a2 b2 c2...
    ...
    tn an bn cn...
    \n
    \n
    \n
    tm am bm cm...

    Et je voudrais donc réecrire les lignes au dessus afin d'avoir ça:
    t1 a1 b1 c1...
    t2 a2 b2 c2...
    ...
    tn an bn cn...
    tn+1 an+1 bn+1 cn+1
    tn+2 an+2 bn+2 cn+2
    tn+3 an+3 bn+3 cn+3
    tm am bm cm...


    j'ai donc essayé le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    fid=fopen('text.txt','wt')
     
    ...    %inscription des données jusqu'à la ligne m (il y a donc eu les sauts de ligne)
     
    pos=ftell(fid)-L;  %récupération de la position actuelle du curseur,
    % qui est à la fin de la ligne m. Il y a L caractères sur cette ligne, je les
    % enlève donc afin de me retrouver au début de la ligne.
     
    for p=1:3
    fseek(fid,pos-p*2,'bof');  %placement du curseur au début de la ligne d'au dessus
    fprintf(fid,'%f\t',data_to_be_printed);
    end
    Résultat:
    si j'ai choisit le mode d'ouverture du fichier 'wt', l'inscription d'une ligne écrit par dessus les lignes qui suivent.
    Si je choisis le mode d'ouverture 'at', il ne m'est simplement pas possible de remonter dans le fichier, les lignes sont ajoutées à la fin de celui-ci.

    Y-a-t'il un troisième mode d'ouverture que j'aurai raté, ou auriez vous une méthode miracle à me proposer ?

    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 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 : 53 166
    Points
    53 166
    Par défaut
    Ce que tu cherches à faire est (quasiment) impossible

    Il faut nécessairement :
    1. lire l'intégralité du fichier
    2. fermer le fichier
    3. stocker les valeurs dans un tableau
    4. modifier ce tableau
    5. écraser le contenu du fichier avec ces nouvelles valeurs
    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)

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur opto-électronique
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur opto-électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 157
    Points
    157
    Par défaut
    J'avais en effet commencé par là, mais en pratique c'est pas 3 lignes que je saute c'est 18.000, après avoir écrit un truc du genre 250.000 lignes, donc j'espérais ne pas avoir à relire tout mon fichier ni stocker toutes les données.

    Et bien merci pour cette réponse rapide, je vais voir comment je peux optimiser la chose.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pourquoi ne pas créer un autre fichier en parallèle?
    Tu lis au fur et à mesure ton premier fichier et recopies ce que tu veux garder.
    Puis lorsque tu arrives à ce que tu veux remplacer, tu saute cette partie (\n...) dans le premier fichier et écris (tn+1 an+1 bn+1 cn+1 ....) dans le second.
    Dernière modification par Invité ; 23/05/2012 à 17h00.

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur opto-électronique
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur opto-électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 157
    Points
    157
    Par défaut
    C'est malheureusement plus compliqué que ça. Il ne s'agit pas que de sauvegarder les données. Je dois les "nettoyer" (comprendre supprimer des termes ou replacer les cases au bon endroit) au préalable, et il ne m'est parfois pas possible de les nettoyer directement, je suis obligé d'attendre d'avoir des données plus propres plus tard, et à partir de ça revenir aux données précédentes pour pouvoir modifier ce qui n'allait pas.

    Ce qui fait que concrètement je lis un peu le fichier dans les deux sens. Et l'ordre des données étant essentiel (c'est la seule base de temps que je possède), je ne peux pas me permettre de séparer des données comme ça.

    M'enfin je vais bien trouver une astuce pour contourner le problème, merci pour les conseils =)

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/06/2011, 10h39
  2. Importer données de fichier texte sous MATLAB
    Par Amaury63 dans le forum MATLAB
    Réponses: 14
    Dernier message: 18/05/2010, 15h14

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