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 :

enlever des espaces superflus [Débutant]


Sujet :

MATLAB

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Par défaut enlever des espaces superflus
    Bonjour a tous,

    Alors voila, mon probleme est le suivant :


    En sortie d'un programme, j'ai une matrice que je cherche a sauvegarder pour l'utiliser dans un autre programme. Pas de probleme me direz vous.. J'ai fait le bout de code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    fid=fopen(['./marker_map/marker_map_' int2str(nb_mark) '_' int2str(i) '.marker'],'wt');
    fprintf(fid,'%d\n',nb_class);
    for i=1:dim(2)   
        fprintf(fid,[int2str(marker_map(i,:)) '\n']);   
    end
    vect_class=zeros(1,nb_class);
    for j=1:nb_class
        vect_class(j)=j;
    end
    fprintf(fid,[int2str(vect_class(:,:))]);
    fclose(fid);
    Ca me donne un fichier du type :

    16
    3 0 0 0 0 2
    0 3 3 3 3 0
    3 3 0 3 3 3
    11 0 0 0 0 3
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
    C'est juste un petit bout du fichier, sinon, ca fait un truc de 145x145, donc un peu trop grand pour afficher ici..
    le truc important, c'est qu'ici, le nombre d'espaces entre les differents elememts de ma matrice sont variables (2,3 ou 4 parfois). Les elements de ma matrice peuvent prendre des valeurs entieres entre 0 et 16 (juste pour info, car pas tres important pour expliquer mon probleme)

    Le truc, c'est qu'il faudrait que j'adapte autrement mon format de sortie pour avoir :
    - UN seul espace entre chaque elements
    - UN espace a la fin de chaque ligne (pour le moment, il n'y en a pas)

    C'est pas tant l'espace en fin de ligne qui me derange (ca devrait pas etre trop dur de concatener une chaine en fin de ligne), mais c'est surtout la supression de ces espaces en trop.

    J'avais pense a utiliser la fonction "strrep", mais le caractere "variable" de mes espaces ne m'inspire pas trop en ce sens...
    Je voulais aussi essayer avec "strstrim", mais en fait ca sert a rien dans mon cas...

    Donc voila, si quelqu'un a une idee, je suis preneur!!
    Merci d'avance,

    Kevin

  2. #2
    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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Bonjour,

    Je pense que la fonction REGEXPREP pourrait convenir à ton problème...

    Il ne reste plus qu'à trouver la bonne expression à lui donner

    Une idée vite fait (avec a ta variable String):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    regexprep(a,' {2,100}',' ')
    Bonne journée,
    Duf

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    fid=fopen(['./marker_map/marker_map_' int2str(nb_mark) '_' int2str(i) '.marker'],'wt');
    fprintf(fid,'%d\n',nb_class);
    for i=1:dim(2)   
        fprintf(fid,'%d ',marker_map(i,:));   
        fprintf(fid,'\n');
    end
    vect_class=zeros(1,nb_class);
    for j=1:nb_class
        vect_class(j)=j;
    end
    fprintf(fid,'%d ',vect_class(:,:));
    fclose(fid);
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Par défaut
    Ok, un grand merci a vous deux pour vos reponses si rapides!!

    J'ai garde la solution de magellan. J'ai aussi essaye (un peu) de faire ce que tu proposais Duf, mais j'ai echoue pour la generalisation (et j'avoue ne pas avoir trop cherche...) pour toute la matrice.

    Encore merci!

    Kevin

  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 317
    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 317
    Par défaut
    Citation Envoyé par magelan Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    vect_class=zeros(1,nb_class);
    for j=1:nb_class
        vect_class(j)=j;
    end
    =>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vect_class = 1:nb_class;

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Ah oui je n'avais regarde que la fonction fprintf dans le code de Kevin07
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Par défaut
    erf..
    aussi...
    D'habitude je suis pas franchement du genre a faire des allocations de memoire... Mais la, allez savoir pourquoi, j'en ai fait une.

    Merci de la remarque Dut!

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

Discussions similaires

  1. [Turbo Pascal] Saisie d'une chaîne, suppression des espaces superflus et inversion de la chaîne
    Par hannouta dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 13/08/2012, 14h29
  2. Réponses: 18
    Dernier message: 29/04/2010, 16h40
  3. [SQLSERVER 2K]Enlevé des espaces dans une chaine
    Par MeHo_ dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/07/2008, 15h51
  4. enlever des espaces dans un texte
    Par juin29 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 22/03/2007, 15h45
  5. Réponses: 1
    Dernier message: 18/05/2006, 09h11

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