none
Powershell und die CSV Dateien. Woher kommen die " und warum wird die CSV anders beschrieben, wenn ich die " per Skript entferne RRS feed

  • Frage

  • Hallo zusammen,

    Bitte entschuldigt den langen Titel, aber ich wollte da schon das wesentliche Problem reinpacken.

    Wenn ich eine CSV Datei aus der Powershell erstelle oder befülle, benutze ich folgende Zeilen:

    $newrow = New-Object -TypeName PSObject -Property @{ Datum = $Datum ; Benutzername = $Benutzer}
    $newrow | Export-Csv -Path $Scriptpath\Benutzer.csv   -Delimiter ';' -Append -NoTypeInformation -Encoding:UTF8

    Das Ergebnis sieht in Notepad++ so aus:

    Datum;Benutzername
    "01.01.2018";"Test"

    Wenn ich dieses mit Excel öffne, erhalte ich korrekterweise 2 Spalten.

    Entferne ich nun mit

     $File =  "c:\admin\Benutzer.csv"
    (Get-Content $file) | Foreach-Object {$_ -replace '"', ''}|Out-File $file -Encoding:UTF8

    die ", sieht die Datei mit Notepad++ so aus:

    Datum;Benutzername
    01.01.2018;Test

    öffne ich diese mit Excel, existiert nur noch eine Spalte.

    Wenn ich in Excel eine Tabelle erzeuge, in die erste Spalte als Überschrift Datum, in die zweite Spalte Benutzername und eine Zeile drunter werte einfüge, diese dann als CSV Datei Speicher, existiert die zwei Spalten weiterhin nach dem Öffnen, sehen aber mit Notepad++  so aus wie nach dem Skriptbasierten entfernen der ".

    Ich hoffe ihr konntet mir folgen.

    Viele Grüße aus Hamburg

    Tim Kristof


    Donnerstag, 8. März 2018 13:58

Antworten

  • öffne ich diese mit Excel, existiert nur noch eine Spalte.

    Nö, Du musst dann nur angeben, dass ";" das Feldtrennzeichen ist.

    Aber grundsätzlich ist Microsoft nicht der Owner des CSV-Formats, weder PowerShell noch - erst recht! - Excel.

    Im IETF RFC 4180 steht:

    1. Each field may or may not be enclosed in double quotes (however some programs, such as Microsoft Excel, do not use double quotes at all).  If fields are not enclosed with double quotes, then double quotes may not appear inside the fields.
    2. Fields containing line breaks (CRLF), double quotes, and commas should be enclosed in double-quotes.
    3. If double-quotes are used to enclose fields, then a double-quote appearing inside a field must be escaped by preceding it with another double quote.

    So einfach ist das ;-)


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    • Als Antwort vorgeschlagen BOfH-666 Donnerstag, 8. März 2018 14:34
    • Als Antwort markiert Timson_Hamburg Montag, 12. März 2018 06:48
    Donnerstag, 8. März 2018 14:20