Question
Formater une liste en tableau
- Frigoult
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 8
- Remerciements reçus 0
il y a 12 ans 10 mois #9715
par Frigoult
Formater une liste en tableau a été créé 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.
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
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.
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 12 ans 10 mois #9717
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Formater une liste en tableau
Salut,
tu peux construire un objet lors du parsing, ensuite tu pourras formater tes données selon les besoins.
Une solution :
[code:1]
$FileLogLUM=\"c:\temp\data.ps1\"
$Liste=gc $FileLogLUM|
Foreach {
Write-Debug \"Ligne courante : $_\"
switch -regex ($_)
{
#capture nommée
'Product Name:«»(?<Name>.*)' { $Product= New-Object psobject -property @{
\"Name\"=$null;
\"Version\"=$null;
\"User\"=$null;
\"Node\"=$null
}
#On utilise le résultat d'exécution de la regex
$Product.Name=$matches.Name.Trim()
}
'Product Version:«»(?<Version>.*)' {$Product.Version=$matches.Version.Trim()}
'User:«»(?<User>.*)' {$Product.User=$matches.User.Trim()}
#DEPEND de la structure initiale
#Node est la dernière information avant l'itération suivante
'Node:«»(?<Node>.*)' {$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.
tu peux construire un objet lors du parsing, ensuite tu pourras formater tes données selon les besoins.
Une solution :
[code:1]
$FileLogLUM=\"c:\temp\data.ps1\"
$Liste=gc $FileLogLUM|
Foreach {
Write-Debug \"Ligne courante : $_\"
switch -regex ($_)
{
#capture nommée
'Product Name:«»(?<Name>.*)' { $Product= New-Object psobject -property @{
\"Name\"=$null;
\"Version\"=$null;
\"User\"=$null;
\"Node\"=$null
}
#On utilise le résultat d'exécution de la regex
$Product.Name=$matches.Name.Trim()
}
'Product Version:«»(?<Version>.*)' {$Product.Version=$matches.Version.Trim()}
'User:«»(?<User>.*)' {$Product.User=$matches.User.Trim()}
#DEPEND de la structure initiale
#Node est la dernière information avant l'itération suivante
'Node:«»(?<Node>.*)' {$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.
- Frigoult
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 8
- Remerciements reçus 0
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.
Merci beaucoup.
Connexion ou Créer un compte pour participer à la conversation.
- Frigoult
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 8
- Remerciements reçus 0
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](?<Name>.*)[/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.
Dans la solution que me donne Laurent je ne comprend pas cette partie de l'expression régulière.
[code:1](?<Name>.*)[/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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 12 ans 10 mois #9738
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Formater une liste en tableau
Docserta écrit:
. : On recherche n'importe quel caractère
* : On précise 0 ou plusieurs caractères qui se suivent
?<Name>: on nomme la capture définie par le groupe.
Docserta écrit:
[code:1]
$s=\" 4 1.00 0.00 0.00 0.00 0 \"
$s -match '^\s*(?<LicencesTotal>\d+)\s+(?<LicencesInUse>\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
() : défini un groupeje ne comprend pas cette partie de l'expression régulière.
[code:1](?<Name>.*)[/code:1]
Quelqu'un peux m'expliquer?
. : On recherche n'importe quel caractère
* : On précise 0 ou plusieurs caractères qui se suivent
?<Name>: on nomme la capture définie par le groupe.
Docserta écrit:
A priori rien puisque ton expression porte sur une portion de la chaîne située à son début et uniquement celle-ci.Et je ne sais pas ce que je doit mettre dans la zone entre parenthèse.
[code:1]
$s=\" 4 1.00 0.00 0.00 0.00 0 \"
$s -match '^\s*(?<LicencesTotal>\d+)\s+(?<LicencesInUse>\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.
- Frigoult
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 8
- Remerciements reçus 0
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 \"solution\"
[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.
[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
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Formater une liste en tableau