2012-05-15 34 views
2

我目前正在導入一個CSV文件,其中有一列是所有數字。我試圖將它作爲int進行強制轉換,並且只會拖拽大於100的數字。我已經手動檢查了這個CSV文件,並且我可以確認有三行的值大於100%。但是,這總是返回0.我做錯了什麼?在與@Shay利維您的通話我無法將PowerShell正確地轉換爲int

$percentTooLarge = Import-Csv path\file.csv | Foreach-Object { $_.SumHoldingPercent = $_.SumHoldingPercent -as [int]; $_ } | Where-Object { $_.SumHoldingPercent -gt 100 } | Measure-Object 
$numPercentTooLarge = $percentTooLarge.Count 
+0

SumHoldingPercent在文件'100'或'100%'中的值是什麼? –

+0

從文件99.99413625,100.0000006,999.9999999, – mhopkins321

+1

的一些例子和我鍵入,我假設我的問題是鑄造爲一個int,而不是float – mhopkins321

回答

5

比較PowerShell的運營工作,應該這樣做:

$percentTooLarge = Import-Csv path\file.csv | 
    Where-Object { 100 -lt $_.SumHoldingPercent} | 
    Measure-Object 

基本上,當您比較事物時,PowerShell會嘗試將右轉換爲左類型。如果你先從ipcsv輸入一個值,那麼left將是一個字符串。如果你把一個數字第一 - 它將從CSV文件中的值轉換爲數字(這將是足夠聰明的保持型大不夠;))

我用這個代碼進行測試:

@" 
foo,bar,percent 
alfa,beta,120.5 
beta,gamma,99.9 
foo,bar,30.4 
works,cool,120.7 
"@ | ConvertFrom-Csv | where { 100 -lt $_.percent } 

...結果似乎沒問題。

0

看,我會用:

[System.Globalization.CultureInfo] $culture = "en-us" 

所以,你可以嘗試這樣的:由於的方式

([decimal]::parse($_.SumHoldingPercent ,$culture)) -gt 100