none
CSV Datei öfnnen, ändern, speichern RRS feed

  • Frage

  • Ich habe folgendes Anliegen, ich habe eine immer wieder kehrende Aufgabe welche ich gern automatisieren möchte.

    Es gibt eine Date welche zum Beispiel "Pfusch1.csv" heißt und im Ordner C:\ErstePSErfahrung\ liegt.
    Die csv Datei hat ein ; als trennzeichen und ist mit folgendem Inhalt versehen.

    Spalte1;Spalte2;;;Spalte5;Spalte6;
    Spalte1;Spalte2;;;Spalte5;Spalte6;

    daraus möchte ich nun den Inhalt der Spalte2 löschen (aber nicht die ganze Spalte).

    Spalte1;;;;Spalte5;Spalte6;
    Spalte1;;;;Spalte5;Spalte6;

    Im Anschluss soll die Datei wieder im Ordner C:\ErstePSErfahrung\ gespeichert werden.

    Ich habe folgendes bereits versucht:

    $CSV = Import-CSV -Delimiter ';' -Path 'C:\ErstePSErfahrung\Pfusch1.csv' -Header (1..6)
    Foreach ($Line in $CSV) { $Line.2 = '' }
    $CSV | Export-Csv -Delimiter ';' -NoTypeInformation 'C:\ErstePSErfahrung\Pfusch1_neu.csv'

    Jedoch erscheint dann folgendes: Cmdlet Export-Csv an der Befehlspipelineposition 1
    Geben Sie Werte für die folgenden Parameter an:
    InputObject:

    Wie mache ich es richtig?

    Donnerstag, 15. April 2021 12:48

Antworten

  • Hacktrist,

    Hallo und Willkommen im Deutschen Microsoft Windows PowerShell Forum.

    Ich hab grad keine CSV-Datei zum Testen da, aber so sollte es klappen:

    $CSV = Import-CSV -Delimiter ';' -Path 'C:\ErstePSErfahrung\Pfusch1.csv' -Header (1..6)
    $NewCSV =
    Foreach ($Line in $CSV) { 
        $Line.2 = ''
        $Line
    }
    $NewCSV | 
    Export-Csv -Delimiter ';' -NoTypeInformation 'C:\ErstePSErfahrung\Pfusch1_neu.csv'


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    • Bearbeitet BOfH-666 Donnerstag, 15. April 2021 13:26
    • Als Antwort markiert Hacktrist Freitag, 16. April 2021 07:03
    Donnerstag, 15. April 2021 13:24
  • Ich habe es folgendermaßen umgesetzt bekommen:


    #CSV Datei importieren
    $CSV = Import-CSV -Delimiter ';' -Path 'H:\Arbeitsordner\Vorbelegung.csv'-Header (1..14)
    #Spalte 2 leeren
    Foreach ($Line in $CSV) { $Line.2 = '' }
    #$CSV | Export-Csv -Delimiter ';' -NoTypeInformation 'C:\Arbeitsordner\Vorbelegung_neu.csv'
    #CSV Datei unter neuen Namen speichern
    $CSV | ConvertTo-Csv -NoTypeInformation -Delimiter ';' | Select -Skip 1 | Set-Content 'H:\Arbeitsordner\Vorbelegung_neu.csv'
    

    Jetzt sind aber alle EInträge mit "" gekennzeichnet. Wie bekomme ich es hin, dass keine Gänsefüßchen eingefügt werden?


    • Als Antwort markiert Hacktrist Freitag, 16. April 2021 07:02
    Freitag, 16. April 2021 06:20

