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

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

Link zu diesem Kommentar

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
Link zu diesem Kommentar

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

Link zu diesem Kommentar

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.

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

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...