2014-07-20 116 views
0

我有下面的代碼,這是爲了總計時間偏移隨着循環旋轉(我將然後需要除以10獲得平均值,但首先我需要得到這個位工作)。Powershell在循環中添加數字

我假設我需要將某些內容轉換爲[INT],但我嘗試了多個位置,但無濟於事。我只是以O而告終。

$winTimeStripchart = w32tm /stripchart /computer:0.pool.ntp.org /dataonly /samples:10 
$WinTimeOffset = $null 

For($i=3; $i -le 12; $i++){ 

    $Offset = $winTimeStripchart[$i].split("-") 
    $trimmedOffset = $Offset[1].trim("s") 
    $winTimeOffset = $winTimeOffset + $trimmedOffset 
} 

Write-Host "Total: $winTimeOffset" 
# Now need to divide by 10. 

樣本數據:

20:30:23, -00.0698082s 
20:30:25, -00.0704645s 
20:30:27, -00.0708694s 
20:30:29, -00.0728990s 
20:30:31, -00.0719226s 
20:30:33, -00.0749031s 
20:30:36, -00.0778656s 
20:30:38, -00.0782183s 
20:30:40, -00.0752974s 
20:30:42, -00.0760958s 
+0

如果您向我們展示了一些示例數據,我們可以幫助更輕鬆。 –

+0

當然,上面加了。 Thnaks – PnP

+1

好的,你想要的。如果有機會數字可能是積極的話,請將它分開。您不希望將整數轉換爲整數,因爲它將使所有示例值爲零,而小數可能是最好的類型:[PowerShell Data Types](http://ss64.com/ps/syntax- datatypes.html)。 –

回答

1

你可以試試這個行命令:

$a = w32tm /stripchart /computer:0.fr.pool.ntp.org /dataonly /samples:10 | select -Skip 3 | % {[double]$_.Substring(11,10)} | Measure-Object -Average -sum 

$a也可以給你的最大和最小加入Measure-Object PARAMS。

0

你要轉換爲雙,而不是int類型。下面應該這樣做:

[System.Collections.ArrayList]$winTimeStripchart = w32tm /stripchart /computer:0.pool.ntp.org /dataonly /samples:10 
$WinTimeOffset = $null 
$winTimeStripchart.RemoveRange(0,3) 

foreach($entry in $winTimeStripchart){ 
$Offset = $entry.split("-") 
$trimmedOffset = $Offset[1].trim("s")  
$winTimeOffset = [double]$winTimeOffset + [double]$trimmedOffset 
} 

Write-Host "Total: $winTimeOffset" 
Write-Host "Average: $($winTimeOffset/$winTimeStripchart.count)" 

輸出示例:

Total: 6.1581437 
Average: 0.61581437 

我已經做了一些其他的調整,以腳本以及使其更具可擴展性:

  • 的foreach而不是for循環
  • 使用列表而非數組並剝離前3個條目。
  • 劃分列表中的買入數量。

問候

阿卡斯

+0

是否有任何特殊原因使用'$ WinTimeOffset = $ null'而不是'[WinForOffset = 0.0](或'[double]')? –

+0

嗨安德魯, $ WinTimeOffset = $ null是遺留代碼,我只是忘了調整它。 – Arcass