2015-05-19 136 views
0

我有一個腳本,通過與數據(XY:ZABC0.xyz)兩種格式的CSV文件去。然後將這些值保存在具有一列和可變行數的CSV文件中。我想設置我的腳本,例如,對於價值0.xyz數字,它會通過1440繁殖,然後將其存儲在$Values。格式XY:ZABC的編號也將按照它們在$Values中的格式進行存儲。條件乘法循環

$Values = @(Get-Content *\source.csv -Raw) -split '\s+' | 
      Where-Object {$_ -like '*:*' -or '0.*'} 
"UniqueActiveFaults" | Out-File *\IdealOutput.csv 
$Values | Sort-Object -Unique | Out-File *\IdealOutput.csv 

我試圖通過添加以下代碼來做到這一點:

foreach ($i in $Values) { 
    if ($i -lt 1) {$i*1440} 
} 

我也試過用do {$i*1440} while ($I -lt 1)循環做,但結果是顯示的號碼0.xyz 1440次。我相信這是由於$Values正在採取的數據類型,但不確定。

的樣本數據:

0.12345 
00:9090 90:4582 
0.12346 
0.1145 
0.145654 
0.5648 
01:9045 90:4500 
90:4546 
BA: 1117 BA:2525 
+2

可以爲您的CSV數據請 – Paul

+0

@保羅,我已經添加了樣本數據的一些樣本添加到原來的職位 –

回答

1

當您使用$i*1440是隻是告訴PowerShell來乘兩個值並返回該產品。如果您想更改$ i的值,則需要使用$i = $1 * 1440

你可能有其他一些問題,但這是假設你正在從輸入分配到$我正確的價值觀。

2

在你的代碼,$Values是字符串數組。字符串上的「乘法」操作是重複它。要像數字一樣對待它,在相乘之前進行浮動。

foreach ($i in $Values) { 
    if ($i -lt 1) {[float]$i * 1440} 
} 

正如託尼·辛克爾指出,這個循環將簡單地輸出操作給調用者的結果(或控制檯,如果你不用管吧)。如果你想讓你的數組反映變化,你必須將其存儲回來。

for ($i = 0; $i -lt $Values.length; $i++) { 
    if ($Values[$i] -lt 1) { [float]$Values[$i] *= 1440 } 
} 

請注意,這將使您的一些值數組作爲字符串和一些浮點數。根據你使用它做什麼,你可能需要進一步演員。

+0

謝謝。這很好。我有兩個問題:(a)請你解釋你的第二段代碼,我不知道我是否理解使用$ Values.length和if條件操作在第二行。 (b)另外,我的循環輸出給了我一個有效的數字,但每次都返回一個附加的0(零)。任何想法這個零來自哪裏? –

+0

第二位中的for是循環迭代語法,其中'$ i'是數組中的數字索引,並且從0到數組的長度。這是必要的,因爲'foreach'不能訪問原始數組來修改它。至於額外的0,你將不得不粘貼你的代碼,可能在一個新的問題。 –