Autor Thema: Funktion zur Sortierung von Versionsnummern x.x.x - evtl. Ergänzung fhem.pl  (Gelesen 686 mal)

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4612
Hallo Rudi,

weil ich es in verschiedenen Modulen brauchte, habe ich mir eine Funktion zusammengestellt, die eine übergebene Liste von Versionsnummern, also z.B. "1.0.4 1.10.3 2.8.12 0.4.5 1.18.2 3.4.6 1.100.2" aufsteigend oder absteigend sortiert zurückgibt.

################################################################
# sort a list of version numbers, e.g. x.x.x
# parameters: "asc | desc",<list of version numbers>
################################################################
sub SMAPortal_sortVersion (@) {
  my ($sseq,@versions) = @_;

  my @sorted = map {$_->[0]}
   sort {$a->[1] cmp $b->[1]}
   map {[$_, pack "C*", split /\./]} @versions;

  @sorted = map {join ".", unpack "C*", $_}
            sort
            map {pack "C*", split /\./} @versions;
 
  if($sseq eq "desc") {
      @sorted = reverse @sorted;
  }
 
return @sorted;
}

Es würde mich freuen wenn sich diese Funktion in verallgemeinerter Form, z.b. als sub sortVersion, in der fhem.pl wiederfinden könnte.
Dann könnte ich auf eine Standardfunktion zurückgreifen und vielleicht wäre es auch für andere hilfreich die eine solche Sortieraufgabe haben.

Solltest du es befürworten, würde ich auch einen Patch für fhem.pl erstellen.

Grüße
Heiko

ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, SSChatBot, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 21249
Ich bin nicht sicher, ob solche Funktionen nach fhem.pl gehoeren.
Es tut nicht wirklich weh, hat aber wenig mit FHEM zu tun.
Wenn andere auch fuer eine Aufnahme sind, dann packe ich es aber rein.

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4612
Ja, gerne. Vielleicht aber doch besser in 99_Utils.pm ?
Da wäre es wahrscheinlich richtig aufgehoben mit dem gleichen Ergebnis.
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, SSChatBot, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline Loredo

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3660
  • ~ Challenging Innovation ~
Ich habe ähnliche Funktionen in Meta.pm bzw sind die Funktionen beteits Teil vn Perl Core “version”.


Sent from my iPhone using Tapatalk
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 22923
Wenn dann wäre ich für eine Aufnahme in 99_Utils.
Hilfreich wäre es auf jeden Fall. Aber wir sollten darauf achten das wir dann nicht 8 solcher Funktionen verteilt über mehrere Module haben  :)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://paypal.me/pools/c/8gULisr9BT
FHEM GitHub: https://github.com/fhem/
kein Support für cfg Editierer
Gefällt mir Gefällt mir x 2 Liste anzeigen

Offline Loredo

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3660
  • ~ Challenging Innovation ~
Das wollte ich damit sagen. Gerade bei sowas wäre auch ein konsistentes Verhalten sinnvoll
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4612
Also mir geht es nur darum eine Funktion zu haben die in der Lage ist ein Array aus typischen Versionsnummern, also wie oben schon beschrieben auf- oder absteigend zurück zuliefern.
@Julian, kann das die Funktion aus Meta.pm genau wie beschrieben ? Und wenn ja welche ist das ?
Ansonsten wäre ich auch für 99_Utils.pm  :)

Grüße
Heiko
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, SSChatBot, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline nils_

  • Hero Member
  • *****
  • Beiträge: 1134
was ich mich frage: wieso sollte ein array von versionsnummern so ein durcheinander beinhalten??
viele Wege in FHEM es gibt!

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4612
Weil die Quelle ein Hash ist  ;)
Ist aber auch egal, es geht um die Funktionalität die ich gern zentral hätte wenn möglich. Sonst muß ich sie immer vervielfältigen wenn ich sie brauche.
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, SSChatBot, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4612
Und stößt euch bitte nicht an dem Begriff "Versionsnummer".
Es geht einfach nur um die Sortierung von Nummerierungen deren typischer Aufbau "x.x.x.x" ist wie er z.B. auch in Inhaltsverzeichnissen, Themengebieten etc. Verwendung findet.
So eine Sub könnte verallgemeinert z.B. auch "sub sortTopicNum" heißen.
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, SSChatBot, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4612
Wenn also nichts dagegen spricht und allgemeiner Zuspruch vorhanden ist, möchte ich dich bitten Rudi, die Funktion in die 99_Utils aufzunehmen.
Da es eine allgemeine Sortier-Funktion ist und ich keine Assoziation direkt zu "Versionsnummern" herstellen möchte, habe ich sie etwas abgeändert.

##############################################
# sort an array of numbers like x.x.x
# parameters: "asc | desc",<list of numbers>
##############################################
sub sortTopicNum (@) {
  my ($sseq,@nums) = @_;

  my @sorted = map {$_->[0]}
               sort {$a->[1] cmp $b->[1]}
               map {[$_, pack "C*", split /\./]} @nums;

  @sorted = map {join ".", unpack "C*", $_}
            sort
            map {pack "C*", split /\./} @nums;
 
  if($sseq eq "desc") {
      @sorted = reverse @sorted;
  }
 
return @sorted;
}

Letztendlich wäre mir der Name egal wenn die Funktionalität passt.

Grüße,
Heiko
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, SSChatBot, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 21249
Habe die letzte Version in 99_Utils.pm eingecheckt.

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4612
Vielen Dank !  :)
ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, SSChatBot, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4612
Hallo Rudi,

bei dem commandref-Eintrag für sortTopicNum hast du noch <,> statt &lt; bzw. &gt; drin.
Führt dazu dass man den Teil nicht sieht.

    <li><b>sortTopicNum("asc"|"desc",&lt;list of numbers&gt;)</b><br>
      sort an array of numbers like x.x.x<br>
      (Forum #98578)
      </li></br>

Grüße & schönen Sonntag,
Heiko

ESXi 6.5 @NUC6i5SYH mit FHEM auf Debian 10, DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, SSChatBot, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline Loredo

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3660
  • ~ Challenging Innovation ~
@Julian, kann das die Funktion aus Meta.pm genau wie beschrieben ? Und wenn ja welche ist das ?
Ansonsten wäre ich auch für 99_Utils.pm  :)


Ich bin spät dran, wollte aber die schuldige Antwort noch liefern: Hatte mobil nicht genau genug gelesen und nein, eine Sortierfunktion gibt es in Meta.pm (noch) nicht. Ich werde aber eine brauchen, wenn es um die von dir angesprochene Historie geht. Vielleicht inkludiere ich dafür dann 99_Utils.pm :-)
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER
Gefällt mir Gefällt mir x 1 Liste anzeigen