Beiträge von AspirinJunkie

    Prinzipiell liegen alle Gutscheine in unendlichfacher Anzahl vor. Einziges Nadelöhr ist, dass in Summe nur 3 Gutscheine verwendet werden können. Egal welche Höhe und welche Gutscheinart.

    Wie du sagst muss das Ausgangsarray nur verdreifacht werden und fertig.

    In meinem Skript oben einfach dazu nur Zeile 25 ändern zu For $j = 2 To 3.

    Und schon werden auch Kombinationen gefunden wo jeder Gutschein 3x vorkommen kann.


    Wie gesagt das ist alles noch eher dahingerotzt.
    Man könnte das ganze ziemlich verschlanken wenn man eine Kombination mit Repetition implementiert.
    Mach ich bestimmt auch nochmal - da brauche ich aber bisschen den Kopf frei und ebenso bisschen Zeit.


    Ich vermute die Verwirrung kommt daher, dass ich im Array $aGutscheine in der Dimmension 3 (0 bis 4) = Gutscheinart die Zahlen 1 bis 3 angegeben habe. Dort könnte aber auch stehen: "grün, rot, blau"

    Das war jetzt nicht verwirrend.
    Mir war schon klar, dass die Art wohl etwas anderes angeben soll.
    Aus der Aufgabenstellung war aber nicht ersichtlich ob die Gutscheinanzahl jeweils variabel ist.
    Daher habe ich es gleich mit so implementiert und die Art einfach beispielhaft hierzu als Attribut missbraucht.

    Die Auflistung aller möglichen Kombinationen ist nicht notwendig.

    Äh doch - über diese Liste iterieren wir ja bei der Ermittlung, welche Kombination die beste ist.


    Was nun noch fehlt ist folgendes: Die Funktion _ArrayCombinations zieht nicht in Betracht, dass auch die gleichen Gutscheinkombinationen möglich wären:

    Doch wird in Betracht gezogen. Dies wird dadurch umgesetzt, dass Gutscheine, welche mehrmals vorliegen auch mehrmals im Array $aScheine vorkommen (bei mir habe ich ja als Anzahl für die Gutscheine die Art eingesetzt). Die anschließende Kombination darauf bringt dann auch Kombis bei welchem Gutscheine mehrmals verwendet werden.
    Gib z.B. mal als Startbetrag 250 ein und du wirst eine Lösung erhalt bei der der 100€-Gutschein 2x verwendet wird.

    Die Anzahl der Gutscheine ist hier ziemlich überschaubar.
    Daher ist es kein Problem einfach alle möglichen Gutscheinkombinationen zu ermitteln und diese einzeln durchzugehen.


    Welche Auswirkung die Art des Gutscheins hat habe ich aus deiner Erläuterung noch nicht verstanden - du wertest sie ja auch nicht in deinem Skript aus.
    Im folgenden Beispielskript habe ich die Art daher frecherweise einfach als Anzahl genommen wie oft der jeweilige Gutschein vorliegt.


    Im Grunde habe ich mal folgendes gemacht: Jeden Gutschein so oft er existiert als Einzelgutschein zum Gutscheinarray hinzugefügt.
    So dass ein Gutschein, welchen man 2x hat auch 2x im Array existiert.
    Dann habe ich von dieser Gutscheinliste alle möglichen Kombinationen (sowohl 1x, 2x, als auch 3x) erstellt.
    Das Ergebnisarray beinhaltet einfach nur die Indizes im Ausgangsarray.

    Dann muss man im Grunde nur noch diese Kombinationen durchgehen und schauen bei welcher Kombi der Rabatt am höchsten ist.


    Zugegeben: Es ist aktuell nur schnell dahingerotzt. Da kann/muss man noch deutlich im Code aufräumen.
    Alternativ könnte man auch die Kombinationserstellung auch direkt (so wie du) in den Berechnungsteil schieben aber da fehlt mir gerade die Zeit da eine clevere Kombinatorik bisschen nachdenken erfordert.
    Eventuell bringt es dich dennoch ein Stück weiter:


    Kann vieles bedeuten.
    Evtl. ist die Datei nicht xml konform.
    Oder ein falscher Dateipfad.


    Können wir halt nicht reproduzieren ohne konkretes Beispiel bei dem es scheitert.


    Ich verstehe auch nicht ganz wie er dann die richtige Zeile findet wenn es mehrere '/Data/LStatus' -> <Data><LStatus></LStatus></Data> Zeilen davon gibt.

    Das lässt sich entweder direkt über den >>XPath<< (das Konstrukt /Data/LStatus) filtern oder indem man mehrere Nodes auswählt und diese dann in einer Schleife durchläuft.

    Die Daten liegen als XML formatiert vor und sollten daher am besten auch so behandelt werden.
    Sprich: Seh ich XML lass ich Finger von RegEx.


    Beispiel:

    Im Ergebnis fehlt die erste Zeile von den Rohdaten ("Bestückung")

    Ja logisch. In deiner ersten Beispieldatei ging es mit der 3. Zeile los.
    In deinem Beispiel jetzt bereits ab der 2. Zeile.
    Das musst du natürlich entsprechend anpassen.


    Beim Schreiben ist mir aufgefallen, dass meine Lösung von oben als allgemeineres Problem gesehen werden kann - nämlich der Überführung von Dictinaries in ein Array.
    Ich habe daher für diesen Teil eine UDF gebastelt da ich dies bestimmt noch einmal gebrauchen kann.
    Damit wird das Skript bei dir auch gleich deutlich übersichtlicher (die DictionaryHelpers.au3 liegt im Anhang):

    Ja sollte - wenn Java sich halt überall wo es ausgeführt werden soll auch ordentlich in PATH eingetragen hat.


    Kleiner Tipp zu den Anführungszeichen in Strings: Es gibt zwei Zeichen für Strings in AutoIt womit man diese Dopplungen umgehen kann:

    AutoIt
    RunWait('"javaws.exe" "https://xyz.com:443/main/system/launch/client/test.jnlp"', @ScriptDir, @SW_HIDE)

    Java nistet seinen Pfad doch in der Regel in der "PATH"-Umgebungsvariable ein.

    Das heißt es sollte eigentlich auch funktionieren wenn du javaws.exe komplett ohne Pfadangabe schreibst.


    Kannst du gut von der Kommandozeile aus testen in dem du mal folgendes ausführst:

    Code
    where javaws.exe

    Ich weiß, wie oft jede der insgesamt 30 Bezeichnungen maximal vorkommt

    Wenn man diese Infos hat kann man es ziemlich simpel aber statisch umsetzen.
    Für den ganz konkreten Fall des Beispieles hier könnte es so umgesetzt werden:

    Für die Excel-Geschichten nehme ich hier einfach meine xlsxNative-UDF. Man kann aber natürlich jede andere UDF dafür nehmen.


    Spannender wird es aber wenn man die Bezeichnungen dynamisch haben möchte.
    Dann wird es etwas witziger bei der Umsetzung:

    Tja das sind halt bisschen wenig Infos. Zu wenig als dass ich dir konkret weiterhelfen könnte. Und auch den Quellcode nur im Ausschnitt per Screenshot zu Posten macht dir Sache nicht wirklich einfacher.


    Mir ist nicht klar was dieses monströse Konstrukt in deinem Quellcode darstellen soll und welche Aufgabe es hat. Und wenn ich Upload auf Amazon lese würde ich als erstes an eine API von denen denken und ganz sicher nicht an send. Aber konkrete Infos haben wir ja nicht.


    na gut - keep your secrets

    Das sieht - hm ... "bizarr" aus ...


    Ich denke wir sollten hier vielleicht noch einmal einen Schritt zurückgehen und nochmal klären was das eigentliche Endziel ist.

    Also welches Problem genau soll mit dem Skript gelöst werden?
    Ausdrücklich noch nicht überlegen WIE es gelöst werden soll - das schauen wir uns an sobald wir das Ziel definiert haben.

    Nein kann man so nicht.

    Auch der Process Explorer wird höchstwahrscheinlich die Prozesse einzeln durchgehen.


    Aber man kann sich ja eine kleine Hilfsfunktion schreiben, welche genau das erledigt:

    Neue Version habe ich hochgeladen.
    Problem war: Die Sheet-Namen sind durcheinander und müssen noch sortiert werden damit die Reihenfolge wieder stimmt.
    Ein normales _ArraySort verhaut da die Sortierung sobald Zahlen mit drin stecken.
    Daher habe ich einfach ein eigenes natural sort implementiert.


    Jetzt klappt es auch mit der Datei.
    Lass aber die Finger vom 4. Worksheet oder bearbeite es vorher - das funktioniert zwar, dauert aber ewig.
    Grund: Alleine dieses Worksheet ist 82 mb groß obwohl im Grunde gar nichts drin steht.

    Ab der 25. Zeile kommt inhaltlich nichts mehr aber die Zellen sind trotzdem in der Datei definiert.
    Wenn man alle Zeilen ab der 26. ordentlich löscht dann ist die ganze Datei auf einmal nur noch 700kb groß.
    Ähnlich ist es beim 2. Sheet mit den vielen überflüssigen Nullen.

    Ja klar es gibt ja die privaten Konversationen hier im Forum (über das Profil des jeweiligen Nutzers erreichbar) - hab dir auch gerade eine Testnachricht geschickt.

    Wenn ich relevante Daten herauslösche, ist wieder nicht gewähleistet das der Fehler bei dir auftaucht.

    Taucht der Fehler dann noch bei dir auf wenn du kritische Daten löschst?
    Wenn ja dann passt es doch.
    Das Problem hier scheint ja auch weniger an den Daten als am internen Aufbau der xlsx-Datei zu liegen.