Question Extraire une chaine de caractere

Plus d'informations
il y a 12 ans 7 mois #15636 par SP
Bonjour,

Je cherche a extraire la chaine de caractere 13:07:31.333 UTC Aug 17 2013(D5B9F413.5572580C) d'une ligne ($_) qui se trouve dans un fichier ($cDevice.log). J'ai obtenu ce fichier a partir de la MIB de mon switch.
Mon script ne sera pas fait que pour récupérer une date mais n'importe quelle donnée après le deuxieme \":\".


Le contenu du fichier $cDevice.log
[code:1]a3Com.jv-mib.huawei.huaweiMgmt.huaweiDatacomm.hwNTP.hwNTPSystemMIB.hwNTPSystemMIBObjects.hwNTPSysState.0 : INTEGER: clockBySyns
a3Com.jv-mib.huawei.huaweiMgmt.huaweiDatacomm.hwNTP.hwNTPSystemMIB.hwNTPSystemMIBObjects.hwNTPSysClock.0 : OCTET STRING- (ascii): 13:07:31.333 UTC Aug 17 2013(D5B9F413.5572580C)
[/code:1]

Ci-joint le code que j'ai commencé a développer. Je suis en train de réfléchir a un moyen de lire chaque ligne caractere par caractere pour ne garder que la fin.
J'ai aussi regardé une maniere de connaitre la position du deuxieme \":\" pour supprimer ce qu'il y a avant.

[code:1]
function Concatenate ($cDevice) # $cDevice = The Device
{
Get-Content \"$Dir_RawSNMP\$cDevice.log\" | ForEach-Object -process {
$_
$cValue = \"$_\".Split(\":\"«»)[2]
Write-Output \"Control point Concatenate-FOR : $cDevice / $cValue\"
Write-Output \"$cDevice;$cValue\" >> $OutputFile
}
}
[/code:1]

$OutputFile est un fichier txt que j'ouvre comme un csv avec Excel

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

Plus d'informations
il y a 12 ans 7 mois #15637 par SP
Réponse de SP sur le sujet Re:Extraire une chaine de caractere
J'ai modifié le code pour supprimé le debut de la chaine en ajoutant $cSkipLine = (\"$_\".Split(\":\")[0]).Length + (\"$_\".Split(\":\")[1]).Length +3

Auriez-vous une solution plus propre de faire le travail ?
Ce code fonction avec le formatage que j'ai extrait mais je suis pas sur qu'il fonctionne a coup sur.
Je souhaiterai tester si le caractere au debut de la chaine restante est un espace, une tabulation ou directement l'info utile.

[code:1]
function Concatenate ($cDevice) # $cDevice = The Device
{
Get-Content \"$Dir_RawSNMP\$cDevice.log\" | ForEach-Object -process {
$_
$cSkipLine = (\"$_\".Split(\":\"«»)[0]).Length + (\"$_\".Split(\":\"«»)[1]).Length +3
$cValue = \"$_\".Substring($cSkipLine)
Write-Output \"Control point Concatenate-FOR : $cDevice / $cValue\"
Write-Output \"$cDevice;$cValue\" >> $OutputFile
}
}
[/code:1]

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

Plus d'informations
il y a 12 ans 6 mois #15818 par Philippe
salut sp973

Ce code fonction avec le formatage que j'ai extrait mais je suis pas sur qu'il fonctionne a coup sur.

tu a trois cas qui risque de te provoqué des erreurs (a géré en try/catsh ?) :
- les lignes vierge
- les lignes sans la partie valeur
- les lignes au format different (pas deux fois les deux points)

Je souhaiterai tester si le caractere au debut de la chaine restante est un espace, une tabulation ou directement l'info utile.


Va voir ici pour quelque idée : Aide Mémoire PowerShell

Auriez-vous une solution plus propre de faire le travail ?

J'aurrais pu faire ceci :
[code:1]$cValue = ($_.remove(0,$_.IndexOf(\":\"«»)+1)).remove(0,($_.remove(0,$_.IndexOf(\":\"«»)+1)).IndexOf(\":\"«»)+1).TrimStart()[/code:1]
mais ce n'est qu'un exemple a partir des fonctions string disponible, pas la solution (je fais souvent mes propres fonctions)

En programmation et donc avec PowerShell, il y a souvent plusieurs techniques disponibles pour effectuer une même action, c'est ce qui permet de s'adapter au mieux à chaque situation.

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

Plus d'informations
il y a 12 ans 6 mois #15844 par Laurent Dardenne
Une solution basée regex :
[code:1]
#Recherche au moins ': 13:07:31.333 UTC'+fin de chaîne
if ($s -match ':«»(?<UTC>\s*\d{2}:\d{2}:\d{2}\.\d{3} UTC.*)')
{$Matches.UTC.Trim()}
[/code:1]

Tutoriels PowerShell

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

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