2016-09-15 8 views
1

私はインポートするCSVファイルを持っています。列の元のデータを削除して更新された形式に置き換えるには、列の形式(backed_up_ts)を変更する必要があります。foreachを使用して配列の値を変更します

列の各行の元のデータは次のようになります

$csv = Import-Csv -Path "C:\Users\user\Desktop\NewReport.csv" | Select display_client_name, backed_up_ts 
$csv = foreach ($budate in $csv.backed_up_ts) { 
$budate = $budate.Substring(3) 
$budate = $budate.Replace("MDT", "") 
$budate = $budate.Replace("MST", "") 
$budate = $budate.Split(" ") 
$budate = $budate[1] + " " + $budate[2] + " " + $budate[5] 
$budate = ($budate | Get-Date -Format d) 

Tue Sep 13 07:46:26 MDT 2016 

それは日付と比較することができるように自分のコードの最初の部分は、すべての行をフォーマットここからは、更新された形式($budateの値)をとり、$csv.backed_up_ts配列の元のデータを置き換える必要があります。

ただし、$budateの値はforeachループ(3/30/16)のオブジェクトの最後の値のみです。
$csv.backed_up_tsの値は、元の形式(水曜日、8月30日、EST、2016)で配列に残ります。

元の配列$csv.backed_up_tsは、$budateによって作成された調整値で置き換える必要があります。

ありがとうございました。

答えて

1

データの望ましい変換の明確化に基づいて答えが更新されました。

コード

# demonstrate changing columnn data in csv input 
$input = @" 
header1, header2 
value11, "Tue Sep 13 07:46:26 MDT 2016" 
value21, "Tue Oct 19 07:46:26 MDT 2017" 
"@ 

$csv = ConvertFrom-Csv $input 

"original" 
$csv 

foreach ($item in $csv) 
{ 
    # modify the header2 column in our csv input 
    $parts = $item.header2.Split(' ') 
    $newDate = $parts[1] + " " + $parts[2] + " " + $parts[5] 
    $item.header2 = [DateTime]::Parse($newDate) | Get-Date -Format d 
} 

"new" 
$csv 

出力

original 
header1 header2      
------- -------      
value11 Tue Sep 13 07:46:26 MDT 2016 
value21 Tue Oct 19 07:46:26 MDT 2017 
new 
value11 9/13/2016     
value21 10/19/2017  
+0

だから - あなたのフォーマットでそれをしようとして、それを受け入れていません。私はさらに説明しましょう。 ヘッダ2の元のデータは "Wed Mar 30 10:03:45 MDT 2016" です。foreachの部分では - 私は多くのデータを取り除き、日付に変換する必要があります。 '$ csv.header2 $ item = $ item.replace(" MDT "、" ") これはデータを日付に変換できる形式にします。 私はそれを日付に変換すると、あなたのコード '$ item.header2 = $ item.header2 -replace *、$ item'を試します。 しかし、これはうまくいきません。 –

+0

質問を更新したり、達成しようとしていることをコメントに追加できますか?おそらくもっと良い方法があります。 "Wed Mar 30 10:03:45 MDT 2016"の形式の値の場合、正確に何を変更したいのですか? –

+0

-replaceパラメータがワイルドカード*を受け入れるなら、あなたのコードはうまくいくので、そのオブジェクト内のすべてを削除し、完全に置き換えます。また、静的な '2'で置き換えることもできません。動的変数に置き換えられます。 –

関連する問題