Salut tout le monde.
J'ai pris le temps de faire différents tests avec plusieurs logiciels sensés envoyer les informations au logiciel PROG.EXE (de l'éditeur X).
Tout d'abord @JCHD :
Le caractère pour le type de paramètre ne peux pas être changé.
Ensuite, j'ai essayé différents logiciels qui envoient les paramètres à PROG.EXE et j'ai intercepté la ligne de commande pour voir comment chacun faisait.
Le premier est le logiciel métier de l'éditeur X (celui qui à créé PROG.EXE). Il envoie la ligne :
PROG.EXE –P<Chemin> -N<NOM> <Prénom>
Le second est une sorte de passerelle qui capture les champs d'un logiciel métier d'une autre marque et envoie les infos à PROG.EXE. Malgré le fait de cibler Nom, Prénom, date de naissance et ID, il renvoie la ligne
PROG.EXE –P<Chemin> -N<NOM> <Prénom>
Le troisième est un logiciel métier qui intègre le lien vers PROG.EXE. Il renvoie le ligne :
PROG.EXE –P<Chemin> -N<NOM> <Prénom> <ID>
Le quatrième est un autre logiciel métier qui intègre le lien vers PROG.EXE.Il renvoie la ligne :
PROG.EXE –P<Chemin> -N<Nom> <Prénom> N°Dossier XXXX:<ID> (XXXX = Nom du mode de fonctionnement)
Visiblement le mode commun
PROG.EXE –P<Chemin> -N<NOM> <Prénom> <ID> semble être un ancien mode de transfert des données.
J'ai essayé de perturber PROG.EXE en créant des fiches avec des noms du genre "NOM -NPIEGE Prénom" ou "NOM -FPIEGE Prénom" mis cela ne le perturbe pas plus que ça.
J'ai réussit à le faire boguer avec "NOM -GM_PIEGE Prénom" dans lequel il s'arrète à " -GM" mais franchement, pour faire un nom avec -GM ou -GB il faut vraiment pas avoir de bol. ^^
D'après mes tests, on ne peux pas mettre de chiffres dans les zones NOM et Prénom, donc s'il y à -Bjj.mm.aaaa ou -Dxxx cela ne peux être que des paramètres.
Du coup :
- Il y a toujours -P et -N.
- Entre -P et -N, il y a toujours un chemin (sans espace entre -P et le début du chemin)
- A première vue, s'il y a un prénom mais qu'il n'est pas envoyé sous la forme -F<Prenom> alors le prénom est mis à la suite du nom dans le paramètre -N
- Le nom est toujours en majuscule.
- Le prénom est toujours composé de la première lettre en majuscule et le reste en minuscule
- Le numéro ID peut être derrière le nom + prénom ou derrière la balise -D et sera un nombre à 7 chiffres maxi.
- La date de naissance ne pose pas de problème spécifique puisque le format est jjmmaaaa (nombre à 8 chiffres).
- Le genre ne semble jamais utilisé dans l'ancien format et dans le nouveau ce sera -GM ou -GB ou -GO (Mâle, Femelle, Inconnu).
Il me faut donc récupérer le chemin qui ce trouve entre -P et -N (facile)
il me faut récupérer le nom qui est obligatoirement après -N. Obligatoirement en majuscule et qui s’arrête à l'espace qui précède une majuscule suivi d'une ou plusieurs minuscules, ou d'une majuscule suivit d'un caractère spécial, lui même suivit d'une ou plusieurs minuscules.
Ex :
NOM-COMPOSE L'e Prénom
NOM COMPOSE L-prénom
Enfin, il me faudra récupérer le N°ID qui sera un nombre après le paramètre -D ou le signe ":" ou un nombre en fin de chaine et précédé d'un espace.
Avec une telle complexité de récupération des informations, je ne vois qu'un ou plusieurs traitements spécifiques pour chacun des éléments à récupérer.
Voici déjà ce que je compte utiliser :
Code : Tout sélectionner
; Pour le chemin :
$aDatas = StringRegExp($sParams, "(*UCP)-P(.*?)\h+-N", 1)
; Date de naissance
$aDatas = StringRegExp($sParams, "\h+-?B?(\d{8})", 1)
; ID
$aDatas = StringRegExp($sParams, "\h+-?D?(\d{7})(?=\h+|$)", 1)
; Genre
$aDatas = StringRegExp($sParams, "\h-G([MBO])", 1)
Reste à traiter le NOM Prénom avec les contraintes déjà évoquées et éventuellement à améliorer les traitements ci-dessus.

Je pense récupérer tout ce qu'il y à entre -N et -B ou -D ou -G ou un nombre ou une fin de chaine. Une fois le nom/prénom récupéré, on sépare les deux.
Ou alors, pour le nom, récupérer tout ce qui est en majuscule jusque la première minuscule puis supprimer tout ce qui est à droite jusqu'au premier espace trouvé et pour le prénom tout ce qu'il y a entre une majuscule suivie d'un apostrophe ou d'une minuscule, jusqu’au premier groupe " -" ou chiffre ou fin de ligne.
Merci d'avance pour l'aide apportée.