質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

解決済

【PowerShell】CSVファイルを1行ずつ読み込み、値を編集加工し、別のCSVファイルを作成する。

watan
watan

総合スコア13

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

1回答

0リアクション

0クリップ

38487閲覧

投稿2017/02/08 06:28

###前提・実現したいこと
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

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。