FranzR 0 Geschrieben 18. September 2017 Melden Teilen Geschrieben 18. September 2017 Hallo MCSE-Boardich bin ein Newbie in Sachen Powershell und bräuchte Eure Hilfe.Ich habe eine Datei im CSV-Format. Diese sollte zur späteren Nachbearbeitung in 3 einzelne Dateien zerlegt werden. Maßgebend dazu ist der Inhalt eines Feldes. Also wenn z. B. in der Spalte 3 einer Zeile ein Wert (SpaltenName = Länge) unter 10.00 enthalten ist, dann soll die kpl. Zeile in die Datei "D1.csv" ausgegeben werden. Wenn der Wert zwischen 10.01 und 20.00 liegt, dann soll die Zeile in die "D2.csv" ausgegeben werden. Und wenn der Wert größer als 20.01 ist, soll die Zeile in die Datei "3.csv" ausgegeben werden. Wie kann das realisieren werden?Besten Dank für Eure Hilfe!Viele GrüßeFranz Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 18. September 2017 Melden Teilen Geschrieben 18. September 2017 (bearbeitet) Ganz einfach: Du liest die CSV-Datei ein mit Import-CSV, dann vergleichst Du die gewünschten Werte mit Deinen Vorgaben, entweder mit if oder switch und dann benutzt Du Export-CSV, um die entsprechenden Zeilen jeweils in eine eigene Datei zu schreiben. Was hast Du denn schon? bzw. Wo steckst Du fest? Empfehlung: Du solltest Dir die Hilfe der einzelnen cmdlets dringend komplett durchlesen, inclusive der Beispiele und dann ein wenig "rumspielen" - dabei lernt man meiner Meinung nach am besten. bearbeitet 18. September 2017 von BOfH_666 Zitieren Link zu diesem Kommentar
FranzR 0 Geschrieben 18. September 2017 Autor Melden Teilen Geschrieben 18. September 2017 Hallo BOfH_666, Danke für Dein schnelles Feedback. Das Einlesen mit Import-CSV klappt. Nur bei der Syntax in der Selektion der 3 Teilbereiche stecke ich fest. also z. B. dass wenn der Feldinhalt kleiner als 20.00 ist, dass die Zeile dann in Datei 1 geschrieben wird. usw. Wie gesagt, ich bin in dem Thema noch ein Newbie. VGFranz Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 18. September 2017 Melden Teilen Geschrieben 18. September 2017 Na zeig doch mal her .... was hast Du denn schon? Du kannst den Code hier (entsprechend als Code formatiert) posten, dann sehen wir bestimmt, wo's klemmt. ;) Zitieren Link zu diesem Kommentar
FranzR 0 Geschrieben 18. September 2017 Autor Melden Teilen Geschrieben 18. September 2017 So schaut mein besheriger Code aus# Pfad setzen$inFile = "C:\PowerTest\testinput.csv"$outFile = "C:\PowerTest\out_File1.csv"# File einlesen mit Bedingung$csv = Import-Csv -Delimiter ',' -Encoding Default -Path $inFile | Where-Object {$_.Long -lt 20.00}# Änderungen wieder ausgeben$csv | ConvertTo-Csv -Delimiter ';' -NoTypeInformation | Out-File -Encoding default -FilePath $outFile Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 18. September 2017 Melden Teilen Geschrieben 18. September 2017 Hmmm ... bitte den Code als Code formatieren! Das macht uns und auch Dir das Leben leichter. ;) Ich würde es so anfangen: $inFile = "C:\PowerTest\testinput.csv" $Drunter = "C:\PowerTest\out_File_Drunter.csv" $Drueber = "C:\PowerTest\out_File_Drueber.csv" $Drin = "C:\PowerTest\out_File_Drin.csv" Import-Csv -Delimiter ',' -Encoding Default -Path $inFile | ForEach-Object { If([INT]$_.Long -le 10){ $_ | Export-Csv -Path $Drunter -Delimiter ';' -NoTypeInformation -Append } ElseIf([INT]$_.Long -gt 10 -and [INT]$_.Long -le 20){ $_ | Export-Csv -Path $Drin -Delimiter ';' -NoTypeInformation -Append } Else{ $_ | Export-Csv -Path $Drueber -Delimiter ';' -NoTypeInformation -Append } } ... Du wolltest ja schließlich 3 Bedingungen prüfen. Noch'n generellen Tipp: Unnötige Kommentare kannst Du weglassen. Jeder der Powershell kennt, weiß was Import-CSV macht, oder was eine Variablenzuweisung ist ... usw. Zitieren Link zu diesem Kommentar
FranzR 0 Geschrieben 18. September 2017 Autor Melden Teilen Geschrieben 18. September 2017 Das schaut ja echt gut aus. Jetzt ist mir auch klar wo ich meine Fehler hatte. Wie gesagt, ich hab mit PS bislang nocht viel gemacht... Mit weiteren "ElseIf" Bedingungen könnte ich theoretisch die Ausgabe in weitere Dateien noch mehr verfeinern. Aber 3 reichen mir im Moment. :-) Nochmals Vielen Dank für Deine Hilfe!!!VGFranz 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.