Page 1 sur 1

deplacer mot se trouvent anant la vigule a la fin de la phrase

Posté : jeu. 07 déc. 2023 23:57
par Gavriel
Bonjour
J'ai une phrase:
Le ballon de duck ,donald
Je voudrait la transformer en déplacent le nom de famille à la fin de la phrase Sachant qu'il se trouve en premier avant la virgule.
Le balon de ,donald duck
Je ñ' ai aucune idée par quoi commencer.
Merci de votre aide.

Re: deplacer mot se trouvent anant la vigule a la fin de la phrase

Posté : ven. 08 déc. 2023 03:34
par Nine
Recommence. Moins de fautes d'orthographes. Un effort pour écrire avec des lettres majuscules et des accents aux bons endroits.
Mais le plus important, un script de base pour nous permettre de corriger là où tu fais erreur.

Re: deplacer mot se trouvent anant la vigule a la fin de la phrase

Posté : sam. 09 déc. 2023 12:40
par jl56
Bonjour,

ci-dessous un exemple simple de traitement de chaine
#include <Array.au3>


$phrase = "Le ballon de duck ,donald "

$decoupe_phrase_avec_virgule = StringSplit($phrase, ",")
; ça creer un tableau avec chaque morceau , le nombre de morceau est inscrit sur la case 0
;~ Donc si l'on veux retrouver le nom à la fin dans cette exemple c'est le dernier donc ce qui se trouve à la case 0

;~ pour votre information commande pour afficher le tableau
If IsArray($decoupe_phrase_avec_virgule) Then
   _ArrayDisplay($decoupe_phrase_avec_virgule)
   ; on voie bien le nombre inscrit a la rangée 0 (Row 0)

$prenom = $decoupe_phrase_avec_virgule[$decoupe_phrase_avec_virgule[0]]
MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, 'Selection:' & @CRLF & '$prenom' & @CRLF & @CRLF & 'Return:' & @CRLF & $prenom) ;### Debug MSGBOX
;~ on decoupe la 1er partie de la phrase avec des espaces en supprimant au préalable les espaces a la fin
   $decoupe_debut_phrase_avec_espace = StringSplit(StringStripWS($decoupe_phrase_avec_virgule[1], 2), " ")

;~ la aussi ce que vous désirez est le dernier morceau
   $nom = $decoupe_debut_phrase_avec_espace[$decoupe_debut_phrase_avec_espace[0]]
   MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, 'Selection:' & @CRLF & '$nom' & @CRLF & @CRLF & 'Return:' & @CRLF & $nom) ;### Debug MSGBOX
EndIf

; on supprime le nom du début de phrase
$debut_phrase=StringReplace($decoupe_phrase_avec_virgule[1],$nom,"")
MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, 'Selection:' & @CRLF & '$debut_phrase' & @CRLF & @CRLF & 'Return:' & @CRLF & $debut_phrase) ;### Debug MSGBOX

; puis on reconstitue la phrase finale

$phrase_finale=$debut_phrase&$prenom&" ,"&$nom
MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, 'Selection:' & @CRLF & '$phrase_finale' & @CRLF & @CRLF & 'Return:' & @CRLF & $phrase_finale) ;### Debug MSGBOX
ça répond a votre exemple
j'ai laissé les MSGBOX de débug pour que vous voyez le résultat à chaque étape du script

Par contre je n'ai pas traité le cas ou il y a plusieurs virgule dans la phrase mais avec une boucle vous devriez vous en sortir
je n'ai pas traité non plus le cas de nom composé comme "Yann Le breton" ou "Antoine de La Boulaye"
la je ne voie comment faire simplement

Bon Script

Cordialement,

JL56

Re: deplacer mot se trouvent anant la vigule a la fin de la phrase

Posté : sam. 09 déc. 2023 18:10
par Gavriel
Merci, tu m'as beaucoup aidé maintenant, je vais essayer de réfléchir comment passer la virgule avant Donald Duck

Re: deplacer mot se trouvent anant la vigule a la fin de la phrase  

Posté : sam. 09 déc. 2023 18:28
par mikell
En principe ce genre de truc se fait aux expressions régulières
$s = "Le ballon de duck ,donald"

Msgbox(0,"", StringRegExpReplace($s, '(.+?)(\w+\h),(\w+)', "$1$3 $2") )
avec bien entendu toutes les restrictions éventuelles mentionnées dans le message précédent

Re: deplacer mot se trouvent anant la vigule a la fin de la phrase

Posté : sam. 09 déc. 2023 18:48
par Gavriel
$phrase_finale=$debut_phrase &" ," &$prenom &$nom
Merci infiniment

Re: deplacer mot se trouvent anant la vigule a la fin de la phrase

Posté : sam. 09 déc. 2023 18:53
par Gavriel
mikell a écrit : sam. 09 déc. 2023 18:28 En principe ce genre de truc se fait aux expressions régulières
$s = "Le ballon de duck ,donald"

Msgbox(0,"", StringRegExpReplace($s, '(.+?)(\w+\h),(\w+)', "$1$3 $2") )
avec bien entendu toutes les restrictions éventuelles mentionnées dans le message précédent
merci
pourait tu m'expliquer (.+?)(\w+\h),(\w+)', "$1$3 $2"

Re: deplacer mot se trouvent anant la vigule a la fin de la phrase

Posté : sam. 09 déc. 2023 22:16
par mikell
Je manque de temps pour ça
Les explications sont dans le fichier d'aide, ici et ici

Re: deplacer mot se trouvent anant la vigule a la fin de la phrase

Posté : sam. 09 déc. 2023 23:37
par Gavriel
merci beaucoup
Je pense avoir plus ou moins compris.

Re: deplacer mot se trouvent anant la vigule a la fin de la phrase

Posté : dim. 10 déc. 2023 10:04
par jl56
Bonjour à tous,

@mikell
Je suis toujours impressionné par la magie des expressions régulières que je ne maitrise pas malheureusement.
Merci pour ce nouvel exemple

Cordialement,

JL56

Re: deplacer mot se trouvent anant la vigule a la fin de la phrase

Posté : lun. 11 déc. 2023 10:02
par rgx
Bonjour jl56,
jl56 a écrit : dim. 10 déc. 2023 10:04 [...] des expressions régulières que je ne maitrise pas malheureusement.
Mais si, mais si :wink:
Quand tu tapes par exemple " dir *.* " dans une console; tu créé une expression régulière :!: (oui, *.* c'est un masque texte donc une expression régulière)
Différente de la forme la plus courante classique (PCRE), mais c'est une des formes d'expression régulière et ça existe depuis 40 ans.
Magie: on fait des regex comme M. Jourdain faisait de prose sans le savoir :o

L'expression est facile à comprendre

Code : Tout sélectionner

(	= Début capture dans $1
.+	= tous les caractères
?	= Jusqu'à ce que la suite corresponde
)	= fin de capture dans $1
(	= début capture dans $2
\w+	= des "mots" (lettres et quelques caractères ex: _)
\h	= un espace horizontal (espace ou tab)
)	= fin de capture dans $2
,	= une virgule
(	= début capture $3
\w+	= des mots
)	= fin de capture $3
"$1$3 $2"
Puis on assemble dans le nouvel ordre
Le premier, le troisième, un espace et le deuxième.

Joli ? :wink:

Re: deplacer mot se trouvent anant la vigule a la fin de la phrase

Posté : lun. 11 déc. 2023 21:06
par jl56
Bonjour,

Merci RGX pour ces explications
Effectivement le dir *.* je le pratique depuis presque 40 ans comme quoi

je tente d'intégrer ça à l'occase

Cordialement,

JL56