PowerShell Hashtables aus text datei erzeugen

Hallo zusammen,

wie kann ich in PowerShell ein Hashtable aus einer TXT-Datei heraus erzeugen, die pro name auch mal mehrere values beinhalten kann. Die Anzahl der values ist auch nicht fix. Wie muss solch eine TXT-Datei aussehen, und wie kriege ich das eingelesen?

Hier mal ein kleines Bsp.:

Name                           Value




----                           -----




name1                           {asfas, dfdhdf}




name2                           asd




name3                           {hztzj, sdfdg, gfjfgj}

Hi ,

ich verstehe vermutlich die Frage nicht ganz, weil so einfach kanns doch eigentlich nicht sein, aber egal, korrigiere mich einfach bei Bedarf.

Textdatei … Es drängt sich - weil die fertigen Einleseroutinen zeilenweise arbeiten, an, für jedes Key = Value Pärchen eine Zeile zu verwenden. Die einzelnen Elemente trennt man mit einem Sonderzeichen, das sicher nicht im Text vorkommt, ich habe ein „,“ gewählt, kannst auch ein #,%,&, was auch immer, nehmen.

Die Einleseroutine liest die Datei mit dem get-content kommando in ein array. Das Array wird zeilenweise abgearbeitet, jede Zeile an den Trennzeichen ($delimiter) in Tokens gesplittet (split Anweisung). Leere Zeilen werden übergangen.

Weitere notwendige Vereinbarung: der erste Token ($items[0]) enthält den Keynamen, die weiteren Tokens ($Items[1…x]) enthalten die Values. Da eine Hashtable als Value nicht nur einen simplen String, sondern auch ein Array verwalten kann, habe ich die Items[1…x] doch gleich als Array in die hashtable gestopft. Da Du ir keine Vorgaben gemacht hast, wie Du die mehrfach vorkommenden Values weiterbearbeitest, habe ich mir die Freiheit herausgenommen, das mal so zu machen. Du könntest aber - wenns für die Weiterverarbeitung sinnvoll ist - so ziemlich jeden Daten- oder Objekttypen für die Values verwenden,.

Leere Keys (Value fehlt) bekommen eine Sonderbehandlung, es wird ein leeres Array gesetzt, damit eine eventuelle Ausleseroutine nicht stolpert.

Fertig - sofern ich Deine Frage richtig verstanden habe.

Nun der Code:

$filename = "D:\Documents\Programmierung\ReadHashTable\importfile.txt"
$delimiter = ","


$lines = get-content $filename


"(Datei: $filename)"
$lines
"(" + $lines.length + " Zeilen gelesen)"

$hashtable = @{}
for($i=0; $i -lt $lines.length; $i++)
 {
 $line = $lines[$i].trim()
 if ($line.length -gt 0)
 {
 $items=$line.split($delimiter)
 if ($items.length -eq 1)
 {

 $hashtable.add($items[0],@())
 }
 else
 {

 $hashtable.add($items[0],$items[1..($items.length - 1)])
 }
 }
 }


""
"(Hash Tabelle)"
$hashtable
"(" + $hashtable.count + " Elemente)"

Und die Eingabedatei …

Key1,Value 1.1
Key2,Value 2.1,Value 2.2,Value 2.3
Key3,
Key4

Key5,Value 5.1,Value 5.2,Value 5.3,Value 5.4

Die Ausgabe schaut dann so aus:

(Hash Tabelle)

Name Value
---- -----
Key5 {Value 5.1, Value 5.2, Value 5.3, Value 5.4}
Key1 {Value 1.1}
Key4 {}
Key2 {Value 2.1, Value 2.2, Value 2.3}
Key3 {}
(5 Elemente)

Beachte dass die Values, erkennbar an den {} Klammern, Arrays sind.

Done.

Gruss Armin.