Benutzer mit den meisten Antworten
Einzelne Felder aus importierter CSV-Datei auslesen

Frage
-
Hallo zusammen,
ich importiere eine Tabelle aus einer CSV-Datei, möchte diese zeilenweise durchlaufen und den Inhalt jeweils eines bestimmten Feldes mit einer Zeichenkette vergleichen. Dabei stehe ich aber vor dem Problem, dass wenn ich das Feld auf die Art und Weise wie bisher extrahiere ich in meiner Ausgabe immer ungewollte Leerzeilen habe und mein Vergleich daher fehlschlägt.
Dies hier ist beispielhaft Inhalt der CSV-Datei:
Number,MachineName,Category 1,SRV05,MAIL 2,SRV10,DC 3,SRV12,TS 4,SRV20,DC 5,SRV21,SQL
die Tabelle verarbeite ich wie folgt:
$LISTE = Import-Csv C:\Beispiel\beispiel.csv $I = 0 $ANZAHL = $LISTE.count While ($I -lt $ANZAHL) { if (($LISTE[$I] | Format-Table Category -HideTableHeaders) -eq "MAIL") { # tue etwas } elseif (($LISTE[$I] | Category -HideTableHeaders) -eq "DC") { # tue etwas anderes } # (...) $I = $I + 1 }
Der Inhalt von z.B.: "$LISTE[$I] | Format-Table Category -HideTableHeaders" ergibt dann:
" MAIL "
und nicht (wie ich es gerne hätte)
"MAIL"
Somit schlägt mein Vergleich natürlich immer fehl. Gibt es eine Möglichkeit wie ich sinnvoll den Inhalt eines einzelnen Feldes der Tabelle extrahieren kann?Schonmal Danke für Eure Hilfe!
Andreas
Antworten
-
Moin,
wow, entweder verstehe ich Dein Ziel nicht, oder Du machst es schrecklich kompliziert.
Mal Schritt für Schritt:
Einlesen der Datei: $LISTE = Import-Csv C:\Beispiel\beispiel.csv
Durchlaufen der Liste $LISTE | foreach-object { }
Zugriff innerhalb der Schleife auf das Feld "Category": $_.Category (= die SPALTEN-KÖPFE werden beim Import automatisch zur Eigenschaftsbezeichnung)
IF-Abfragen sind bekanntAlles zusammen:
Deine Datei:
Number,MachineName,Category 1,SRV05,MAIL 2,SRV10,DC 3,SRV12,TS 4,SRV20,DC 5,SRV21,SQL
Der Code:
$LISTE = Import-Csv C:\Beispiel\beispiel.csv $LISTE | foreach-object { if ($_.Category -eq 'MAIL') { # tue etwas } elseif if ($_.Category -eq 'DC') { # tue etwas anderes }
Falls Du den Zähler ($I) in der Schleife brauchst oder einen anderen Bezug zu der aktuellen Zeile, kann man das auch in andere Schleifen umbauen.
Grüße aus Berlin schickt Robert
MVP Exchange Server- Als Antwort markiert _A-G_ Mittwoch, 3. August 2011 14:22
Alle Antworten
-
Moin,
wow, entweder verstehe ich Dein Ziel nicht, oder Du machst es schrecklich kompliziert.
Mal Schritt für Schritt:
Einlesen der Datei: $LISTE = Import-Csv C:\Beispiel\beispiel.csv
Durchlaufen der Liste $LISTE | foreach-object { }
Zugriff innerhalb der Schleife auf das Feld "Category": $_.Category (= die SPALTEN-KÖPFE werden beim Import automatisch zur Eigenschaftsbezeichnung)
IF-Abfragen sind bekanntAlles zusammen:
Deine Datei:
Number,MachineName,Category 1,SRV05,MAIL 2,SRV10,DC 3,SRV12,TS 4,SRV20,DC 5,SRV21,SQL
Der Code:
$LISTE = Import-Csv C:\Beispiel\beispiel.csv $LISTE | foreach-object { if ($_.Category -eq 'MAIL') { # tue etwas } elseif if ($_.Category -eq 'DC') { # tue etwas anderes }
Falls Du den Zähler ($I) in der Schleife brauchst oder einen anderen Bezug zu der aktuellen Zeile, kann man das auch in andere Schleifen umbauen.
Grüße aus Berlin schickt Robert
MVP Exchange Server- Als Antwort markiert _A-G_ Mittwoch, 3. August 2011 14:22
-
Hallo Robert,
Es ist durchaus möglich, dass meine ursprüngliche Idee komplizierter als notwendig ist. Ich setze mich noch nicht lange mit Powershell auseinander, daher komme ich bisher oft noch nicht sinnvoll zum Ziel.
Mit Deinem Vorschlag habe ich es jedenfalls geschafft mein Skript so zu gestalten, dass es den Zweck erfüllt den es erfüllen soll.
Besten Dank!
Andreas -
Hallo Andreas,
Es ist durchaus möglich, dass meine ursprüngliche Idee komplizierter als notwendig ist.
es war auch nicht als Kritik gemeint. Aber Dein Script sah zu der Anforderung zu merkwürdig aus, dass mir nicht klar war, ob ich deine Anforderung richtig verstanden habe und das in Wirklichkeit tatsächlich so einfach was
Ich setze mich noch nicht lange mit Powershell auseinander, daher komme ich bisher oft noch nicht sinnvoll zum Ziel.
Das macht nichts. Ich bin auch kein Programmier (eher ein scriptender Admin), daher gibt es keine guten oder schlechten Scripte für mich - nur funktionierende und nicht funktionierend.
Mit Deinem Vorschlag habe ich es jedenfalls geschafft mein Skript so zu gestalten, dass es den Zweck erfüllt den es erfüllen soll.
Das freut mich!
Grüße aus Berlin schickt Robert
MVP Exchange Server