Page 1 sur 1

[..] Extraction Nom Prénom  

Posté : lun. 18 juil. 2022 18:45
par Yle
Bonjour

J'ai un fichier avec de nombreuses lignes et je dois extraire les noms et prénoms.

Voici 3 exemples de lignes :

HANGARD Thérèse HANGARD Alain CHAPELLE Muriellle LEPRINCE André Normandie 17 2T 1T 4P 3T
HERBELIN Patrick BARRET Didier TILLETTE D'ACHEUX Jacquie ATANNE Claude Anjou 22 2T 2K 3T 3T
BARBARA DA CUNA Patricia THIEBAULT Denise CHETBOUN Gilles CLOU Lucienne Ile de France 22 2K 2C 4C 4K

La première est simple mais ensuite....
Merci aux spécialistes des expressions régulières de me filer un petit coup de pouce... si c'est faisable :?:

Re: [..] Extraction Nom Prénom

Posté : lun. 18 juil. 2022 18:56
par mikell
Ce serait nettement plus facile si le texte pouvait être trié en amont, ex. sans les "Ile de France 22 2K 2C 4C 4K" etc
C'est faisable ?

Re: [..] Extraction Nom Prénom

Posté : lun. 18 juil. 2022 19:11
par Yle
OUi j'ai une table dans laquelle j'ai tous les noms des provinces.
On peut donc supprimer la fin de chaque ligne :

HANGARD Thérèse HANGARD Alain CHAPELLE Muriellle LEPRINCE André
HERBELIN Patrick BARRET Didier TILLETTE D'ACHEUX Jacquie ATANNE Claude
BARBARA DA CUNA Patricia THIEBAULT Denise CHETBOUN Gilles CLOU Lucienne

Une idée : Chaque nom est toujours en majuscules et les prénoms commencent par une majuscule sachant qu'un prénom composé est écrit avec un -
Jean-François par ex...

Re: [..] Extraction Nom Prénom

Posté : lun. 18 juil. 2022 19:30
par mikell
Je peux proposer ça... à légèrement adapter certainement, mais c'est l'idée Image

#Include <Array.au3>

$txt = "HANGARD Thérèse HANGARD Alain CHAPELLE Muriellle LEPRINCE André" & @crlf & _
   "HERBELIN Patrick BARRET Didier TILLETTE D'ACHEUX Jacquie ATANNE Claude" & @crlf & _
   "BARBARA DA CUNA Patricia THIEBAULT Jean-François CHETBOUN Gilles CLOU Lucienne"

$res = StringRegExp($txt, "((?:[A-Z']{2,}\h)+(?:[A-Z][a-zçéè]+-?)+)", 3)
_ArrayDisplay($res)
Mais si ça vient d'une table, tu devrais pouvoir mettre en forme à l'extraction en principe...
A demander à jchd :mrgreen:

Re: [..] Extraction Nom Prénom

Posté : lun. 18 juil. 2022 20:50
par Yle
Merci mais cela vient d'un fichier.
Je passe en résolu.

Re: [..] Extraction Nom Prénom

Posté : ven. 22 juil. 2022 00:39
par jguinch
Autre solution :
(*UCP)(\b[[:upper:]']+(?:[- ][[:upper:]']+)*\b [[:upper:]][[:lower:]]+(?:-[[:upper:]][[:lower:]]+)*)

Re: [..] Extraction Nom Prénom

