Jump to content

CSV-Datei in mehrerer Teile separieren


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Geschrieben

Hallo MCSE-Board

ich 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üße
Franz

Geschrieben (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 von BOfH_666
Geschrieben

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.

 

VG
Franz



 

Geschrieben

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

Geschrieben

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.

Geschrieben

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!!!

VG
Franz

 

 




 

Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...