newbi2009 1 Geschrieben 6. Januar 2022 Autor Melden Teilen Geschrieben 6. Januar 2022 Hallo zusammen, ich habe es jetzt mit dieser Zeile hinbekommen $abc = @(import-csv -path C:\temp\Test.csv -Header 'Nachname;Vorname;Email;PersonalNummer' | Select-Object -skip 5) $abc = @(import-csv -path C:\temp\Test.csv -Header "Nachname","Vorname","Email","PersonalNummer" -delimiter ";" | Select-Object -skip 5) vielen Dank für Eure Hilfe. Allerdings habe ich noch ein Phänomen, bei dem ich bitte nochmal Eure Hilfe bräuchte: Sobald das ERSTE ZEICHEN einer Zeile in der csv-Datei, die eingelesen wird, ein Anführungszeichen " ist, funktioniert das Ganze nicht mehr?! Wie kann ich das denn "reparieren" (ich habe leider in meiner einzulesenden CSV in 2 Zeilen jeweils ein " als erstes Zeichen stehen) Danke nochmal Holger sorry, ich wollte die Code-Zeile nicht doppelt posten.... Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 6. Januar 2022 Melden Teilen Geschrieben 6. Januar 2022 vor 36 Minuten schrieb newbi2009: Sobald das ERSTE ZEICHEN einer Zeile in der csv-Datei, die eingelesen wird, ein Anführungszeichen " ist, funktioniert das Ganze nicht mehr?! Wie kann ich das denn "reparieren" (ich habe leider in meiner einzulesenden CSV in 2 Zeilen jeweils ein " als erstes Zeichen stehen) Und was genau heißt funktioniert das Ganze nicht mehr? Zitieren Link zu diesem Kommentar
newbi2009 1 Geschrieben 6. Januar 2022 Autor Melden Teilen Geschrieben 6. Januar 2022 vor 34 Minuten schrieb Sunny61: Und was genau heißt funktioniert das Ganze nicht mehr? Zu ladene CSV_Datei Ohne " als erstes Zeichen: Zeile 01 Zeile 02 Zeile 03 Zeile 04 Zeile 05 Schmitz;Harald;Schmitz@zuHause.de;123456; ;Heiner;;234567; Müller;;Mueller@zuHause.de;; Maier;Susanne;;456789 ;;;;;;;;;;;;;; PS C:> $abc = @(import-csv -path C:\temp\Test.csv -Header "Nachname","Vorname","Email","PersonalNummer" -Delimiter ";"| Select-Object -skip 5) PS C:> $abc Nachname Vorname Email PersonalNummer -------- ------- ----- -------------- Schmitz Harald Schmitz@zuHause.de 123456 Heiner 234567 Müller Mueller@zuHause.de Maier Susanne 456789 PS C:> $abc[1] Nachname Vorname Email PersonalNummer -------- ------- ----- -------------- Heiner 234567 PS C:> $abc[1].Vorname Heiner PS C:> Bei einer zu ladene CSV_Datei MIT " als erstes Zeichen einer beliebigen der ersten 5 Zeilen, füllt sich die Variable $abc nicht mehr: Zeile 01 "Zeile 02 Zeile 03 Zeile 04 Zeile 05 Schmitz;Harald;Schmitz@zuHause.de;123456; ;Heiner;;234567; Müller;;Mueller@zuHause.de;; Maier;Susanne;;456789 ;;;;;;;;;;;;;; PS C:> $abc = @(import-csv -path C:\temp\Test.csv -Header "Nachname","Vorname","Email","PersonalNummer" -Delimiter ";"| Select-Object -skip 5) PS C:> $abc PS C:> $abc[1] PS C:> $abc[1].Vorname PS C:> Zitieren Link zu diesem Kommentar
cj_berlin 1.306 Geschrieben 6. Januar 2022 Melden Teilen Geschrieben 6. Januar 2022 vor 3 Minuten schrieb newbi2009: Bei einer zu ladene CSV_Datei MIT " als erstes Zeichen einer beliebigen der ersten 5 Zeilen, füllt sich die Variable $abc nicht mehr: Diese Datei entspricht dann auch nicht dem RFC und ist somit keine valide CSV-Datei. 1 Zitieren Link zu diesem Kommentar
NilsK 2.918 Geschrieben 6. Januar 2022 Melden Teilen Geschrieben 6. Januar 2022 (bearbeitet) Moin, der Grund ist, dass mit Anführungsstrichen der Inhalt eines einzelnen Feldes begonnen wird, falls sich innerhalb des Feldes Trennzeichen befinden. Das Import-Cmdlet sieht nun also das "öffnende" Anführungszeichen, sucht das schließende und behandelt alles dazwischen als ein einziges Feld. Wenn es kein schließendes Zeichen gibt, läuft das Cmdlet vermutlich auf einen Fehler. In beiden Fällen importiert das Cmdlet aber die Datei nicht so, wie es gewünscht ist. Wie Evgenij richtig zusammenfasst, erfüllt deine CSV-Datei damit nicht zuverlässig die Bedingungen für einen erfolgreichen Import. Und nun siehst du, warum wir nach dem Hintergrund fragen ... Gruß, Nils bearbeitet 6. Januar 2022 von NilsK 1 Zitieren Link zu diesem Kommentar
tesso 373 Geschrieben 6. Januar 2022 Melden Teilen Geschrieben 6. Januar 2022 Ich frage nochmal. Warum ein Array? Zitieren Link zu diesem Kommentar
newbi2009 1 Geschrieben 6. Januar 2022 Autor Melden Teilen Geschrieben 6. Januar 2022 ...also dann doch so, wie ich es ganz am Anfang versucht habe => mir selber eine neue CSV-Datei aus verschiedenen Bestandteilen "zusammenstricken" und diese dann abspeichern und neu laden. 1 Zitieren Link zu diesem Kommentar
tesso 373 Geschrieben 6. Januar 2022 Melden Teilen Geschrieben 6. Januar 2022 vor 1 Minute schrieb newbi2009: ...also dann doch so, wie ich es ganz am Anfang versucht habe => mir selber eine neue CSV-Datei aus verschiedenen Bestandteilen "zusammenstricken" und diese dann abspeichern und neu laden. Ich würde an der Wurzel ansetzen. Warum wird die CSV falsch erzeugt? 1 Zitieren Link zu diesem Kommentar
newbi2009 1 Geschrieben 6. Januar 2022 Autor Melden Teilen Geschrieben 6. Januar 2022 vor 7 Minuten schrieb tesso: Ich frage nochmal. Warum ein Array? damit ich jeden einzelnen Wert ansprechen und später in den LDAP-Server einfügen kann vor 4 Minuten schrieb tesso: Ich würde an der Wurzel ansetzen. Warum wird die CSV falsch erzeugt? ...das ist ein Excl-Datei "saved as CSV" Zitieren Link zu diesem Kommentar
tesso 373 Geschrieben 6. Januar 2022 Melden Teilen Geschrieben 6. Januar 2022 vor 1 Minute schrieb newbi2009: damit ich jeden einzelnen Wert ansprechen und später in den LDAP-Server einfügen kann Das kannst du auch in der Collection. vor 1 Minute schrieb newbi2009: ...das ist ein Excl-Datei "saved as CSV" Irgendwas muß in den Daten anscheinend buggy sein. Zitieren Link zu diesem Kommentar
NilsK 2.918 Geschrieben 6. Januar 2022 Melden Teilen Geschrieben 6. Januar 2022 Moin, was uns zum Anfang zurückführt ... lässt sich der Umweg über CSV, vielleicht sogar der über Excel vermeiden? Falls nicht, dann ist es vielleicht wirklich am einfachsten, die Importdatei erst zu korrigieren und dann zu verarbeiten. Gruß, Nils 1 Zitieren Link zu diesem Kommentar
newbi2009 1 Geschrieben 6. Januar 2022 Autor Melden Teilen Geschrieben 6. Januar 2022 vor 6 Minuten schrieb NilsK: Moin, was uns zum Anfang zurückführt ... lässt sich der Umweg über CSV, vielleicht sogar der über Excel vermeiden? Falls nicht, dann ist es vielleicht wirklich am einfachsten, die Importdatei erst zu korrigieren und dann zu verarbeiten. Gruß, Nils ....was mich dann wieder zu meiner ursprünglichen Frage führt: MUSS ich den Umweg gehen, den Inhalt der Variable zuerst in eine Datei zu speichern, nur um diese danach wieder einzulesen? Das muss doch auch ohne gehen.... Aber wie? Zitieren Link zu diesem Kommentar
NilsK 2.918 Geschrieben 6. Januar 2022 Melden Teilen Geschrieben 6. Januar 2022 Moin, also, wenn du den Aufwand reduzieren willst, dann an sinnvoller Stelle. Da käme für mich nur etwas weiter vorne im Ablauf in Frage. Wenn du bei der CSV-Verarbeitung bleiben willst, dann nimm die Datei, die möglicherweise kaputt ist, entferne die möglicherweise kaputten fünf Zeilen und speichere sie wieder ab. Wenn du nur so sichergehen kannst, dass der CSV-Import über das Cmdlet funktioniert (das nun mal eine ordentliche Datei erwartet, dafür aber auch Vorteile bietet), dann würde ich an der Stelle nicht weiter rummachen. Dein Skript kann dann ja am Ende auch noch aufräumen. Du schreibst hier ja schließlich ein Skript und keine ERP-Anwendung. Gruß, Nils Zitieren Link zu diesem Kommentar
cj_berlin 1.306 Geschrieben 6. Januar 2022 Melden Teilen Geschrieben 6. Januar 2022 vor 38 Minuten schrieb newbi2009: ...das ist ein Excl-Datei "saved as CSV" Nope. 1 Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 6. Januar 2022 Melden Teilen Geschrieben 6. Januar 2022 (bearbeitet) vor einer Stunde schrieb newbi2009: MUSS ich den Umweg gehen, den Inhalt der Variable zuerst in eine Datei zu speichern, nur um diese danach wieder einzulesen? Das muss doch auch ohne gehen.... Aber wie? Nein, Du musst keine Datei zwischenspeichern. ABER ... wenn Deine Input-Daten keine validen CSV-Daten sind, werden die Ergebnisse auch wieder fehlerhalft sein. Du musst also z.B. sicherstellen, dass jede Zeile die gleiche Anzahl an Feldern hat und dass, wenn Du ein Delimiterzeichen in einem Feld hast, dieses auch mit Gänsefüßchen umschlossen ist. Es genügt Deinen Input-Content in einer Variablen zu speichern und dann mit dieser weiterzuarbeiten ... so ungefähr ... $RawInput = @' Zeile 01 "Zeile 02 Zeile 03 Zeile 04 Zeile 05 Schmitz;Harald;Schmitz@zuHause.de;123456; ;Heiner;;234567; Müller;;Mueller@zuHause.de;; Maier;Susanne;;456789; '@ -split "\r\n" $WithoutFirst5Rows = $RawInput | Select-Object -Skip 5 $WithoutFirst5Rows | ConvertFrom-Csv -Header "Nachname", "Vorname", "Email", "PersonalNummer" -Delimiter ";" bearbeitet 6. Januar 2022 von BOfH_666 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.