Ipfan 0 Geschrieben 4. September 2019 Melden Teilen Geschrieben 4. September 2019 Hallo, ich möchte über Powershell eine CSV importieren, diese filtern und leicht verändern, bevor ich diese wieder als CSV exportiere. Das Vorgehen ist bisher auch kein Problem, nur das ich die CSV nicht verändert bekomme. Folgende Schritte führe ich durch: $csv = Import-Csv -path '.\test.csv' -Encoding UTF8 -Delimiter "`t" | Select * -Exclude "Name","Vorname","Strasse","PLZ","Ort" Im weiteren Schritt muss ich die Kundennummer abrufen und hier den Wert "AA-" voranstellen, sodass aus der Nummer "123456" "AA-123456" wird. Ich habe gedacht, dass man dies mit folgenden Befehl mache kann: for ($i=0; $i -lt $csv.length; $i++){csv[$i]="AA-" + $csv[$i]} Ich habe natürlich noch diverse andere Wege probiert, aber diesen Befehl mal als Beispiel. Mittlerweile habe ich keine weiteren Lösungswege mehr, da ich in Powershell noch ein Anfänger bin. Abschließend muss ich dies natürlich noch exportieren, aber dies sollte natürlich kein Problem darstellen. Hat vielleicht von euch einer eine Idee? Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 4. September 2019 Melden Teilen Geschrieben 4. September 2019 Ich meine das geht mit CSV nicht und du musst entweder ein temporäres CSV erstellen oder das mit einem PSObject machen. Wieso willst du das mit CSV machen? Wenn du das Zeilenweise bearbeitest bekommst du das hin, wie du willst. 1 Zitieren Link zu diesem Kommentar
Ipfan 0 Geschrieben 4. September 2019 Autor Melden Teilen Geschrieben 4. September 2019 vor 21 Minuten schrieb Dukel: Ich meine das geht mit CSV nicht und du musst entweder ein temporäres CSV erstellen oder das mit einem PSObject machen. Wieso willst du das mit CSV machen? Wenn du das Zeilenweise bearbeitest bekommst du das hin, wie du willst. Die Quelldatei ist eine CSV und muss etwas modifiziert werden. Anschließend muss diese wieder als CSV exportiert werden, weil diese im nächsten Schritt automatisiert von einem weiteren System verarbeitet wird. Die anderen Verarbeitungsschritte habe ich mir hier bewusst gespart, da diese bereits funktionieren. Ich hänge nur daran, dass die Kundennummer immer mit einem Präfix versehen werden muss. Kannst du mir deinen Ansatz mit dem PSObject vielleicht noch näher beschreiben? Vielen Dank für die Antwort! Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 4. September 2019 Melden Teilen Geschrieben 4. September 2019 Eine CSV ist ja auch nur eine Zeile in einem bestimmten Format. Hier kannst du Zeilenweise durchgehen und diese so wie du willst bearbeiten. Das ist das einfachste. 1 Zitieren Link zu diesem Kommentar
MurdocX 953 Geschrieben 4. September 2019 Melden Teilen Geschrieben 4. September 2019 Anstatt For, nutze mal ForEach-Object als Übergabe in die Pipe. Alternativ einfach jede Zeile bearbeiten, wie es @Dukel schrieb. 1 Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 4. September 2019 Melden Teilen Geschrieben 4. September 2019 Habe das, weil das auch nicht so trivial ist, zusammengebaut: Beispieldatei: PS C:\> Get-Content C:\temp\test.csv "Name","Vorname","Kundennummer","PLZ","Ort" "Dukel","Foo","123456","1234","Musterort" "Ipfan","Bar","098765","5678","Musterhausen" Script: $i = 0 foreach($line in (get-content C:\temp\test.csv)){ if($i -eq 0){ # Alternativ: "-lt 1", dabei können mehr Zeilen unbearbeitet bleiben # Unsere Headerzeile $ausgabe = $line }else{ # wir schreiben jede Zeile in eine Variable $line $null = $line.IndexOf(',') # Das erste Komma. Sprich unser erstes Feld (was wir ignorieren) $null = $line.IndexOf(',',($line.IndexOf(',')+1)) # Das zweite Komma. Hier fangen wir mit dem Index bei einer Zeile nach dem ersten Komma an. $vorher = $line.Substring(0,$line.IndexOf(',',($line.IndexOf(',')+1))+2) # Wir teilen die Zeile in ein vor der Kundennummer auf. Hier nutzen wir den Index vom zweiten Komma und zählen noch Zwei Zeichen (,") dazu $nachher = $line.Substring($line.IndexOf(',',($line.IndexOf(',')+1))+2) # Das selbe für den Bereich nach der Kundennummer $ausgabe = $vorher + "AA-" + $nachher } $ausgabe | add-content C:\Temp\new.csv $i++ } 1 Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 4. September 2019 Melden Teilen Geschrieben 4. September 2019 (bearbeitet) @' "Name","Vorname","Kundennummer","PLZ","Ort" "Dukel","Foo","123456","1234","Musterort" "Ipfan","Bar","098765","5678","Musterhausen" '@ | ConvertFrom-Csv -Delimiter ',' | Select-Object -Property Name,Vorname,PLZ,Ort, @{Name = 'Kundennummer'; Expression = {'AA-'+ $_.Kundennummer}} ... und sowas reicht nicht aus? bearbeitet 4. September 2019 von BOfH_666 2 Zitieren Link zu diesem Kommentar
MurdocX 953 Geschrieben 4. September 2019 Melden Teilen Geschrieben 4. September 2019 Schön aneinandergereiht dann so: $Data = Import-Csv -Path "C:\Users\user\Desktop\Test.csv" -Delimiter ';' | ForEach-Object { $_.Vorname = 'AA' + $_.Vorname; $_ } | ConvertTo-Csv -NoTypeInformation -Delimiter ';' Out-File "C:\Users\user\Desktop\Test1.csv" -InputObject $Data 2 Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 4. September 2019 Melden Teilen Geschrieben 4. September 2019 Sollten jetzt genug alternativen sein. Die Expressions vergesse ich immer. 1 Zitieren Link zu diesem Kommentar
Ipfan 0 Geschrieben 4. September 2019 Autor Melden Teilen Geschrieben 4. September 2019 Ich danke euch wirklich sehr, dass ich in dieser kurzen Zeit so viele Antworten bekommen habe! Das sollte mir sehr geholfen haben. Ich muss es nur erstmal alles verstehen Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 4. September 2019 Melden Teilen Geschrieben 4. September 2019 Und dir die Grundlagen aneignen. Das lohnt sich. 1 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.