Question Problème méthode split avec chaîne de caractères

Plus d'informations
il y a 14 ans 4 mois #10576 par Vincent V.

Bonjour à tous,
je suis débutant en powershell et j'ai pour objetctif de faire un script permettant de rendre importable dans un AD LDS un export venant de OpenLdap.

Dans cette optique j'avais l'intention d'utiliser la méthode split pour découper une chaîne de caractères suivant un mot par exemple:
\"totomoititi\".split(\"moi\") me renvoi un tableau avec toto et titi.

Or j'ai lu sur un autre topic de ce site qu'il n'était pas possible d'utiliser le split avec un mot comme paramètre dans la version de 1 de PS.
Je me suis donc empressé d'aller voir ma version de PS et c'est bien la V 2 (je suis sous Windows7 je pense qu'il est natif).

Concrètement voici mon problème :
[code:1]
olcObjectClasses: {6}( totoObjectClass:7 NAME 'Vincent' DESC 'Mon prenom' STRUCTURAL MUST ( cn $ PersonMember $
DNposte ) MAY ( DNservice $ employeeNumber $ departmentCode $ TelephoneMembe
r $ VDLFonctionRH ) )
[/code:1]

Mon objectif et de récupérer les attributs qui sont entre \"MUST\" et \"MAY\" et de \"MAY\" à la fin en pouvant différencier les 2 cas sachant que je suis déjà arriver à mettre tout sur une ligne (ce que je pense peu aider).

Si vous de comprenez pas ce que je veux faire je voudrais juste savoir comment utiliser le split avec un mot comme paramètre.

Si vous avez d'autres solutions dans la méthode split je suis preneur ;)

Bon code et Bonne journée

Vincent

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 14 ans 4 mois #10577 par Richard Lazaro
Bonjour,

J'ai pas vraiment trouvé comment faire ça, car c'était un code Quick&Dirty.

Mais avant le faire le split, tu peux faire un Replace !

[code:1]
('totomoititi').Replace('moi','#').Split('#')
[/code:1]

Testé et approuvé, mais pas trés propre ^^

Bien Cordialement,
Richard Lazaro.

Think-MS : (Get-Life).Days | %{ Learn-More }

\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 14 ans 4 mois #10578 par Vincent V.
Mais c'est une super bonne idée ça :woohoo: tout con en plus merci bien. reste a supposer qu'il n'y en ait pas d'autres.

J’espère tout de même qu'un jour le split pourra se dans mon cas.

Merci

Bonne journée

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 14 ans 4 mois #10579 par Laurent Dardenne
Salut,
Richard Lazaro écrit:

un code Quick&Dirty.

C'est plutot \"Quick implies dirty\"
Richard Lazaro écrit:

mais pas trés propre ^^

C'est la vitesse qui n'est propre à la réflexion.
Ceci dit avec ton approche, je ne vois pas comment tu géres plusieurs ancres.

Une solution, basée sur un template de regex que l'on reconduit de tronçon en tronçon :
[code:1]
#olcObjectClasses: {6}( totoObjectClass:7 NAME 'Vincent'
$R1=\"^(?<Header>.*?) NAME '(?<Nom>.*?)'\"
#avec
# ?<Header> = capture nommée
# .*? où ? est un quantificateur gourmand/avide (dit greedy quantifier)

#DESC 'Mon prenom'
$r2=\"DESC '(?<Prenom>.*?)'\"

#STRUCTURAL MUST ( cn $ PersonMember $ DNposte )
$r3=\"STRUCTURAL MUST \((?<Structure>.*?)\)\"

#MAY ( DNservice $ employeeNumber $ departmentCode $ TelephoneMember $ VDLFonctionRH ) )
$r4=\"MAY \((?<May>.*?)\) \)\"

$s=\"olcObjectClasses: {6}( totoObjectClass:7 NAME 'Vincent' DESC 'Mon prenom' STRUCTURAL MUST ( cn $ PersonMember $ DNposte ) MAY ( DNservice $ employeeNumber $ departmentCode $ TelephoneMember $ VDLFonctionRH ) )\"

$s1=$s.replace('$','\$')
rv matches -ea SilentlyContinue ;$RegEx=\"$r1 $r2 $r3 $r4\";$s1 -match $regex;$matches
# True
#
# Name Value
# ----
# May DNservice \$ employeeNumber \$ departmentCode \$ TelephoneMember \$ VDLFonctionRH
# Prenom Mon prenom
# Header olcObjectClasses: {6}( totoObjectClass:7
# Nom Vincent
# Structure cn \$ PersonMember \$ DNposte
# 0 olcObjectClasses: {6}( totoObjectClass:7 NAME 'Vincent' DESC 'Mon prenom' STRUCTURAL ...
[/code:1]
Ensuite si on le souhaite, on peut itérer une analyse sur chaque capture :
[code:1]
$Matches.May.Split('\$',[System.StringSplitOptions]::RemoveEmptyEntries)|
Foreach {$_.Trim()}
# DNservice
# employeeNumber
# departmentCode
# TelephoneMember
# VDLFonctionRH
[/code:1]
Il y a une limite sur l'échappement de caractères, cf. [code:1]replace('$','\$')[/code:1] , il existe une solution mais pour le moment je n'arrive pas à la mettre en oeuvre.
Enfin cette solution est lié à la construction de l'exemple cité, toutes les chaines soumisent à la regex doivent suivre la même construction.

Vincent, peux-tu éviter d'écrire en rouge dans tes textes ? Merci.<br><br>Message édité par: Laurent Dardenne, à: 10/11/11 23:35

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 14 ans 4 mois #10581 par Richard Lazaro
Oula, je devais être fatigué quand j'ai répondu à ce post. Car oui, la solution des regex est la plus adaptée Oo

Think-MS : (Get-Life).Days | %{ Learn-More }

\\&quot;Problems cannot be solved by the same level of thinking that created them.\\&quot; - Albert Einstein

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.043 secondes
Propulsé par Kunena