###前提・実現したいこと
PowerShell初心者です。
CSVファイルを読み込み、入力レコードを元に値を作成したもので、別CSVファイルを作成するスクリプトを作っています。
1行づつ処理をした結果をカスタムオブジェクトへ格納し、それをCSV 出力・・としようとしていますが、配列をうまく進めることができません。
###該当のソースコード
言語:PowerShell
<入力ファイル:input.csv>
"Col1","Col2","Col3","Col4","Col5","Col6","Col7"
"November 1, 2016","","AAA","BBB","2016/12/02",1,1
"November 2, 2016","","AAA","CCC","2016/11/18",1,1
"November 3, 2016","","DDD","EEE","2016/11/25",1,1
<出力ファイル>
"Date1","Date2","Date3","Date4","Str1","Str2","Num_当年","Num_前年"
<プログラム:MakeCSVTest.ps1>
$Infile = 'C:\Users\n0000437\CHK\input.csv'
$Outfile = 'C:\Users\n0000437\CHK\OutFile.csv'
$opBSDT = ([datetime]$args[0]).tostring("yyyy/MM/dd")
$dpBSDT = ([datetime]$args[1]).tostring("yyyy/MM/dd")
"基準日1:$opBSDT"
"基準日2:$dpBSDT"
function ReadYoyaku{
$OutLines = New-Object System.Collections.ArrayList $OutLine = New-Object PSObject | Select-Object "Date1","Date2","Str1","Str2","Num_当年","Num_前年" $OutLines | ft -AutoSize Import-Csv $Infile | ForEach-Object { $SDate1=([datetime]$_.Col1).tostring("yyyy/MM/dd") $OutLine.Date1 = $SDate1 if( $SDate1 -lt $opBSDT ) { $OutLine.Date2 = ([datetime]$_.Col1).AddDays(+364).tostring("yyyy/MM/dd") } else { $OutLine.Date2 = $SDate1 } $OutLine.Str1 = $_.Col3 $OutLine.Str2 = $_.Col4 if( $SDate -lt $dpBSDT ) { $OutLine.Num_当年 = 0 $OutLine.Num_前年 = $_.Col7 } else { $OutLine.Num_当年 = $_.Col7 $OutLine.CV_前年 = 0 } [void]$OutLines.Add($OutLine)
$OutLines | ft -AutoSize
}
$OutLines | ft -AutoSize
}
ReadYoyaku
<起動>
起動時に日付をパラメータ渡しします。
.\MakeCSVTest.ps1 2017/1/1 2016/1/1
###問題・困っていること
出力結果が、入力ファイルの最後のレコードですべて置き換わってしまいま
上記実行結果が↓のようになってしまいます。
Date1 Date2 Str1 Str2 Num_当年 Num_前年
2016/11/03 2017/11/02 DDD EEE 0 6
2016/11/03 2017/11/02 DDD EEE 0 6
2016/11/03 2017/11/02 DDD EEE 0 6
こうなってほしい↓
Date1 Date2 Str1 Str2 Num_当年 Num_前年
2016/11/01 2017/10/31 AAA BBB 0 2
2016/11/02 2017/11/01 AAA CCC 0 4
2016/11/03 2017/11/02 DDD EEE 0 6
###補足情報(言語/FW/ツール等のバージョンなど)
$PSVersionTable
Name Value
CLRVersion 2.0.50727.5485
BuildVersion 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2017/02/08 08:26