Jump to content

powershell Variable in Array


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

Empfohlene Beiträge

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

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

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

 

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

 

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