Question
Problème méthode split avec chaîne de caractères
- Vincent V.
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 2
- Remerciements reçus 0
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
Problème méthode split avec chaîne de caractères a été créé 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.
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 530
- Remerciements reçus 0
il y a 14 ans 4 mois #10577
par Richard Lazaro
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Réponse de Richard Lazaro sur le sujet Re:Problème méthode split avec chaîne de caractères
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.
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.
- Vincent V.
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 2
- Remerciements reçus 0
il y a 14 ans 4 mois #10578
par Vincent V.
Réponse de Vincent V. sur le sujet Re:Problème méthode split avec chaîne de caractères
Mais c'est une super bonne idée ça
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
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 14 ans 4 mois #10579
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Problème méthode split avec chaîne de caractères
Salut,
Richard Lazaro écrit:
Richard Lazaro écrit:
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
Richard Lazaro écrit:
C'est plutot \"Quick implies dirty\"un code Quick&Dirty.
Richard Lazaro écrit:
C'est la vitesse qui n'est propre à la réflexion.mais pas trés propre ^^
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.
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 530
- Remerciements reçus 0
il y a 14 ans 4 mois #10581
par Richard Lazaro
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Réponse de Richard Lazaro sur le sujet Re:Problème méthode split avec chaîne de caractères
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 }
\\"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.
Temps de génération de la page : 0.043 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Problème méthode split avec chaîne de caractères