2016-03-11 56 views
0

我有一個CSV,看起來像這樣。導入CSV字段作爲整數

server,total,used 
server1,1024,512 
server2,2048,1024 

我想導入csv和除以總數。我得到invalidopertion: (op_division:string)...與我目前的代碼。我試圖將它們設置爲導入和數組內的整數,但它不能按預期工作。有任何想法嗎?

$csv2 = Import-Csv -Header 'server', 'total', 'used' C:\test.csv 

$used = $csv2.used 

$total = $csv2.total 

foreach($record in $csv2){ 

$used/$total 

} 
+0

你沒有在你的代碼中顯示轉換的例子嗎? '$ used'是列表中所有服務器的字符串_array_。它不知道如何自動將它們添加在一起。你在循環中根本不使用'$ record'。 'Import-Csv C:\ test.csv | ForEach-Object {[int] $ _。used/$ _。total * 100}'。你的文件有一個標題,所以你不需要自己添加一個。 – Matt

回答

0

這裏有幾個錯誤。

首先,你說這是你的文件:

server,total,used 
server1,1024,512 
server2,2048,1024 

但後來當您導入CSV指定標題:

$csv2 = Import-Csv -Header 'server', 'total', 'used' C:\test.csv 

這意味着,$csv2[0]將是標題行從你的文件。而且你顯然不能將字符串'used'除以字符串'total'。當文件中有no標題時,將使用-Header參數。

其次,當你這樣做:

$used = $csv2.used 
$total = $csv2.total 

你設置$used$total是值的數組。同樣,你不能用另一個數組來劃分數組。

第三,你在迭代數組,但是除以我們在上面的步驟中設置的值。所以你每$record完全相同的操作

試試這個:

$csv2 = Import-Csv C:\test.csv 

foreach ($record in $csv2) { 
    $record.used/$record.total 
} 

你不應該擔心的字符串轉換爲數值。 PowerShell將嘗試使用字符串自動執行此操作。只要它是一個數字字符串,它就可以正常工作。

+0

原諒我,因爲我是新人,這是我的第一篇文章。我在csv文件中沒有標題。我添加它來顯示每列是什麼。我在import-csv行添加標題。你最後的例子工作,我應該更早注意到這一點。我試過$ csv2.used/$ csv2.total,但$ csv2應該是$記錄。謝謝你的幫助! – Jmoore983

+0

@ Jmoore983非常歡迎您!如果我突然發現,我很抱歉。我只是試圖解釋錯誤的來源。 –