#1 Tue 20 April 2021 10:33
- GOLDOSAM
- Participant actif
- Date d'inscription: 7 Jul 2017
- Messages: 54
Aide pour séparer chiffre et lettre.
Bonjour,
Pourriez-vous me dire comment je peux avec un transformer ou fonction séparer un nombre et lettre dans FME et récupérer ces valeurs pour en faire deux attributs ?
Exemple :
15bis -> 15 et bis
Merci à vous,
Hors ligne
#2 Tue 20 April 2021 17:46
- Benoit D
- Participant actif
- Date d'inscription: 17 Jul 2018
- Messages: 149
Re: Aide pour séparer chiffre et lettre.
Bonjour,
Le transformer StringSearcher avec comme expression (\d*)(\w*) (les chiffres d'abord, puis les lettres).
Vous pouvez laisser à vide MatchedResutAttribute et dans advanced, rentrez le nom de la liste qui contiendra les éléments, par exemple _elem
Dans votre résultat 15 sera dans _elem{0}.part et bis sera dans _elem{1}.part
Hors ligne
#3 Wed 21 April 2021 09:56
- GOLDOSAM
- Participant actif
- Date d'inscription: 7 Jul 2017
- Messages: 54
Re: Aide pour séparer chiffre et lettre.
Bonjour,
Merci de votre réponse.
Effectivement les expressions régulières sont très intéressantes à utiliser, je découvre.
J'ai ça à la place \d*|\w* , est-ce-que cela vous semble correct ?
Bien à vous,
Bonjour,
Le transformer StringSearcher avec comme expression (\d*)(\w*) (les chiffres d'abord, puis les lettres).
Vous pouvez laisser à vide MatchedResutAttribute et dans advanced, rentrez le nom de la liste qui contiendra les éléments, par exemple _elem
Dans votre résultat 15 sera dans _elem{0}.part et bis sera dans _elem{1}.part
Hors ligne
#4 Wed 21 April 2021 11:40
- GOLDOSAM
- Participant actif
- Date d'inscription: 7 Jul 2017
- Messages: 54
Re: Aide pour séparer chiffre et lettre.
Re,
Excusez-moi je suis novice avec FME et je l'utilise surtout pour de la base de données non spatiale.
Comment je fais pour récupérer ou éclater les éléments ?
J'utilise un ListExploder derrière ?
Merci à vous,
Bonjour,
Le transformer StringSearcher avec comme expression (\d*)(\w*) (les chiffres d'abord, puis les lettres).
Vous pouvez laisser à vide MatchedResutAttribute et dans advanced, rentrez le nom de la liste qui contiendra les éléments, par exemple _elem
Dans votre résultat 15 sera dans _elem{0}.part et bis sera dans _elem{1}.part
Hors ligne
#5 Thu 22 April 2021 09:21
- p.jeremie
- Participant assidu
- Lieu: Valence
- Date d'inscription: 10 Sep 2017
- Messages: 414
Re: Aide pour séparer chiffre et lettre.
Bonjour,
Il est possible de récupérer les valeurs de la liste avec un simple AttributeCreator ou AttributeManager en y faisant référence, par exemple en créant un nouvel attribut et en lui affectant la valeur_elem{0}.part on récupère le premier élément.
Concernant l'expression à utiliser, si vous pouvez avoir une espace entre le nombre et l'indice de répétition, il vaut mieux le prévoir.
J'ai fait un workspace test avec des données générées aléatoirement, voir ci-joint.
J'ai utilisée l'expression
Code:
^(\d*) *(\w*)$
Décomposition :
^ = début de ligne
(\d*)
parenthèses = groupe de capture
\d = chiffre
* = présent 0 ou plusieurs fois
*
espace = caractère espace
* = présent 0 ou plusieurs fois
(\w*)
parenthèses = groupe de capture
\w = caractère alphanumérique (0-9 ou a-z ou A-Z ou _)
* = présent 0 ou plusieurs fois
$ = fin de ligne
A tester ici : https://regex101.com/r/zbSQrs/1
Et concernant le paramétrage du StringSearcher, pour récupérer les groupes et non les "match", il faut utiliser la deuxième liste des options avancées.
Voir dans le workspace joint.
Dernière modification par p.jeremie (Thu 22 April 2021 09:22)
Hors ligne
#6 Thu 22 April 2021 10:09
- GOLDOSAM
- Participant actif
- Date d'inscription: 7 Jul 2017
- Messages: 54
Re: Aide pour séparer chiffre et lettre.
Bonjour,
Merci pour cette démonstration très intéressante qui me permet de mieux comprendre les expressions régulières et aussi une partie de fonctionnement de FME.
Effectivement c'est très ludique et explicite.
Autre question si je peux me permettre,
J'ai ce genre de donnée à préparer ainsi :
Départ de la donnée -> 10 A RUE DE TOTO ou 8 RUE DE TOTO
à la fin -> NUM_VOIRIE=10
SEQ=A
NOM_RUE=RUE DE TOTO
ou
à la fin -> NUM_VOIRIE=8
NOM_RUE=RUE DE TOTO
Quelle approche auriez-vous pour bien séparer mes données ?
Merci à vous,
Hors ligne
#7 Thu 22 April 2021 11:18
- p.jeremie
- Participant assidu
- Lieu: Valence
- Date d'inscription: 10 Sep 2017
- Messages: 414
Re: Aide pour séparer chiffre et lettre.
Je n'ai pas encore eu à traiter ce genre de cas mais c'est une problématique qui se présente régulièrement. La recherche dans le forum (hors spécifique FME) n'a rien donné ?
Peut-être d'autres personnes qui ont déjà traité ce cas auront une meilleure approche.
Pour ma part je commencerais par chercher ce qui se fait ailleurs.
Et je pense qu'un premier split en utilisant le mot clé de type de voie (RUE, AVENUE...) sera nécessaire pour isoler le numéro et indice de répétition. Mais il y a peut-être d'autres moyens...
Hors ligne
#8 Thu 22 April 2021 11:28
- GOLDOSAM
- Participant actif
- Date d'inscription: 7 Jul 2017
- Messages: 54
Re: Aide pour séparer chiffre et lettre.
Merci pour votre orientation, c'est vrai que de faire un splitter sur un mot je n'y avais pas pensé.
Merci à vous,
Bonne journée,
Hors ligne
#9 Thu 22 April 2021 20:43
- p.jeremie
- Participant assidu
- Lieu: Valence
- Date d'inscription: 10 Sep 2017
- Messages: 414
Re: Aide pour séparer chiffre et lettre.
Expression à reprendre sur l'autre sujet que tu as créé, donnée par Cquest :
Code:
^([0-9]*) ?(.|BIS|TER|QUATER)? (.*)$
https://georezo.net/forum/viewtopic.php … 27#p342627
Ca devrait bien fonctionner dans FME.
Dernière modification par p.jeremie (Thu 22 April 2021 20:43)
Hors ligne