Question
[Résolu]convertir des données venant de ntpstats
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Ce serait trop facile !y a t il un get-date qui convertisse le 55038 et 9104 directement ou je dois me faire une fonction...
tonic8 écrit:
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 .
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.\"
Et oui PowerShell peut nous amener dans d'autres domaines...
tonic8 écrit:
Comme quoi le travail et l'étude comble l'impatiencebon a priori j'ai trouvé mais je bloque ailleurs
tonic8 écrit:
Bah déjà de nous donner le minimum à installer pour exécuter ton script serait un bon début.une idee?
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.
- Gabriel
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
- Messages : 248
- Remerciements reçus 1
Laurent Dardenne écrit:
MerciBien que jusqu'ici, sur ce sujet, tes précédents postes soient trés pertinents et propices à références.
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
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Au temps pour moi.En fait j'ai commencer le poste en indiquant
tonic8 écrit:
Dans l'exemple du blog cité tu peux déjà y ajouter cecije veux simplement faire un graphique \"Ligne\" avec les données de la 2eme et 3eme colonnes.
[code:1]$Chart.Series[\"Data\"].Points.DataBindXY($Cities.Keys, $Cities.Values)
#Modifie le type du graphisme
$Chart.Series[\"Data\"].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=\"G:\PS\MSChart\loopstats.txt\"
$result=\"G:\PS\MSChart\loopstats.csv\"
gc $file|
Foreach {
$k = $_.split(' ')
\"{0};{1}\" -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(\"Data\"«»)
Function BindData([string]$file)
{ #lie les données au chart courant
if (Test-Path $file)
{
#Create a select statement and a connection string.
$mySelectQuery = \"Select * from $file\"
$ConStr = \"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=$(Split-Path $F)\;Extended Properties=`\"Text;HDR=No;FMT=Delimited`\"\"
$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[\"Data\"].Points.DataBindXY($myReader, \"1\", $myReader, \"2\"«»);
# Close connection and data reader
$myReader.Close();
$myConnection.Close();
#Todo bloc exception
}
#TODO else exception ...
} #BindData
#Modifie le type du graphisme
$Chart.Series[\"Data\"].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
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
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=\"G:\PS\MSChart\loopstats.txt\"
$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(\"System.Windows.Forms\"«»)
[void][Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms.DataVisualization\"«»)
# 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(\"Data\"«»)
#Modifie le type du graphisme
$Chart.Series[\"Data\"].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[\"Data\"].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 = \"PowerShell Chart\"
$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 \"mode Spline\", mais tu es le seul à déterminer s'il signifie qq chose
Ensuite je te laisse creuser \"le reste\" 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.
- Gabriel
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
- Messages : 248
- Remerciements reçus 1
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 \"mode Spline\", 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.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
De rien.Merci de ton aide.
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
Ensuite le nom des colonnes se nomment \"F1\",\"F2\", etc et non pas \"1\",\"2\",etc.
On peut s'en affranchir avec ceci :
[code:1] $Chart.Series[\"Data\"].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 = \"Select * from $(Split-Path $File -leaf)\"
$ConStr = \"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=$(Split-Path $File);Extended Properties=`\"Text;HDR=no;FMT=Delimited`\"\"
$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[\"Data\"].Points.DataBindXY($myReader, $myReader.Getname(0), $myReader, $myReader.Getname(1))
#$Chart.Series[\"Data\"].Points.DataBindXY($myReader, \"F1\", $myReader, \"F2\"«»)
# Close connection and data reader
$myReader.Close();
$myConnection.Close();
#Todo bloc exception
}
#TODO else exception ...
} #BindData
#Modifie le type du graphisme
$Chart.Series[\"Data\"].ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::«»Spline
BindData $result
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu]convertir des données venant de ntpstats