kromifan
Goto Top

Powershell - importierte CSV-Datei spaltenweise auslesen

Hallo zusammen,

bleibe mit meinem rudimentären Powershell-Erfahrungen an einem - wahrscheinlich kleinen - Problem hängen:


In meiner CSV-Datei gibt es mehrere Typen von "Berichten". Die vorhandenen Spalten sind alle Spalten aus allen Berichten, aber nicht jeder Bericht nutzt jede Spalte.
Bei jedem Typ soll nun ermittelt werden, ob der Bericht die Spalte jemals beschreibt oder nicht.


Meine Spalten haben Überschriften mit Umlauten und Klammern, daher lese ich die Namen mit Get-Member in eine Variable $Spalten
So weit, so gut.

Für jede Spalte möchte ich jetzt in jeder Zeile nachsehen, ob ein Wert vorhanden ist.

Dazu gibt es folgenden Loop

 ForEach ($Spalte in $Spalten){
    ForEach($Zeile in $Zeilen){
         # hier soll der Wert ermittelt werden - aber wie???
        $var = Get-Variable -Name $Spalte -ValueOnly
        $var =  $Zeile.$Spalte
        $var =  $_.$Spalte
    }
}

Keiner der Ausdrücke in der inneren Loop zeigt mir jedoch den Wert in der Spalte der entsprechenden Zeile an. Da mach ich doch was falsch! face-sad

Wie lese ich den Wert aus?

Vielen Dank für Eure Hilfe!

Content-Key: 289208

Url: https://administrator.de/contentid/289208

Printed on: April 19, 2024 at 11:04 o'clock

Mitglied: 122990
Solution 122990 Nov 24, 2015 updated at 12:25:04 (UTC)
Goto Top
$csv = Import-CSV 'C:\demo.csv' -Delimiter ";"  
$spalten = $csv | gm -MemberType NoteProperty | select -Expand Name
$csv | %{
    $zeile = $_
    $spalten | %{
        $wert = $zeile.$_
        if ($wert -eq 'XYZ'){  
            write-host "Wert gefunden"  
            $zeile
        }
    }
}
Gruß grexit
Member: Kromifan
Kromifan Nov 24, 2015 at 12:15:58 (UTC)
Goto Top
Hm, das liefert leider auch keinen Output.

Wenn ich hinter

 $zeile = $_
        echo " wir befinden uns in $Zeile"  

und bei
$spalten | %{
                $wert = $zeile.$_
                echo "bei Wert " + $Wert  

anzeigen lasse, bekomme ich in der Zeile komplett alles richtig angezeigt, $spalten enthält auch alle Spalten, nur $wert bleibt leer, egal ob ich den Eintrag in der Zeile mit einem Wert belegt finde oder nicht. Da muss noch was Anderes seinface-sad
Mitglied: 122990
122990 Nov 24, 2015 updated at 12:20:49 (UTC)
Goto Top
Hm, das liefert leider auch keinen Output.
Nope geht hier problemlos ...

Poste doch mal bitte deine Überschriften mit den "Sonderzeichen"

Eventuell musst du dann schreiben:
$wert = $zeile.($_)
Das $_ geht natürlich nur wenn du bei Get-Member mit Expand arbeitest wie in meinem Skript!
Member: Kromifan
Kromifan Nov 24, 2015 at 12:20:27 (UTC)
Goto Top
Wenn ich statt
$wert = $zeile.$_ 

einen konkreten Spaltennamen angebe wie zB:
$wert = $zeile."ID-Type"  

dann bekomme ich den korrekten Wert ausgegeben.
Mitglied: 122990
Solution 122990 Nov 24, 2015 updated at 12:27:42 (UTC)
Goto Top
Das $_ geht natürlich nur wenn du bei Get-Member mit Expand arbeitest wie in meinem Skript oben !!!
Ansonsten muss du in der Schleife der Spalten schreiben
$wert = $zeile.($_.Name)

Ist einfach nur ein Verständnisproblem deinerseits ... denke immer daran Objekte haben Eigenschaften wenn man sie nicht expandiert.
Member: Kromifan
Kromifan Nov 24, 2015 at 12:27:43 (UTC)
Goto Top
Juchuuu! Das war es, das Expand fehlte!

Danke!!!