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!

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