Alle Antworten

  • Hacktrist,

    Hallo und Willkommen im Deutschen Microsoft Windows PowerShell Forum.

    Ich hab grad keine CSV-Datei zum Testen da, aber so sollte es klappen:

    $CSV = Import-CSV -Delimiter ';' -Path 'C:\ErstePSErfahrung\Pfusch1.csv' -Header (1..6)
    $NewCSV =
    Foreach ($Line in $CSV) { 
        $Line.2 = ''
        $Line
    }
    $NewCSV | 
    Export-Csv -Delimiter ';' -NoTypeInformation 'C:\ErstePSErfahrung\Pfusch1_neu.csv'


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    • Bearbeitet BOfH-666 Donnerstag, 15. April 2021 13:26
    • Als Antwort markiert Hacktrist Freitag, 16. April 2021 07:03
    Donnerstag, 15. April 2021 13:24
  • Ich habe es folgendermaßen umgesetzt bekommen:


    #CSV Datei importieren
    $CSV = Import-CSV -Delimiter ';' -Path 'H:\Arbeitsordner\Vorbelegung.csv'-Header (1..14)
    #Spalte 2 leeren
    Foreach ($Line in $CSV) { $Line.2 = '' }
    #$CSV | Export-Csv -Delimiter ';' -NoTypeInformation 'C:\Arbeitsordner\Vorbelegung_neu.csv'
    #CSV Datei unter neuen Namen speichern
    $CSV | ConvertTo-Csv -NoTypeInformation -Delimiter ';' | Select -Skip 1 | Set-Content 'H:\Arbeitsordner\Vorbelegung_neu.csv'
    

    Jetzt sind aber alle EInträge mit "" gekennzeichnet. Wie bekomme ich es hin, dass keine Gänsefüßchen eingefügt werden?


    • Als Antwort markiert Hacktrist Freitag, 16. April 2021 07:02
    Freitag, 16. April 2021 06:20
  • Jetzt sind aber alle EInträge mit "" gekennzeichnet. Wie bekomme ich es hin, dass keine Gänsefüßchen eingefügt werden?

    Die Gänsefüßchen gehören zum Standard. Kein Tool oder Programm, welches mit standard-konformen CSV-Dateien umgehen kann, sollte damit ein Problem haben. Das siehst Du auch schon bei PowerShell. Nach dem Import der CSV-Daten werden sie auf der Konsole nicht angezeigt.

    Wenn es trotzdem unbedingt sein soll, kannst Du PowerShell 7 benutzen. Mit dieser Version von Export-Csv hast ein wenig mehr Kontrolle über den Output.

    Eine weitere Möglichkeit, eine einzelne Spalte herauszufiltern wäre übrigens sowas hier:

    $CSV = 
    Import-CSV -Delimiter ';' -Path 'H:\Arbeitsordner\Vorbelegung.csv'-Header (1..14) | 
    Select-Object -ExcludeProperty 2 |
    Export-Csv -Path 'H:\Arbeitsordner\Vorbelegung_neu.csv' -NoTypeInformation
    Noch eine Kleinigkeit: Bitte den Code nicht überkommentieren! Jeder der ansatzweise PowerShell kann, weiß, dass mit einer Zeile die das cmdlet Import-Csv enthält, eine CSV-Datei importiert wird. Das muss nicht nochmal explizit als Kommentar erklärt werden. Und aus Höflichkeit gegenüber den Menschen, die den eigenen Code ansehen sollen, sollte man auch auskommentierte Code-Zeilen besser entfernen. ;-)

    Danke.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    • Bearbeitet BOfH-666 Freitag, 16. April 2021 06:54
    Freitag, 16. April 2021 06:53
  • O.k.

    Ich habe die Kommentare nur drin, weil ich selbst gerade PS lerne.

    Ich werde diese aber zukünftig entfernen.

    übrigens geht es wohl doch die Gänsefüßchen zu entfernen. Mit Regex.

    -replace '(?<=^|;)"|"(?=;|$)

    Freitag, 16. April 2021 07:00
  • übrigens geht es wohl doch die Gänsefüßchen zu entfernen. Mit Regex.

    Ich habe nicht gesagt, dass es nicht geht. Ich habe nur gesagt, dass es nicht nötig sein sollte. Und wie oben schon geschrieben, kann die Version in PowerShell 7 das auch direkt "Out of the Box". ;-) 

    Ich werde diese aber zukünftig entfernen.

    Das ist nett von Dir. Vielen Dank.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Freitag, 16. April 2021 07:09