Message posté par : Pascal1968
----------------------------------------
Bonjour à toutes et tous,
J'ai un petit souci d'extraction partielle d'une chaîne de caractères d'un
champ pour remplir un autre champ.
Je sais qu'il y déjà quantité de sujet du même style, mais l'expression que
j'utilise fonctionne parfaitement sauf pour un cas en particulier.
Si quelqu'un sait me dépanner ... ?
Soit une couche avec un champ "Fullname" comprenant des valeurs de type :
Abies concolor => Genus + Species
Acer campestre _'Elsrijk' => Genus + Species + Cultivar
Carpinus betulus _'Albert Beeckman' => Genus + Species + Cultivar (cultivar en
deux mots)
Ilex _'Nellie R. Stevens' => Genus + Cultivar
Populus (x) canadensis => Genus + Species (mais avec "(+)" devant le nom
d'espèce)
Salix (x) sepulcralis _'Chrysocoma' => Genus + Species (mais avec
"(+)" devant le nom d'espèce) + Cultivar
Je souhaite remplir automatiquement un champ "Genus", un champ
"Species" et un champ "Cultivar" sur base de "Fullname".
"Genus" est le premier mot de "Fullname".
"Species" est le second mot sans quotes de "Fullname" lorsque ce
deuxième mot existe.
"Cultivar est le second ou troisième mot de "Fullname" et est toujours
entre deux quotes.
Pour "Genus", en valeur par défaut, je mets : array_get (string_to_array
("Fullname",' '), 0)
Pour "Cultivar", en valeur par défaut, je mets : array_get (string_to_array
("Fullname",'_'), 1)
Les deux expressions fonctionnent à marveille.
Le problème est pour le champ "Species".
En valeur par défaut, pour résoudre tous les différents cas, je mets:
CASE
WHEN length("Fullname")-length(replace("Fullname", '(x)',
'')) = 3
THEN 'x '||array_get (string_to_array ("Fullname",'(x)'), 1)
ELSE
array_get (string_to_array ("Fullname",' '), 1)
END
Cela fonctionne dans tous les cas sauf un: les valeur du type Salix (x) sepulcralis
_'Chrysocoma' qui renvoient "x sepulcralis _'Chrysocoma'".
Il y a donc la partie ( _'Chrysocoma') en trop.
Voir capture d'écran :
https://imagizer.imageshack.com/img923/2386/5YvlLf.jpg
J'ai essayé de comprendre l'expression regexp_substr, mais sans succès
Elle me semble pourtant être adaptée à ce que je souhaite faire : extraire une partie
d'une chaîne de caractères, toujours comprise entre les deux mêmes caractères.
Début = la parenthèse fermée.
Fin = le underscroll (en réalité, l'espace avant le underscroll).
Une âme charitable pourrait-elle me mettre sur la bonne piste ?
D'avance merci !
----------------------------------------
Ce message est accompagné de fichiers, pour les télécharger, suivre le lien ci-dessous.
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=362483#p362483
Pour y répondre : qgis_fr(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net