Question Formater une liste en tableau

Plus d'informations
il y a 12 ans 10 mois #9715 par Frigoult
Bonsoir,
J’ai un serveur de licence qui me renvoi une information sous cette forme.
[code:1]
======================================
Product Status Report
======================================
Vendor Name: CATIADBS
Product Name:HD2
Product Version: DY03USS
License Type: Concurrent Access License(s)
Usage Information
Licenses In-Use
1 1.00
User Information
User: micsyl 1.00 License(s)
Group: Utilisateurs In-Use: mai 23 2011 14:27:14
Node: Puls479.serta.fr
Acid: c009f13e.1 Capacity Type: None
=======================
[/code:1]Je souhaite extraire certaines données. (HD2,DY03USS, micsyl, puls479.serta.fr)
Pour l'instant je sais extraire les lignes contenant ces données.
[code:1]switch -regex -file $FileLogLUM
{
\"Product Name:\" { $_ }
\"Product Version:\" { $_ }
\"User:\" { $_ }
\"Node:\" {$_}
}[/code:1]
ce qui me donne ceci
[code:1]Product Name: HD2
Product Version: DY03USS
User: micsyl License(s)
Node: Puls479.serta.fr
[/code:1]Je souhaiterais maintenant mettre ces données sous la forme suivante :
[code:1]Product Name: Product Version: User: Node:
HD2 DY03USS micsyl Puls479.serta.fr [/code:1]
et la je sèche.:unsure:
Merci de votre aide

Message édité par: Docserta, à: 27/05/11 22:11

Message édité par: Docserta, à: 27/05/11 22:12<br><br>Message édité par: Docserta, à: 27/05/11 22:12

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

Plus d'informations
il y a 12 ans 10 mois #9717 par Laurent Dardenne
Salut,
tu peux construire un objet lors du parsing, ensuite tu pourras formater tes données selon les besoins.
Une solution :
[code:1]
$FileLogLUM=\&quot;c:\temp\data.ps1\&quot;
$Liste=gc $FileLogLUM|
Foreach {
Write-Debug \&quot;Ligne courante : $_\&quot;
switch -regex ($_)
{
#capture nommée
'Product Name:«»(?&lt;Name&gt;.*)' { $Product= New-Object psobject -property @{
\&quot;Name\&quot;=$null;
\&quot;Version\&quot;=$null;
\&quot;User\&quot;=$null;
\&quot;Node\&quot;=$null
}
#On utilise le résultat d'exécution de la regex
$Product.Name=$matches.Name.Trim()
}
'Product Version:«»(?&lt;Version&gt;.*)' {$Product.Version=$matches.Version.Trim()}
'User:«»(?&lt;User&gt;.*)' {$Product.User=$matches.User.Trim()}
#DEPEND de la structure initiale
#Node est la dernière information avant l'itération suivante
'Node:«»(?&lt;Node&gt;.*)' {$Product.Node=$matches.Node.Trim();$Product}
}
}
$Liste
[/code:1]
Il est possible de coder une regex multiligne, mais cette construction, bien que redondante, me semble plus souple.

Tutoriels PowerShell

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

Plus d'informations
il y a 12 ans 10 mois #9718 par Frigoult
Réponse de Frigoult sur le sujet Re:Formater une liste en tableau
C'est exactement ce dont j'avais besoin.
Merci beaucoup.

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

Plus d'informations
il y a 12 ans 10 mois #9737 par Frigoult
Réponse de Frigoult sur le sujet Re:Formater une liste en tableau
Bonjour,

Dans la solution que me donne Laurent je ne comprend pas cette partie de l'expression régulière.
[code:1](?&lt;Name&gt;.*)[/code:1]
Quelqu'un peux m'expliquer?

Pour info mon serveur de licence me renvois une info qui a cette forme.
[code:1] Concurrent Offline Soft-Stop Queued
Licenses In-Use In-Use In-Use Not In-Use Requests





1 1.00 0.00 0.00 0.00 0 [/code:1]

je souhaite extraire le nombre de licences disponibles (première colonne) et le nombre de licence utilisées (seconde colonne).
J'ai ajouté cette ligne dans l'expression régulière.
[code:1]'\d{1,5}\s{5,9}\d{1,5}(xxxxxxxxxxxx)' {$product.NbLicModTot=$matches.NbLicModTot.substring(1,1);[/code:1]
Et je ne sais pas ce que je doit mettre dans la zone entre parenthèse.

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

Plus d'informations
il y a 12 ans 10 mois #9738 par Laurent Dardenne
Docserta écrit:

je ne comprend pas cette partie de l'expression régulière.
[code:1](?&lt;Name&gt;.*)[/code:1]
Quelqu'un peux m'expliquer?

() : défini un groupe
. : On recherche n'importe quel caractère
* : On précise 0 ou plusieurs caractères qui se suivent
?&lt;Name&gt;: on nomme la capture définie par le groupe.
Docserta écrit:

Et je ne sais pas ce que je doit mettre dans la zone entre parenthèse.

A priori rien puisque ton expression porte sur une portion de la chaîne située à son début et uniquement celle-ci.
[code:1]
$s=\&quot; 4 1.00 0.00 0.00 0.00 0 \&quot;
$s -match '^\s*(?&lt;LicencesTotal&gt;\d+)\s+(?&lt;LicencesInUse&gt;\d+)'
$matches
$matches.LicencesTotal
$matches.LicencesInUse
[/code:1]
On suppose que Licence est un entier.<br><br>Message édité par: Laurent Dardenne, à: 7/06/11 19:18

Tutoriels PowerShell

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

Plus d'informations
il y a 12 ans 10 mois #9739 par Frigoult
Réponse de Frigoult sur le sujet Re:Formater une liste en tableau
J'avais trouvé cette \&quot;solution\&quot;
[code:1]'\s{2}\d{1,5}\s{5,9}\d{1,5}' {$product.NbLicModTot=[int]$_.substring(2,5);[/code:1]

Mais ta proposition est bien plus esthétique.;)

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

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