我正在嘗試從我的經紀人那里匯總一些統計資料。我有 CSV 格式的原始資料。以下是來自 CSV 的幾個字串:
"Date";"OperationType";"InstrumentType";"Payment";"Currency"
"30.07.2021 6:00:00";"Dividend";"Stock";"3,42";"USD"
"30.07.2021 6:00:00";"Dividend";"Stock";"0,16";"USD"
"29.07.2021 13:55:15";"BrokerCommission";"Currency";"-7,32";"RUB"
"29.07.2021 13:55:14";"Buy";"Currency";"-14635,5";"RUB"
"29.07.2021 13:55:13";"PayIn";;"14642,82";"RUB"
"29.07.2021 6:00:00";"Dividend";"Stock";"1,93";"USD"
"29.07.2021 6:00:00";"Dividend";"Stock";"1107";"RUB"
"29.07.2021 6:00:00";"TaxDividend";"Stock";"-144";"RUB"
"28.07.2021 12:13:18";"BrokerCommission";"Currency";"-7,34";"RUB"
"28.07.2021 12:13:17";"Buy";"Currency";"-14683";"RUB"
"28.07.2021 12:13:17";"PayIn";;"14690,35";"RUB"
"28.07.2021 12:12:38";"BrokerCommission";"Stock";"-0,1";"USD"
"28.07.2021 12:12:37";"Buy";"Stock";"-196,71";"USD"
"28.07.2021 7:58:17";"BrokerCommission";"Currency";"-3,68";"RUB"
"28.07.2021 7:58:16";"Buy";"Currency";"-7369,75";"RUB"
"28.07.2021 7:58:15";"PayIn";;"7373,44";"RUB"
"28.07.2021 0:35:08";"BrokerCommission";"Stock";"-0,06";"USD"
"28.07.2021 0:35:07";"Buy";"Stock";"-122,23";"USD"
"28.07.2021 0:34:16";"BrokerCommission";"Stock";"-0,14";"USD"
"28.07.2021 0:34:15";"Buy";"Stock";"-278,92";"USD"
"28.07.2021 0:33:18";"BrokerCommission";"Stock";"-0,07";"USD"
"28.07.2021 0:33:17";"Buy";"Stock";"-142,76";"USD"
"28.07.2021 0:32:31";"BrokerCommission";"Stock";"-0,04";"USD"
"28.07.2021 0:32:30";"Buy";"Stock";"-84,31";"USD"
這是我用于它的代碼:
#Initiate arrays
$InputArray = @()
$FinalArray = @()
$GroupedArray = @()
#Create array with source data
$InputArray = Import-CSV "path_to_csv_file\file.csv" -Delimiter ";" -Encoding UTF8 | Where-Object { $_.PSObject.Properties.Value -ne '' }
#Convert strings to appopriate data types
foreach ($Object in $InputArray){
$Object.Date = [datetime]::parse($Object.Date) | Get-Date -Format "yyyy-MM-dd"
$Object.Payment = [double]($Object.Payment -replace(',','.'))
}#foreach
#Group objects
$GroupedArray = $InputArray | Group-Object -Property "Date","Currency","OperationType" | `
Select-Object @{Name='Date' ;Expression={$_.Values[0]}}, `
@{Name='Currency' ;Expression={$_.Values[1]}}, `
@{Name='OperationType' ;Expression={$_.Values[2]}}, `
@{Name='Payment' ;Expression={($_.Group | Measure-Object 'Payment' -Sum).Sum}} | `
Group-Object Date
foreach ($Object in $GroupedArray){
$Date = $Object.Name
foreach ($Instance in $Object.Group){
if ($Instance.OperationType = "BrokerCommission" -and $Instance.Currency -eq "RUB"){
$BrokerComissionRUB = $null
$BrokerComissionRUB = $Instance.Payment
}#if
if ($Instance.OperationType = "BrokerCommission" -and $Instance.Currency -eq "USD"){
$BrokerComissionUSD = $null
$BrokerComissionUSD = $Instance.Payment
}#If
if ($Instance.OperationType = "Dividend" -and $Instance.Currency -eq "RUB"){
$DividendRUB = $null
$DividendRUB = $Instance.Payment
}#if
if ($Instance.OperationType = "Dividend" -and $Instance.Currency -eq "USD"){
$DividendUSD = $null
$DividendUSD = $Instance.Payment
}#If
if ($Instance.OperationType = "PayIn" -and $Instance.Currency -eq "RUB"){
$PayInRUB = $null
$PayInRUB = $Instance.Payment
}#if
}#foreach
$FinalArray = [PSCustomObject]@{
"Date" = $Date
"PayInRUB" = $PayInRUB
"DividendRUB" = $DividendRUB
"DividendUSD" = $DividendUSD
"BrokerComissionRUB" = $BrokerComissionRUB
"BrokerComissionUSD" = $BrokerComissionUSD
}
}#foreach
$FinalArray
問題是在$InputArray值中,例如$InputArrary[1].OperationType,具有STRING格式:
$InputArray[1].OperationType | gm
TypeName: System.String
但是在使用Group-Object對物件進行分組后,OperationType值型別更改為Boolean:
$GroupedArray[1].Group.operationtype | gm
TypeName: System.Boolean
So because of this strange type transformation the actual data is lost. Nevertheless if I execute a part of a script before foreach cycle, the data type of OperationType is still STRING in $GroupedArray. If I run whole script, it changes to Boolean. I have no idea why is that haapening and how can I avoid this. Could you please advice?
uj5u.com熱心網友回復:
沒有奇怪的轉換,你只是有一個錯字,你需要使用-eq而不是=
您實際上是將$Instance.OperationType值設定為“BrokerCommission”,然后再次將其值替換$Instance.Currency -eq "RUB"為布林值的結果
在控制臺中自己檢查一下,執行這個:
$Instance.OperationType = "BrokerCommission" -and $Instance.Currency -eq "RUB"
結果:
$Instance.OperationType
False
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/358645.html
標籤:powershell types
上一篇:無法讀取檔案內容
