none
Von einem Wort/Zahl zu einem anderen Wort/Zahl zählen

    Frage

  • Hallo zusammen,

    ich hätte da mal eine Frage und hoffe das mir da jemand weiterhelfen kann. In PowerShell kann man mit dem "Measure-Object" zählen. Das ist ja auch eine ganz vernünftige Sache, aber leider kann ich das "Measure-Object" bisher nicht so einsetzen, dass ich damit zufrieden bin.

    Folgendes möchte ich gerne in der PowerShell realisieren: Es soll von einer bestimmten Zeile, welche z.B das Wort "START" enthält, angefangen werden zu zählen. Dies soll solange geschehen bis das Skript wieder auf das Wort "START" trifft und dann nur bis zu dem den Eintrag davor zählen. Nach dem zweiten "START" soll wieder bis zum nächsten "START" gezählt werden. Ist dies in der PowerShell möglich?

    Hier noch zum besseren Verständnis, wie ich mir das Ganze vorstelle:

    |START|

    |Test1|

    |Test2|

    |Test3|

    |START|

    |Test4|

    |Test5|

    |START|

    Das oberste "START" enthält also insgesamt 4 Einträge (START - Test 3) und das zweite "START" wiederum nur 3 Einträge (START - Test5).

    Ich danke euch schonmal!

    Freitag, 12. Mai 2017 04:59

Antworten

  • Ich glaube, eine recht elegante Lösung wäre diese:

    $lines = "START","Test1","Test2","Test3","START","Test4","Test5","START"
    
    $GruppenCounter = 0
    $Ausgabe = @()
    foreach($line in $lines)
    {
        $obj = "" | select Zeile, Gruppe
        
        if($Line -match "Start"){$GruppenCounter++}
        
        $obj.Zeile = $line
        $obj.Gruppe = $GruppenCounter
        $Ausgabe += $obj
    }
    
    $Ausgabe | group Gruppe

    Die einzelnen Zeilen werden in einem Objekt gespeichert, das gleichzeitig auch eine GruppenID enthält. Diese GruppenID wird hochgezählt, wenn das Wort Start gefunden wird.

    Am Ende hast du die Zählung der Elemente in der Gruppe und kannst gleichzeitig auch auf die einzelnen Elemente zugreifen.

    Viele Grüße

    Christoph

    • Bearbeitet hpotsirhc Freitag, 12. Mai 2017 06:35
    • Als Antwort markiert Dr. Druide Freitag, 12. Mai 2017 07:13
    Freitag, 12. Mai 2017 06:33

Alle Antworten

  • Was hast Du denn selbst schon probiert - bzw. wie weit bist Du denn gekommen? Zeig doch mal Deinen Code, dann können wir bestimmt zusammen etwas verbessern.

    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Freitag, 12. Mai 2017 06:04
  • Da das Objekt immer alles zählt musst du die Textdatei selber per Schleife in die Bereiche trennen und das Teilergebnis an das Objekt weitergeben.
    Freitag, 12. Mai 2017 06:17
  • Ich glaube, eine recht elegante Lösung wäre diese:

    $lines = "START","Test1","Test2","Test3","START","Test4","Test5","START"
    
    $GruppenCounter = 0
    $Ausgabe = @()
    foreach($line in $lines)
    {
        $obj = "" | select Zeile, Gruppe
        
        if($Line -match "Start"){$GruppenCounter++}
        
        $obj.Zeile = $line
        $obj.Gruppe = $GruppenCounter
        $Ausgabe += $obj
    }
    
    $Ausgabe | group Gruppe

    Die einzelnen Zeilen werden in einem Objekt gespeichert, das gleichzeitig auch eine GruppenID enthält. Diese GruppenID wird hochgezählt, wenn das Wort Start gefunden wird.

    Am Ende hast du die Zählung der Elemente in der Gruppe und kannst gleichzeitig auch auf die einzelnen Elemente zugreifen.

    Viele Grüße

    Christoph

    • Bearbeitet hpotsirhc Freitag, 12. Mai 2017 06:35
    • Als Antwort markiert Dr. Druide Freitag, 12. Mai 2017 07:13
    Freitag, 12. Mai 2017 06:33
  • Vielen, vielen Dank Christoph, genau diesen Denkanstoß habe ich benötigt. Funktioniert genauso wie ich das haben möchte und ich kann das nun weiterverarbeiten.

    Als PowerShell Neuling ist man manchmal doch noch ein bisschen aufgeschmissen, obwohls eigentlich garnicht so schwer ist... .


    • Bearbeitet Dr. Druide Freitag, 12. Mai 2017 07:25
    Freitag, 12. Mai 2017 07:15