Posté : sam. 23 juil. 2022 09:52
par mikell
Salut le revenant :mrgreen:
Mais je préfère encore ma solution (plus simple)
(*UCP)((?:[A-Z'-]+\h)+(?:[A-Z][[:lower:]-]+)+)

Re: [..] Extraction Nom Prénom

Posté : sam. 23 juil. 2022 22:23
par jguinch
mikell a écrit : sam. 23 juil. 2022 09:52 Salut le revenant :mrgreen:
Hé oui, je reviens de temps en temps :wink:

J'aimais pas trop le fait qu'on puisse tolérer un nom qui se termine par un tiret ou un nom prénom par une apostrophe :mrgreen:

Re: [..] Extraction Nom Prénom

Posté : lun. 01 août 2022 23:02
par Yle
Bonsoir

Je n'avais pas vu vos réponses mais si je mets ceci :
$res = StringRegExp($txt, " (*UCP)((?:[A-Z'-]+\h)+(?:[A-Z][[:lower:]-]+)+)", 3)

Pas de résultat ?

Re: [..] Extraction Nom Prénom

Posté : mar. 02 août 2022 09:36
par walkson
Bonjour

Code : Tout sélectionner

#Include <Array.au3>

$txt = "HANGARD Thérèse HANGARD Alain CHAPELLE Muriellle LEPRINCE André" & @crlf & _
   "HERBELIN Patrick BARRET Didier TILLETTE D'ACHEUX Jacquie ATANNE Claude" & @crlf & _
   "BARBARA DA CUNA Patricia THIEBAULT Jean-François CHETBOUN Gilles CLOU Lucienne"

$res = StringRegExp($txt, " (*UCP)((?:[A-Z'-]+\h)+(?:[A-Z][[:lower:]-]+)+)", 3);espace devant (*UCP) <====== !!!
$res = StringRegExp($txt, "(*UCP)((?:[A-Z'-]+\h)+(?:[A-Z][[:lower:]-]+)+)", 3)
_ArrayDisplay($res)
:mrgreen:

Re: [..] Extraction Nom Prénom

Posté : mer. 03 août 2022 17:42
par Yle
OK Merci
Avec ces 2 lignes, le fonctionnement est meilleur...

Re: [..] Extraction Nom Prénom

Posté : mer. 03 août 2022 23:44
par walkson
Bonjour,
Yle a écrit : mer. 03 août 2022 17:42 OK Merci
Avec ces 2 lignes, le fonctionnement est meilleur...
Je crois que je me suis mal fait comprendre ou que j'ai mal expliqué
Il y a erreur ci-dessous
$res = StringRegExp($txt, " (*UCP)((?:[A-Z'-]+\h)+(?:[A-Z][[:lower:]-]+)+)", 3);espace devant (*UCP) <====== !!!
et la bonne solution est
$res = StringRegExp($txt, "(*UCP)((?:[A-Z'-]+\h)+(?:[A-Z][[:lower:]-]+)+)", 3)
En regex l'espace a une signification et le code le prends en compte d'où l'erreur :mrgreen:

Re: [..] Extraction Nom Prénom

Posté : ven. 05 août 2022 21:25
par mikell
Surtout que ça fonctionne même avec le texte du 1er post :wink:

#Include <Array.au3>

$txt = "HANGARD Thérèse HANGARD Alain CHAPELLE Muriellle LEPRINCE André Normandie 17 2T 1T 4P 3T" & @crlf & _
   "HERBELIN Patrick BARRET Didier TILLETTE D'ACHEUX Jacquie ATANNE Claude Anjou 22 2T 2K 3T 3T" & @crlf & _
   "BARBARA DA-CUNA Patricia THIEBAULT Jean-François CHETBOUN Gilles CLOU Lucienne Ile de France 22 2K 2C 4C 4K"

$res = StringRegExp($txt, "(*UCP)((?:[A-Z'-]+\h)+(?:[A-Z][[:lower:]-]+)+)", 3)

_ArrayDisplay($res)

Re: [..] Extraction Nom Prénom

Posté : lun. 08 août 2022 17:38
par Yle
Bonjour

Effectivement, cela va m'éviter de faire l'opération d'enlever la fin de ligne.
Merci à vous 2. :D

Re: [..] Extraction Nom Prénom

Posté : lun. 08 août 2022 19:41
par Yle
Encore une question

Imaginons qu'un prénom soit défectueux sur la seconde ligne :

Code : Tout sélectionner

#Include <Array.au3>
Dim $txt[3] = ["HANGARD Thérèse HANGARD Alain CHAPELLE Muriellle LEPRINCE André Normandie 17 2T 1T 4P 3T",  _
"HERBELIN patrick BARRET Didier TILLETTE D'ACHEUX Jacquie ATANNE Claude Anjou 22 2T 2K 3T 3T",  _
"BARBARA DA-CUNA Patricia THIEBAULT Jean-François CHETBOUN Gilles CLOU Lucienne Ile de France 22 2K 2C 4C 4K"]

For $i = 0 to 2
	$res = StringRegExp($txt[$i], "(*UCP)((?:[A-Z'-]+\h)+(?:[A-Z][[:lower:]-]+)+)", 3)
	If @error > 0 then MsgBox(0,"",$i)
	if ubound($res) <> 4 then _arrayDisplay($res,$i)

Next
Pourquoi le test si @error ne me renvoie rien ?

Re: [..] Extraction Nom Prénom

Posté : lun. 08 août 2022 21:33
par walkson
Bonjour,
Pourquoi le test si @error ne me renvoie rien ?
Parce que il n'y a pas d'erreurs :lol:
Pour avoir une erreur il faut que tous les prénoms de la seconde ligne ne possèdent pas de majuscules et donc pas de résultat

Re: [..] Extraction Nom Prénom

Posté : mar. 09 août 2022 07:35
par mikell
En effet... pour retourner une erreur, il faut qu'aucun prénom de la chaîne entrée n'ait de majuscule. Dans ce cas et seulement dans ce cas, @error = 1 (aucune correspondance trouvée, 0 résultat, donc pas de tableau retourné) car on a demandé le mode 3 ($STR_REGEXPARRAYGLOBALMATCH)
C'est pourquoi (comme d'habitude avec les regex) il faut absolument anticiper ce genre de possibilité et construire le pattern en conséquence, car le risque est justement que le regex fonctionne bien mais retourne un tableau incomplet en omettant ce qui ne correspond pas strictement à la définition des données à extraire (le pattern)
Dans le cas présent :

#Include <Array.au3>

$txt = "HANGARD Thérèse HANGARD Alain CHAPELLE Muriellle LEPRINCE André Normandie 17 2T 1T 4P 3T" & @crlf & _
   "HERBELIN patrick BARRET Didier TILLETTE D'ACHEUX Jacquie ATANNE Claude Anjou 22 2T 2K 3T 3T" & @crlf & _
   "BARBARA DA-CUNA Patricia THIEBAULT Jean-François CHETBOUN Gilles CLOU Lucienne Ile de France 22 2K 2C 4C 4K"

$res = StringRegExp($txt, "(*UCP)((?:[A-Z'-]+\h)+(?:[[:alpha:]-]+)+)", 3)

_ArrayDisplay($res)

Sinon, le seul moyen de détecter cette "erreur" est de connaître le nombre de couples nom-prénom de la liste et de le comparer avec le nombre de lignes du tableau final - pas folichon :?

Re: [..] Extraction Nom Prénom

Posté : mar. 09 août 2022 14:09
par Yle
Merci pour toutes ces explications.