Question [Résolu]convertir des données venant de ntpstats

Plus d'informations
il y a 16 ans 7 mois #5059 par Laurent Dardenne
tonic8 écrit:

y a t il un get-date qui convertisse le 55038 et 9104 directement ou je dois me faire une fonction...

Ce serait trop facile !
tonic8 écrit:

:whistle: voila un peu de culture que je viens d'étaler.
comme disais Pierre Desproges

\"La culture c'est comme la confiture, moins on en a plus on l'étale.\"

Sauf que dans ton cas il s'agit de technicité et pas de culture, reste à déterminer si la technique fait partie de la culture .
Et oui PowerShell peut nous amener dans d'autres domaines...
tonic8 écrit:

bon a priori j'ai trouvé mais je bloque ailleurs

Comme quoi le travail et l'étude comble l'impatience ;-)
tonic8 écrit:

une idee?

Bah déjà de nous donner le minimum à installer pour exécuter ton script serait un bon début.
Dans un forum d'entraide il faut aussi faire en sorte qu'on puisse aider facilement, il est donc du ressort du posteur de nous aider à l'aider.
Bien que jusqu'ici, sur ce sujet, tes précédents postes soient trés pertinents et propices à références.

Tutoriels PowerShell

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

Plus d'informations
il y a 16 ans 7 mois #5070 par Gabriel
D'abord les compliments
Laurent Dardenne écrit:

Bien que jusqu'ici, sur ce sujet, tes précédents postes soient trés pertinents et propices à références.

Merci :P

Ensuite
Laurent Dardenne écrit:

Bah déjà de nous donner le minimum à installer pour exécuter ton script serait un bon début.


En fait j'ai commencer le poste en indiquant

je viens de lire \"Créer de beaux graphiques avec les MS Chart Controls\" powershell-scripting.com/index.php?optio...id=297&Itemid=80 et je veux jouer avec.

comme challenge que je me suis mis c'est d'interpreter un fichier de stat ntp.


j'ai donc installé \"Microsoft Chart Controls for Microsoft .NET Framework 3.5\", et j'essaie de creer un chart avec les donnéees issue du fichier ntpstat (en piece jointe).
je veux simplement faire un graphique \"Ligne\" avec les données de la 2eme et 3eme colonnes.

Merci:)

La pièce jointe loopstats.txt est absente ou indisponible

<br><br>Message édité par: tonic8, à: 12/08/09 18:49
Pièces jointes :

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

Plus d'informations
il y a 16 ans 7 mois #5075 par Laurent Dardenne
tonic8 écrit:

En fait j'ai commencer le poste en indiquant

Au temps pour moi.
tonic8 écrit:

je veux simplement faire un graphique \&quot;Ligne\&quot; avec les données de la 2eme et 3eme colonnes.

Dans l'exemple du blog cité tu peux déjà y ajouter ceci
[code:1]$Chart.Series[\&quot;Data\&quot;].Points.DataBindXY($Cities.Keys, $Cities.Values)
#Modifie le type du graphisme
$Chart.Series[\&quot;Data\&quot;].ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::«»Point[/code:1]
Il existe des codes d'exemple, VS 2008, ici .
Voir aussi cette doc d'introduction sur le sujet.

Ensuite reste le binding des données:
[code:1]
#Prépare le fichier de données au format csv
$file=\&quot;G:\PS\MSChart\loopstats.txt\&quot;
$result=\&quot;G:\PS\MSChart\loopstats.csv\&quot;
gc $file|
Foreach {
$k = $_.split(' ')
\&quot;{0};{1}\&quot; -F $k[1],$k[2]}|
out-file -append $Result
[/code:1]
puis l'appel approprié :
[code:1]
#Now for some data to display:
# add data to chart
[void]$Chart.Series.Add(\&quot;Data\&quot;«»)

