[..] Extraction Nom Prénom

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 164
Enregistré le : mar. 21 avr. 2009 17:22
Localisation : La NORMANDIE -76
Status : Hors ligne

[..] Extraction Nom Prénom  

#1

Message 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 :?:
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6193
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Extraction Nom Prénom

#2

Message 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 ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 164
Enregistré le : mar. 21 avr. 2009 17:22
Localisation : La NORMANDIE -76
Status : Hors ligne

Re: [..] Extraction Nom Prénom

#3

Message 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...
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6193
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Extraction Nom Prénom

#4

Message 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:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 164
Enregistré le : mar. 21 avr. 2009 17:22
Localisation : La NORMANDIE -76
Status : Hors ligne

Re: [..] Extraction Nom Prénom

#5

Message par Yle »

Merci mais cela vient d'un fichier.
Je passe en résolu.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2509
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Extraction Nom Prénom

#6

Message par jguinch »

Autre solution :
(*UCP)(\b[[:upper:]']+(?:[- ][[:upper:]']+)*\b [[:upper:]][[:lower:]]+(?:-[[:upper:]][[:lower:]]+)*)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6193
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Extraction Nom Prénom

#7

Message par mikell »

Salut le revenant :mrgreen:
Mais je préfère encore ma solution (plus simple)
(*UCP)((?:[A-Z'-]+\h)+(?:[A-Z][[:lower:]-]+)+)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2509
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Extraction Nom Prénom

#8

Message 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:
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 164
Enregistré le : mar. 21 avr. 2009 17:22
Localisation : La NORMANDIE -76
Status : Hors ligne

Re: [..] Extraction Nom Prénom

#9

Message 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 ?
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 974
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Extraction Nom Prénom

#10

Message 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:
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 164
Enregistré le : mar. 21 avr. 2009 17:22
Localisation : La NORMANDIE -76
Status : Hors ligne

Re: [..] Extraction Nom Prénom

#11

Message par Yle »

OK Merci
Avec ces 2 lignes, le fonctionnement est meilleur...
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 974
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Extraction Nom Prénom

#12

Message 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:
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6193
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Extraction Nom Prénom

#13

Message 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)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 164
Enregistré le : mar. 21 avr. 2009 17:22
Localisation : La NORMANDIE -76
Status : Hors ligne

Re: [..] Extraction Nom Prénom

#14

Message par Yle »

Bonjour

Effectivement, cela va m'éviter de faire l'opération d'enlever la fin de ligne.
Merci à vous 2. :D
Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 164
Enregistré le : mar. 21 avr. 2009 17:22
Localisation : La NORMANDIE -76
Status : Hors ligne

Re: [..] Extraction Nom Prénom

#15

Message 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 ?
Modifié en dernier par walkson le lun. 08 août 2022 21:51, modifié 1 fois.
Raison : balises
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 974
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Extraction Nom Prénom

#16

Message 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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6193
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Extraction Nom Prénom

#17

Message 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 :?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 164
Enregistré le : mar. 21 avr. 2009 17:22
Localisation : La NORMANDIE -76
Status : Hors ligne

Re: [..] Extraction Nom Prénom

#18

Message par Yle »

Merci pour toutes ces explications.
Répondre