Funktion zur Sortierung von Versionsnummern x.x.x - evtl. Ergänzung fhem.pl

Begonnen von DS_Starter, 15 März 2019, 09:47:14

Vorheriges Thema - Nächstes Thema

DS_Starter

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@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

rudolfkoenig

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.

DS_Starter

Ja, gerne. Vielleicht aber doch besser in 99_Utils.pm ?
Da wäre es wahrscheinlich richtig aufgehoben mit dem gleichen Ergebnis.
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Loredo

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

CoolTux

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://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Loredo

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

DS_Starter

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@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

nils_

was ich mich frage: wieso sollte ein array von versionsnummern so ein durcheinander beinhalten??
viele Wege in FHEM es gibt!

DS_Starter

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@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

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@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

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@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

rudolfkoenig


DS_Starter

ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

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@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Loredo

Zitat von: DS_Starter am 15 März 2019, 12:31:23
@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