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 :

séparer une chaine de caractères [Débutant]


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut séparer une chaine de caractères
    Bonjour, est il possible de séparer en plusieurs variable une chaine de caractère?

    je récupére le nom des fichier que j'ouvre qui sont tous du type :

    aaaa bb ccc ddd ee.txt
    je souhaiterai que chaque partie du nom deviennent une variable afin de l'enregistrer dans des cellules séparer d'excel.

    Si vous savez comment séparer le texte dèjà je pense que je m'en sortirai pour le reste...

    merci.

  2. #2
    Membre actif
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 213
    Points
    213
    Par défaut
    Il ya une très bonne fonction strsplit qui fait ça dans Matlab Central : http://www.mathworks.com/matlabcentr...exchange/21710

  3. #3
    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
    Je ne doute pas que la fonction du FEX soit intéressante, elle a l'air de faire plein de trucs sympas.
    Mais c'est peut-être un peu utiliser un bazooka pour tuer une mouche, non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    s='aaaa bb ccc ddd ee.txt ';
    [d,f]=fileparts(s);%enleve l'extension
    res=strread(f,'%s')

  4. #4
    Membre actif
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 213
    Points
    213
    Par défaut
    wow ! je n'avais pas du tout penser à cette utilisation de strread !
    Merci Caro !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut
    je ne comprend pas bien comment fonctionne ton code Caro!!

    Ce que je veux faire c'est bien regrouper dans plusieurs variable :
    par exemple :
    a=aaaa
    b=bb
    c=ccc
    d=ddd
    e=eee
    et ensuite que chacune de ces variable soit envoyé dans une colonne colonne d'excel...

    donc déjà récupérons les variables.

  6. #6
    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
    Pourquoi ? Il est pas bien mon tableau de cellules ?
    En plus c'est bien un tableau de cellules pour envoyer dans Excel car c'est ce qu'il faut mettre en paramètre de XLSWRITE.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut
    en fait il me sort l'erreur suivante:

    ??? Error using ==> fileparts at 17
    Input must be a row vector of characters.

    Error in ==> lecture6 at 29
    [d,f]=fileparts(s);%enleve l'extension

  8. #8
    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
    Ah ben c'est déjà plus parlant.

    Moi j'ai pris comme hypothèse que ta chaine de caractères était ben dans une chiane de caractères (classe string).
    Apparemment ce n'est pas le cas.
    Il ressemble à quoi ton s à toi ? C'est quoi comme type d'objet ?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut
    le nom de mon fichier que je récupére ressemble à ça :
    100c Au16 Au1 05N (5-2).txt
    Et le s me met tous les caractéres en vertical...

    quand je regarde dans les variable que me sort matlab il me sort le s comme ça :
    s =

    1
    0
    0
    c

    A
    g
    1
    6

    A
    u
    1

    0
    5
    N

    (
    5
    -
    2
    )
    .
    t
    x
    t

  10. #10
    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
    Il suffit donc de le transposer avant d'appliquer mon code :

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        s{n}=FileName{n};
        [espace{n},chaine{n}]=fileparts(s{n});%enleve l'extension
        res{n}=strread(chaine{n}','%s')
    Alors j'utilise ça. comme j'ouvre plusieurs fichier en même temps, j'ai plusieurs cellule où sont placées le résultat de 'res'. Maintenant je n'arrive pas à récupérer chacune des cellules pour les transformer en matrice... ça doit surement être tout bête, mais je ne comprend pas...

  12. #12
    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
    pour commencer

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut
    pour le moment j'ai ça :

    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
    for n=1:length(FileName)
        fullfile(PathName, FileName{n});
        h.fid{n} = fopen(fullfile(PathName,FileName{n}),'rt');
        for k=1:46
            fgetl(h.fid{n});
        end
        h.X{n}= fscanf(h.fid{n},'%f',[7,inf]).';
        fclose(h.fid{n});
     
        h.Y{n}=abs(h.X{n}(:,4));
        h.idx{n} = h.X{n}(:,4)>0;
        h.Xpos{n} = h.X{n}(h.idx{n},:);
        h.Xneg{n} = h.X{n}(~h.idx{n},:);
     
        h.mean{n}=mean(h.Y{n});
        h.meanneg{n}=mean(-h.Xneg{n}(:,4));
        h.meanpos{n}=mean(h.Xpos{n}(:,4));
     
        h.mu{n}=smooth(h.Y{n},2000,'moving');
        h.mupos{n}=smooth(h.Xpos{n}(:,4),2000,'moving');
        h.muneg{n}=smooth(-h.Xneg{n}(:,4),2000,'moving');
     
        s{n}=FileName{n};
        [espace{n},chaine{n}]=fileparts(s{n});%enleve l'extension
        res{n}=strread(chaine{n}','%s');
    end
     
    %lecture fichier excel contenant les coefficients de frottement moyen
    [h.coef, h.texte]=xlsread('D:\PFE\essai_usure\courbes\coefficient_de_frottement.xls','feuil1');
     
    %fabrication de la matrice contenant toutes les données enregistrées
    h.b=[h.texte,num2cell(h.coef)];
     
    %recherche de la taille de la matrice b
    [h.l, h.c]=size(h.b);
     
    %définition de la position de la cellule de la prochaine écriture dans le fichier excel
    h.d=sprintf('A%d',h.l+1);
     
    % mise en matrice de 'res' mais ça marche pas
    res1=cell2mat(res{1});
     
    %récupération des données à enregistrer mise dans une matrice
    h.g=[res; h.mean; h.meanpos ;h.meanneg];
     
    %Enregistrement des données à la suite du fichier excel
    xlswrite('D:\PFE\essai_usure\courbes\coefficient_de_frottement',h.g','Feuil1',h.d);
    Il me sort cette erreur :

    ??? Error using ==> cell2mat at 55
    Cannot support cell arrays containing cell arrays or objects.

    Error in ==> lecture6 at 67
    res1=cell2mat(res{1});
    merci de votre aide...

  14. #14
    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
    res est un tableau de cellules dont chaque cellule contient lui-même un tableau de celulles contenant des chaines de caractères.
    Utilise le debugguer pour t'arrêter après ta boucle tu auras ainsi accès à la variable res pour comprendre comment elle fonctionne.

    Et de toute façon pourquoi veux-tu le transformer en une "matrice" ?
    Le terme étant inapproprié ici puisque ce sont des chaiens de caractères au final qu'il y a dedans.

    Si tu nous donnais un exemple avec 2 fichiers et ce que tu veux au final ?

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut
    admettons qu'on ai 2 fichier textes ayant pour titre :
    100c Ag16 Au1 05N (5-2).txt
    100c Au16 Au05 05N (5-2).txt
    il y a trés peu de différence dans les titres, c'est normale car chaque titre correspond à la configuration de mon essai.

    ce que je souhaiterai, c'est de mettre chacun des termes du titre dans une cellule excel différente afin ensuite de pouvoir faire un tri par rapport au paramettre. le fichier excel me permettra de garder une trace de toute les valeurs qui sont calculées par matlab.

    en fait dans excel au final j'aurai :
    100c | Ag16 | Au1 | 05N | (5-2) | variable1 | variable2 | variable3
    100c | Au16 | Au1 | 05N | (5-2) | variable1 | variable2 | variable3
    ect...
    merci

  16. #16
    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
    Regarde ce que vaut :Tu devras peut-être transposer pour obtenir ce que tu veux.

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut
    merci pour ton aide!!

    voilà ça marche comme je veux et j'obtien bien ce que j'ai besoin!!

    Merci beaucoup!!

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

Discussions similaires

  1. Séparer une chaine de caractères sans split
    Par ndsaerith dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 24/05/2011, 16h05
  2. [MySQL] Séparer une chaine de caractères dans ma table
    Par keokaz dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 02/11/2008, 19h39
  3. [BO XI R2] Séparer une chaine de caractère
    Par perrine1985 dans le forum Deski
    Réponses: 2
    Dernier message: 16/04/2008, 10h01
  4. Séparer une chaine de caractère
    Par fabienschmitt dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 08/11/2006, 14h57
  5. Réponses: 15
    Dernier message: 23/01/2006, 04h35

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