2016-09-15 5 views
1

Ich habe eine CSV-Datei, die ich importieren, und ich brauche das Format einer Spalte (backed_up_ts) zu ändern, um die ursprünglichen Daten in der Spalte zu entfernen und es mit dem aktualisierten Format zu ersetzen.ändern Werte in einem Array mit foreach

die Originaldaten für jede Zeile in der Spalte sieht wie folgt aus:

Tue Sep 13 07:46:26 MDT 2016 

Der erste Teil meines Codes jede Zeile formatiert, so dass es zu einem Datum verglichen werden kann:

$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) 

Von hier aus muss ich das aktualisierte Format (im $budate Wert) nehmen und die ursprünglichen Daten im $csv.backed_up_ts Array ersetzen.

jedoch ist der Wert von $budate nur der letzte Wert des Objekts in der foreach Schleife (3/30/16).
Der Wert von $csv.backed_up_ts bleibt in dem Array in seinem ursprünglichen Format (Mittwoch, 30. August, EST, 2016).

Ich brauche das ursprüngliche Array $csv.backed_up_ts, das durch die koordinierenden Werte zu ersetzen ist, die von $budate erstellt wurden.

Danke.

Antwort

1

aktualisiert Antwort basierend auf Klärung der gewünschten Umwandlung von Daten.

-Code

# 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 

Ausgabe

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

Also - in es mit Ihrem Format versuchen, es nicht zu akzeptieren ist. lass mich das weiter erklären. Die ursprünglichen Daten in der Kopfzeile 2 ist "Wed Mar 30 10:03:45 MDT 2016" So in der Foreach-Teil - ich muss loswerden eine Menge der Daten, bevor ich es in ein Datum konvertieren kann. 'foreach ($ item in $ csv.header2) {$ item = $ item.replace ("MDT", "")' Dies wird die Daten in ein Format, das auf ein Datum umgewandelt werden kann. Wenn ich es in ein Datum umwandeln, ich Ihren Code dann versuchen '$ item.header2 = $ item.header2 -replace *, hat $ item' Aber das funktioniert nicht. –

+0

Können Sie Ihre Frage aktualisieren oder einen Kommentar hinzufügen mit dem, was Sie erreichen möchten? Vielleicht gibt es einen besseren Weg. Für einen Wert im Format "Wed Mar 30 10:03:45 MDT 2016", was genau soll er geändert haben? –

+0

Ihr Code würde also funktionieren - wenn der Parameter -replace einen Platzhalter * akzeptiert - würde er alles in diesem Objekt entfernen und es komplett ersetzen. Es kann auch nicht durch eine statische '2' ersetzt werden - es wird durch eine dynamische Variable ersetzt. –

Verwandte Themen