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

WinDev Discussion :

Extraire plusieurs éléments d'une chaîne


Sujet :

WinDev

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 123
    Points : 36
    Points
    36
    Par défaut Extraire plusieurs éléments d'une chaîne
    Bonjour à tous,

    J'ai une chaîne sous la forme suivante :

    MaChaîne="P04-Test-1.doc"

    Dans cette chaine je souhaiterais extraire les éléments suivants :

    -P04
    -Test
    -1
    -.doc

    J'ai essayé avec la fonction extrait chaine, mais je n'arrives pas à obtenir tout les éléments.. et j'avoue que je ne sais pas trop comment faire...

    Une idée ?

    Merci

  2. #2
    Membre chevronné Avatar de EDM-TAHITI
    Homme Profil pro
    Directeur Service informatique et projet développement
    Inscrit en
    Janvier 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Directeur Service informatique et projet développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 994
    Points : 1 995
    Points
    1 995
    Par défaut
    Hello,
    je suppose que tu ne récuperes pas l'information du '.doc', n'est-ce pas?
    Ton code serait utile car il n'y a pas de difficulté à cela, honnetement...
    Montres-ton code, et là, nous pourrons alors te donner les erreurs que tu as commises (ou pas de programme homis).
    le savoir est dans les livres, 'the magic touch F1'
    Amicalement
    Eric

  3. #3
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 67
    Points : 79
    Points
    79
    Par défaut
    il faut utiliser extraitchaine mais avec 2 séparateurs différents (le . et le - )

    mais effectivement il n'y a aucune difficulté majeur. Met nous ton code, on pourra te guider plus facilement

  4. #4
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    Est-ce que ton nom de fichier se compose toujours de la même façon?
    "chaine 1"-"chaine2"-"chaine3"+extension

    Si ta réponse est oui
    alors regarde la fonction fExtraitChemin() qui te donnera le nom du fichier puis l'extension
    ensuite utilise ExtraitChaîne avec comme séparateur "-" et en premnat le rang 1,2 et 3

    Ensuite donne nous le code que tu as essayé et qui ne retourne pas ce que tu veux, on pourra peut-être te dire pourquoi cela ne marche pas.

    Si ta réponse est non
    alors indique nous la structure qui compose ton nom de fichier
    ex :
    "chaine 1"-"chaine2"-"chaine3"-"chaine4"-"etc..."+extension
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 123
    Points : 36
    Points
    36
    Par défaut
    Merci pour vos réponses....

    Alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	MonTitre est chaîne="P5-01-Test-01.doc"
    	MonExtension est une chaîne //doit contenir doc
    	MaVersion est une chaîne // doit contenir 1
    	MonIntitule est chaîne // doit contenir Test
            MonCode1 est chaîne  //doit contenir P
            MonCode 2 est chaine // doit contenir 5-01
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MonExtension=ExtraitChaîne(MonTitre,1,".",DepuisFin) // Retourne Doc => OK
    	MaVersion=ExtraitChaîne(MonTitre,1,"-",DepuisFin) // Retourne 01.doc  => PAS OK
    Déjà pour commencer, je suis bloqué pour récupérer la valeur de ma version. Ici 01

    Ensuite idem pour mon code1 et moncode 2 avec le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Code1 = ExtraitChaîne(MonTitre,1,"-",DepuisDebut)
    //retourne P5 au lieu de P
    Code2= // Non traité pour l'instant

    Je n'ai pas l'habitude d'utiliser cette fonction et j'avoue galérer pas mal

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 123
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par mail.spam Voir le message
    Bonjour,

    Est-ce que ton nom de fichier se compose toujours de la même façon?
    "chaine 1"-"chaine2"-"chaine3"+extension

    Si ta réponse est oui
    alors regarde la fonction fExtraitChemin() qui te donnera le nom du fichier puis l'extension
    ensuite utilise ExtraitChaîne avec comme séparateur "-" et en premnat le rang 1,2 et 3

    Ensuite donne nous le code que tu as essayé et qui ne retourne pas ce que tu veux, on pourra peut-être te dire pourquoi cela ne marche pas.

    Si ta réponse est non
    alors indique nous la structure qui compose ton nom de fichier
    ex :
    "chaine 1"-"chaine2"-"chaine3"-"chaine4"-"etc..."+extension
    MonTitre se compose toujours de la façon suivante :
    Chaine1(P)Chaine2(5-01)-Chaine3(Test)-Chaine4(Version).Chaine5(doc)

  7. #7
    Membre confirmé Avatar de Nhaps
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 350
    Points : 603
    Points
    603
    Par défaut
    Bonjour

    Entre chaîne 1 et chaîne 2, il y a aucun séparateur, ça complique la chose.

    Sinon pour une première étape, pour extraire l'extension, mais aussi pour avoir une chaîne 'chemin', je te conseille de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    chemin est une chaîne = ExtraitChaîne(machaine, 1, ".")
    extension est une chaîne = ExtraitChaîne(machaine, 2, ".")
    comme ça ensuite tu pourras jouer avec ta nouvelle variable chemin
    Windev 23 - SQL SERVER - PHP
    Play : TFT - Jeux indé

  8. #8
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Donc

    chaine1 contient le premier caractère?

    chaine2 contient le resultat de chaineextrait du rang 1et2 avec comme séparateur "-" moins le premier caractère

    chaine3 contient le resultat de chaineextrait du rang 3 avec comme séparateur "-"

    chaine4 contient le resultat de chaineextrait du rang 4 avec comme séparateur "-"

    chaine5 contient le resultat de chaineextrait du rang 2 avec comme séparateur "." ou les derniers caractères situé après le dernier "."

    Voilà en gros je t'ai décomposé l'algorythme je ne vais pas te donner le code car tu le trouvera si tu cherche un peu.
    Bon courage.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  9. #9
    Membre éprouvé

    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    402
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 402
    Points : 915
    Points
    915
    Par défaut
    MaChaîne="P04-Test-1.doc"

    remplacer "-" par un caractère improbable comme "***"

    remplacer "." par un caractère improbable comme "***"

    on obtiendrait : MaChaîne="P04***Test***1***doc"

    alors le séparateur serait "***"

  10. #10
    Membre chevronné Avatar de EDM-TAHITI
    Homme Profil pro
    Directeur Service informatique et projet développement
    Inscrit en
    Janvier 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Directeur Service informatique et projet développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 994
    Points : 1 995
    Points
    1 995
    Par défaut
    Hello,

    MaChaîne="P04-Test-1.doc"
    remplacer "-" par un caractère improbable comme "***"
    remplacer "." par un caractère improbable comme "***"
    on obtiendrait : MaChaîne="P04***Test***1***doc"
    alors le séparateur serait "***"
    Pourquoi faire compliqué quand Mail.Spam a donné la solution simple?
    Certes, sans code, mais la logique est là, si, si...
    le savoir est dans les livres, 'the magic touch F1'
    Amicalement
    Eric

  11. #11
    Membre éprouvé

    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    402
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 402
    Points : 915
    Points
    915
    Par défaut
    Ben ça ça aurait été compliqué :

    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
     
    MaChaine est une chaîne="P04-Test-1.doc"
    ch est une chaîne
    cptRang est un entier=0
    tableauSousChaine est un tableau dynamique de chaînes
     
    tableauSeparateur est un tableau dynamique de chaînes
    TableauAjoute(tableauSeparateur,"-")
    TableauAjoute(tableauSeparateur,".")
    BOUCLE
    	cptRang++
    	ch=ExtraitChaîne(MaChaine,cptRang,tableauSeparateur)
    	SI TAILLE(ch)>0 ALORS
    		TableauAjoute(tableauSousChaine,ch)
    	SINON
    		SORTIR
    	FIN
    FIN

  12. #12
    Membre chevronné Avatar de EDM-TAHITI
    Homme Profil pro
    Directeur Service informatique et projet développement
    Inscrit en
    Janvier 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Directeur Service informatique et projet développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 994
    Points : 1 995
    Points
    1 995
    Par défaut
    Hello,
    Certes, c'est aussi une solution, mais compliquée à mon sens...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    machaine est chaîne="P5-01-Test-01.doc"
    chRang1 est une chaine = ""
    chRang2 est une chaine = ""
    chRang3 est une chaine = ""
    chRang4-1 est une chaine = ""
    chRang4-2 est une chaine = ""
     
    chRang1    = ExtraitChaîne(machaine, 1, "-", depuisdebut)
    chRang2    = ExtraitChaîne(machaine, 2, "-", depuisdebut)
    chRang3    = ExtraitChaîne(machaine, 3, "-", depuisdebut)
    chRang4-1 = ExtraitChaîne(machaine, 1, "-", depuisfin)
    chRang4-2 = ExtraitChaîne(chRang4-1, 1, ".", depuisfin)
    chRang4-1 = ExtraitChaîne(chRang4-1, 1, ".", depuisdebut)
    Cet exemple n'a pour but que le côté didactique d'affectation de variables directes en utilisant ExtraitChaine avec les options depuisdebut et depuisfin...
    Certes, les boucles sont intéressantes dans des gros traitements.
    C'est quelques lignes permettent également de suivre les non-affectations sans trop se poser de question...
    Mais on peut faire encore plus simple en déclarant et en affectant directement... Encore moins de lignes à saisir...
    Du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    chRang1 est une chaine = ExtraitChaîne(machaine, 1, "-", depuisdebut)
    mais je suis vieux jeu... à mon âge, on va pas me refaire...
    le savoir est dans les livres, 'the magic touch F1'
    Amicalement
    Eric

  13. #13
    Membre éprouvé

    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    402
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 402
    Points : 915
    Points
    915
    Par défaut
    L'avantage de la boucle est que tu peux transformer ce code en procédure ou en méthode d'objet. Tu passes en argument une chaine et un tableau de séparateur ou mieux encore la chaine et le tableau sont des membres de ton objet.
    Dans ce cas tu traites avec les mêmes lignes une chaine comme :
    "mon-doc.au-nom.super-complexe.2012-11-10.doc" et le tableau renvoyé contient toujours tous tes tronçons.

  14. #14
    Membre chevronné Avatar de EDM-TAHITI
    Homme Profil pro
    Directeur Service informatique et projet développement
    Inscrit en
    Janvier 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Directeur Service informatique et projet développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 994
    Points : 1 995
    Points
    1 995
    Par défaut
    Hello,
    Je suis entièrement d'accord avec toi, ou presque.
    reconnais que si la question posée sur des fonctions simples n'est pas comprise, pourquoi vouloir rajouter des difficultés supplémentaires?
    Le but de nous tous ici est de donner des pistes, voire des solutions dans certains cas, mais le but ultime à atteindre est bien de faire avancer pas à pas les personnes qui posent des questions... et qu'elles comprennent leurs erreurs et/ou les défauts qui les ont amenés ici...
    Donc, OUI, tu as raison, sur ta solution... qui est liée à une excellente connaissance des possibilités de Windev.
    Mais là, ce n'est pas le cas pour jujurochedu42 sur une fonction simple.
    L'apprentissage est long et fastidieux, autant le faire petit à petit...
    Ne demandons pas aux débutants d'avoir la connaissance et le recul en programmation 'Windevienne' que nous avons, simplement, d'avoir un minimum de logique et de réflexion...
    le savoir est dans les livres, 'the magic touch F1'
    Amicalement
    Eric

  15. #15
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    Et puis si vous allez dans le coté recherche de solution tu peux aussi allez vers les expressions régulières.
    Mais comme le dis EDM-TAHITI le but étais de trouver une solution, parmi plusieurs, au problème.
    Comme on le dis tous les chemins mènent...

    il faut aussi garder en mémoire qu'on peut écraser un oeuf avec un bulldozer,
    mais c'est pas forcement utile surtout si l'oeuf ne grossit pas.
    Je vous laisse méditer dessus.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  16. #16
    Membre éprouvé

    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    402
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 402
    Points : 915
    Points
    915
    Par défaut
    Tout à fait d'accord avec vous.
    J'espère cependant que son oeuf va grossir et même qu'il commence à grossir et qu'il va finir par éclore depuis 2009 et 102 messages.
    Donc je lui conseille de bien digérer votre solution et une fois qu'il aura l'impression d'avoir compris de revenir sur son message.
    Afin d'intégrer ce qu'est un tableau, une boucle et une fonction.
    (je crois qu'on voit ça dans les deux premières semaines habituellement.)
    Bon courage à tous et merci.

Discussions similaires

  1. [RegEx] Extraire un élément d'une chaîne variable
    Par almoha dans le forum Langage
    Réponses: 2
    Dernier message: 03/03/2012, 08h53
  2. [re] Extraire plusieurs morceaux d'une chaine
    Par Hunhau dans le forum Général Python
    Réponses: 4
    Dernier message: 31/07/2006, 13h44
  3. Comment remplacer plusieurs caractères dans une chaîne?
    Par Antigonos Ier Gonatas dans le forum Général Python
    Réponses: 5
    Dernier message: 16/06/2006, 16h04
  4. Supprimer un élément d'une chaîne de caractères
    Par kespy13 dans le forum Langage
    Réponses: 3
    Dernier message: 15/04/2006, 13h09
  5. [TestStand] Compter les éléments d'une chaîne de caractères
    Par capblans dans le forum Autres langages
    Réponses: 2
    Dernier message: 29/04/2005, 09h29

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