none
Einzelne Felder aus importierter CSV-Datei auslesen RRS feed

  • 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


    Dienstag, 2. August 2011 15:10

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 bekannt

    Alles 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
    Dienstag, 2. August 2011 16:39

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 bekannt

    Alles 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
    Dienstag, 2. August 2011 16:39
  • 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

    Mittwoch, 3. August 2011 14:22
  • 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
    Mittwoch, 3. August 2011 16:07