banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Fri 13 October 2023 12:35

Benoit91
Participant assidu
Date d'inscription: 2 Oct 2008
Messages: 263

StringSearcher ou StringReplacer avec expression regulière

Bonjour

Dans le cadre d'un projet, j'ai un workbench qui se connecte à une base de données MySQL qui récupère les données d'un formulaire en ligne. Ce formulaire permet aux administrés de faire une demande d'enquête de conformité assainissement. (pour prise de rdv)

En base de données je récupère un champ concaténant les longitudes, latitudes et adresse postale du logement faisant l'objet de la demande d'enquête.
Les valeurs sont de ce type:

48.60753671553298|2.320638656583469|19 Rue Clément Ader 91220 Brétigny-sur-Orge
48.6469|2.3196|35bis Rue des Ecoles 91700 Sainte-Geneviève-des-Bois
48.6118|2.3248|7 Avenue Gilbert Fergant 91220 Le Plessis-Pâté

Je souhaite isoler/récupérer les coordonnées géographiques x et y, l'adresse et le code postal+la commune (soit découper le champ initial en 4 champs d'info)
j'utilise ces expressions:
Pour longitude => 2[.][0-9]*
Pour Latitude => 48[.][0-9]*

Pour le code postal+la commune =>[0-9]{5} [a-zA-Zéèêàâù-]*     (A peaufiner car je ne récupère pas l'info pour "91220 Le Plessis-Pâté" - Si vous avez une solution je suis preneur :-) )

N'étant pas un pro des expression régulières, est-ce possible de récupérer directement la partie adresse ?
Si oui comment ?
et si non, je procèderai par suppression successives des coordonnées et code postal+commune.

En espérant avoir été suffisamment clair et merci d'avance.

Hors ligne

 

#2 Fri 13 October 2023 15:28

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1024
Site web

Re: StringSearcher ou StringReplacer avec expression regulière

Bonjour,

Pour les coordonnées et étant donné qu'il y a un delimiteur |, utilisez AttributeSplitter pour le découper et générer une liste dont les deux premiers index seront vos coordonnées.

L'application ne pourrait pas ajouter le délimiteur sur les autres informations à récupérer ou alors stocker les informations dans différents champs ?


Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com

Hors ligne

 

#3 Fri 13 October 2023 15:32

Hydrolithe
Participant assidu
Lieu: Lyon
Date d'inscription: 21 Apr 2010
Messages: 223

Re: StringSearcher ou StringReplacer avec expression regulière

Bonjour,

Pour extraire le code postal + la commune, tu peux utiliser l'expression régulière suivante :

Code:

[0-9]{5} [A-Za-zéèêàâù\s\-\\u00C0-\\u00FF]+$

Je n'ai aucun mérite, j'ai trouvé ça dans la liste de ressources publiée par Mathieu Rajerison, tout le crédit lui en revient :

https://github.com/datagistips/memos/bl … regexes.md

Pierre

Hors ligne

 

#4 Fri 13 October 2023 16:16

p.jeremie
Participant assidu
Lieu: Valence
Date d'inscription: 10 Sep 2017
Messages: 426

Re: StringSearcher ou StringReplacer avec expression regulière

Je rejoins Loïc, ça serait mieux si le formulaire ajoutait un délimiteur pour les composantes de l'adresse ou alors stockait tout dans des champs différents.

Néanmoins, avec cette expression rationnelle, vous devriez pouvoir vous en sortir pour découper l'adresse :

Code:

(.*) ([0-9]{5}) (.*)

Voir le détail : https://regex101.com/r/Ds8JPa/1

En utilisant un StringSearcher dans FME (avec l'option des subexpressions) et après avoir utilisé un AttributeSplitter, ça le fait !

Voir Workspace ci-joint.

A noter : j'ai considéré pour le code postal que ça n'était pas un code postal corse avec des A ou B mais seulement 5 chiffres. Il me semble que ça colle au besoin.

Dernière modification par p.jeremie (Fri 13 October 2023 16:22)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#5 Fri 13 October 2023 16:29

p.jeremie
Participant assidu
Lieu: Valence
Date d'inscription: 10 Sep 2017
Messages: 426

Re: StringSearcher ou StringReplacer avec expression regulière

Pour prendre en compte les codes postaux corses, l'expression suivante peut être utilisée :

Code:

(.*) ([0-9]{5}|2[AB][0-9]{3}) (.*)

Voir https://regex101.com/r/F1sKi5/1

Dernière modification par p.jeremie (Fri 13 October 2023 16:29)

Hors ligne

 

#6 Fri 13 October 2023 17:17

Benoit91
Participant assidu
Date d'inscription: 2 Oct 2008
Messages: 263

Re: StringSearcher ou StringReplacer avec expression regulière

Moi aussi je préférais que toutes ces informations soient séparées dans différents champs mais je n'ai pas le choix. Je n'ai pas la main sur la structuration de stockage des données. J'ai juste un accès en lecture qui me permet de récupérer les données. (merci FME pour nous permettre de nous adapter facilement)

En tout cas merci pour vos retours, j'ai opté pour:
un attributesplitter pour récupérer les cordonnées
un stringsearcher pour récupérer le code postal + commune
un stringreplacer pour supprimer le code postal + commune et ne conserver que l'adresse

çà fait le job.

Mon projet ne concerne que le territoire d'une agglo située en Essonne, donc pas besoin de la subtilité du regex pour les codes postaux corses, mais çà pourra toujours servir.

Merci tout le monde!

Hors ligne

 

Pied de page des forums

Powered by FluxBB