none
Objekte die bis zu einem String gleich sind, aus Array entfernen. RRS feed

  • Frage

  • Hallo, ich bin neu hier und komme gleich mit einer Frage die mir seit Stunden den Kopf zerbricht.

    Ich Habe ein Array mit folgenden Objekten:

    http://domain.de/tv8-int/live.m3u8?tkn=o5wiKueLdRdWy-xhbTy1Hg&tms=1515830343
    http://domain.de/tv-a/live.m3u8?tkn=gzHsZ2Q1nL5GKKUSlGOqnQ&tms=1515830355
    http://domain.de/tv-a/live.m3u8?tkn=lIGOIZLi-Amj2u9jejPXTg&tms=1515830358
    http://domain.de/tvkayseri/live.m3u8?tkn=BXvAEwD17VtmXAhX7SvjuQ&tms=1515830353
    http://domain.de/uzay-haber/live.m3u8?tkn=jggtNnfC7c9RhGUFIWfTkw&tms=1515830347
    http://domain.de/uzay-haber/live.m3u8?tkn=oOeQwPhadSqKRwSMCRcheg&tms=1515830357

    wie Ihr seht gibt es hier Elemente die bis zum String "/live..." gleich sind. Hier möchte ich das dopelte Einträge gelöscht werden, welche der beiden Einträge dabei gelöscht wird ist egal.

    Ich möchte, dass diese Liste nachher so ausschaut:

    http://domain.de/tv8-int/live.m3u8?tkn=o5wiKueLdRdWy-xhbTy1Hg&tms=1515830343
    http://domain.de/tv-a/live.m3u8?tkn=lIGOIZLi-Amj2u9jejPXTg&tms=1515830358
    http://domain.de/tvkayseri/live.m3u8?tkn=BXvAEwD17VtmXAhX7SvjuQ&tms=1515830353
    http://domain.de/uzay-haber/live.m3u8?tkn=oOeQwPhadSqKRwSMCRcheg&tms=1515830357

    Vielen Dank schon mal für eure Bemühungen

    Samstag, 13. Januar 2018 04:09

Antworten

Alle Antworten

  • Moin,

    die einfachste, wenn auch vielleicht nicht die performanteste Variante wäre, die eindeutigen Teilstrings zur Prüfung der Eindeutigkeit wegzuspeichern:

    $arr = @(<enthält die URLs>)
    $keys = @()
    $arr | foreach {
        $key = $_.Substring(0,$_.IndexOf("live.m3u8"))
        if ($keys -notcontains $key) {
            $_
            $keys += $key
        }
    }
    Ist die Ausgangsmenge groß, so kann es sich lohnen, dafür ein Hashset zu nehmen, ich habe dazu mal gebloggt: 

    http://www.it-pro-berlin.de/2017/08/powershell-wie-schnell-sind-arrays/

    Eine andere Idee wäre, die Liste zunächst zu sortieren. Damit folgen die "mehrfachen" Strings in der Menge aufeinander, und man kann so verfahren:

    $ckey = "jibt et nich"
    $arr | Sort-Object | foreach {
        $key = $_.Substring(0,$_.IndexOf("live.m3u8"))
        if ($ckey -ne $key) {
            $_
            $ckey= $key
        }
    }
    Wenn die Auswahl groß ist, kann das Sortieren aber den Performance-Vorteil des Nicht-Zwischenspeicherns wieder auffressen.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    Samstag, 13. Januar 2018 12:43
  • Hallo ynsklkn,

    das ist hier leider kein Script-Selbstbedienungsladen, wo Du nur sagen musst, was Du brauchst und bekommst es geliefert. Wir beantworten gern Fragen zu Powershell-Code, den Du geschrieben hast.

    Vielleicht liest Du nochmal die fest angehefteten Posts oben in der Liste. Dann bist Du schon mal mit den Regeln auf dem Laufenden.  ;-)

    Wenn Du selbst aktiv werden möchtest und einen guten Einstieg in Powershell brauchst, könntest Du mit einem kostenlosen Video-Kurs anfangen: Learn PowerShell: Microsoft Virtual Academy - Getting Started with Microsoft PowerShell.

    Du kannst auch mal schauen, ob Du schon fertige Scripte findest, die Du an Deiner Anforderungen anpassen kannst. z.B. hier: Powershell Gallery oder hier: Microsoft Technet Script Library.

    Wenn Du schon Grundkenntnisse hast und nur ein paar Tipps brauchst: ich würde damit beginnen die URLs bis zum String "/live" zu "extrahieren" und damit weiterzumachen. Wenn Du schon Code hast, den Du zeigen kannst, kannst Du den hier posten (als Code formatieren bitte!) und wir können versuchen, gemeinsam was Elegantes auszuknobeln. ;-)


    Best regards,

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

    Samstag, 13. Januar 2018 12:44
  • Evgenij,

    Du bist einfach viel zu nett!  ;-) :-D


    Best regards,

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

    Samstag, 13. Januar 2018 12:46
  • Vielen Dank für die ausführliche Antwort und Sorry wenn ich mich nicht an die Regeln gehalten habe. Ich habe schon so viel probiert und bin einfach nicht weitergekommen, daher habe ich mich ganz verzweifelt an euch gewendet. 

    Mein Problem war folgendes: 

    Ich kann zwar per Substring die Pfade bis auf den Bereich kürzen und die Doppelten entfernen, ich brauche aber dennoch als Ausgabe den vollen Pfad und nicht den Teilstring.

    Bin zur Zeit leider nicht daheim, werde aber sobald ich kann deinen Code Testen und Berichten. VIELEN DANK

    Liebe Grüße

    Yunus



    Yunus K. | Softwarepaketierer

    Mittwoch, 17. Januar 2018 23:50
  • Ich kann zwar per Substring die Pfade bis auf den Bereich kürzen und die Doppelten entfernen, ich brauche aber dennoch als Ausgabe den vollen Pfad und nicht den Teilstring.

    Moin ... als Softwarepaketierer sollte man sowas aber wissen.   ;-) :-D

    Du musst den Rest der Object-Properties ja nicht "wegwerfen". Du kannst z.B. mittels "calculated Properties" das Object um die Eigenschaft erweitern, die Du brauchst.

    Select-Object  <- Beispiel 4 wäre sowas


    Best regards,

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

    Donnerstag, 18. Januar 2018 00:54