Function BindData([string]$file)
{ #lie les données au chart courant

if (Test-Path $file)
{
#Create a select statement and a connection string.
$mySelectQuery = \&quot;Select * from $file\&quot;
$ConStr = \&quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=$(Split-Path $F)\;Extended Properties=`\&quot;Text;HDR=No;FMT=Delimited`\&quot;\&quot;
$myConnection = new-object System.Data.OleDb.OleDbConnection $ConStr

#create a database command on the connection using query
$myCommand = new-object System.Data.OleDb.OleDbCommand $mySelectQuery $myConnection

#open the connection
$myCommand.Connection.Open()

#create a database reader
$myReader = $myCommand.ExecuteReader([System.Data.CommandBehavior]::CloseConnection)

# column 1 is ? , column 2 is ? (peuvent être de type différent)
# databind the reader to the chart using the DataBindXY method
$Chart.Series[\&quot;Data\&quot;].Points.DataBindXY($myReader, \&quot;1\&quot;, $myReader, \&quot;2\&quot;«»);

# Close connection and data reader
$myReader.Close();
$myConnection.Close();
#Todo bloc exception
}
#TODO else exception ...
} #BindData

#Modifie le type du graphisme
$Chart.Series[\&quot;Data\&quot;].ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::«»Point
BindData $file
[/code:1]
A tester, car pour le moment comme le moteur .NET ne fonctionne plus sur mon poste, ni VS ni PS ne fonctionne, je ne peux aller plus loin :(
Tel quel ce code ne fonctionne pas :S

Mais en étudiant les exemples tu devrais +- y arriver, par exemple en recherchant les occurences de System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point, et pour le binding consulte les exemples dispo dans le répertoire : [code:1]..\WinSamples\WorkingWithData[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 13/08/09 13:39

Tutoriels PowerShell

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

Plus d'informations
il y a 16 ans 7 mois #5078 par Laurent Dardenne
Un exemple qui semble fonctionner, le précedent, une fois corrigé pose qq pb, impossible d'afficher quoi que ce soit dans le chart :huh:
Le séparateur de champs doit être une virgule et les noms des champs sont peut être à préciser dans le fichier csv...

Une autre approche de binding à l'aide de tableau :
[code:1]
#Construit des tableaux à partir du fichier de données
$file=\&quot;G:\PS\MSChart\loopstats.txt\&quot;
$arrayX= new-object System.Collections.ArrayList
$arrayY= new-object System.Collections.ArrayList

gc $file|
Foreach {
$k = $_.split(' ')
[void]$arrayX.Add($k[1])
[void]$arrayY.Add($k[2])
}
# MSChart
[void][Reflection.Assembly]::LoadWithPartialName(\&quot;System.Windows.Forms\&quot;«»)
[void][Reflection.Assembly]::LoadWithPartialName(\&quot;System.Windows.Forms.DataVisualization\&quot;«»)

# create chart object
$Chart = New-object System.Windows.Forms.DataVisualization.Charting.Chart
$Chart.Width = 700
$Chart.Height = 600
$Chart.Left = 40
$Chart.Top = 30

#Next you must define a ChartArea to draw on and add this to the Chart:
# create a chartarea to draw on and add to chart
$ChartArea = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea
$Chart.ChartAreas.Add($ChartArea)

#Now for some data to display:
# add data to chart
[void]$Chart.Series.Add(\&quot;Data\&quot;«»)

#Modifie le type du graphisme
$Chart.Series[\&quot;Data\&quot;].ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::«»Spline

# bind the double array to the Y axis points of the Default data series
#Les Arraylists sont convertis automatiquement en Array par PS
$Chart.Series[\&quot;Data\&quot;].Points.DataBindXY($arrayX,$arrayY)

#For simplicity, I’ve hard-coded some data on European cities taken from WikiPedia.
#As you’ll see later, it is just as easy to use data gathered or generated by the script itself.
#The final step is to display the chart on a Windows Form:

# display the chart on a form
$Chart.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Right -bor
[System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
$Form = New-Object Windows.Forms.Form
$Form.Text = \&quot;PowerShell Chart\&quot;
$Form.Width = 800
$Form.Height = 800
$Form.controls.add($Chart)
$Form.Add_Shown({$Form.Activate()})
$Form.ShowDialog()

[/code:1]
Ici l'affichage se fait bien, en \&quot;mode Spline\&quot;, mais tu es le seul à déterminer s'il signifie qq chose :P.

Ensuite je te laisse creuser \&quot;le reste\&quot; des propriétés pour embellir tout ça.
En tout cas ce type de composant est rarement facile à maîtriser.

Tutoriels PowerShell

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

Plus d'informations
il y a 16 ans 7 mois #5079 par Gabriel
Ah oui ............ c'est bon :woohoo:

effectivement le composant n'est pas tres simple a apprehender. Mais merci a partir de la je vais m'amuser comme un fou.

Laurent Dardenne a dit

Ici l'affichage se fait bien, en \&quot;mode Spline\&quot;, mais tu es le seul à déterminer s'il signifie qq chose


en fait il s'agit de l'ecart de temps qui existe entre le client et le serveur horloge, plus la courbe est proche de Zero mieux c'est.
La valeur Y est en Seconde donc si ca tourne autour de 0.001s c'est plutot bon... car il n'y a que + ou - 1ms d'ecart entre le client et le serveur.
La valeur X est aussi en seconde mais c'est le nombre de seconde depuis 00h00.

Le besoin est de surveiller une chaine de traitement finanacier pour que chaque pc est + ou - 5ms d'ecart entre eux...

Merci de ton aide.:cheer:

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

Plus d'informations
il y a 16 ans 7 mois #5080 par Laurent Dardenne
tonic8 écrit:

Merci de ton aide.:cheer:

De rien.

Pour le binding à partir d'un csv on doit préciser l'encoding ASCII:
[code:1]
out-file -append $Result -encoding ascii
[/code:1]
Et là cela vas tout de suite mieux :blush:

Ensuite le nom des colonnes se nomment \&quot;F1\&quot;,\&quot;F2\&quot;, etc et non pas \&quot;1\&quot;,\&quot;2\&quot;,etc.

On peut s'en affranchir avec ceci :
[code:1] $Chart.Series[\&quot;Data\&quot;].Points.DataBindXY($myReader, $myReader.Getname(0), $myReader, $myReader.Getname(1))[/code:1]
Ou utiliser un fichier schema.ini , à placer dans le répertoire du fichier csv précisé :
[code:1]
[loopstats.csv]
ColNameHeader=false
Format=CSVDelimited
DateTimeFormat=dd-MMM-yyyy
DecimalSymbol=.
CharacterSet=ANSI
Col1=ColonneX Double
Col2=ColonneY Double
[/code:1]
Le code de la fonction
[code:1]
Function BindData([string]$file)
{ #lie les données au chart courant

if (Test-Path $file)
{
#Create a select statement and a connection string.
$mySelectQuery = \&quot;Select * from $(Split-Path $File -leaf)\&quot;
$ConStr = \&quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=$(Split-Path $File);Extended Properties=`\&quot;Text;HDR=no;FMT=Delimited`\&quot;\&quot;
$myConnection = new-object System.Data.OleDb.OleDbConnection $ConStr

#create a database command on the connection using query
$myCommand = new-object System.Data.OleDb.OleDbCommand $mySelectQuery,$myConnection

#open the connection
$myCommand.Connection.Open()

#create a database reader
$myReader = $myCommand.ExecuteReader([System.Data.CommandBehavior]::CloseConnection)

# column 1 is ? , column 2 is ? (peuvent être de type différent)
# databind the reader to the chart using the DataBindXY method
$Chart.Series[\&quot;Data\&quot;].Points.DataBindXY($myReader, $myReader.Getname(0), $myReader, $myReader.Getname(1))
#$Chart.Series[\&quot;Data\&quot;].Points.DataBindXY($myReader, \&quot;F1\&quot;, $myReader, \&quot;F2\&quot;«»)

# Close connection and data reader
$myReader.Close();
$myConnection.Close();
#Todo bloc exception
}
#TODO else exception ...
} #BindData

#Modifie le type du graphisme
$Chart.Series[\&quot;Data\&quot;].ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::«»Spline
BindData $result
[/code:1]

Tutoriels PowerShell

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

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