• Moin,

    Mithilfe der UDF lassen sich Datensätze in einen String verpacken und anschließend wieder entpacken. (klingt jetzt nicht so überragend, kann aber vieles vereinfachen)

    Es kann ein Container (in dem Fall ein einfaches Array) erzeugt werden.
    Diesem Container können Datensätze, bestehend aus Daten|Index|Beschreibung, hinzugefügt werden
    Anschließend kann man den Container in einen String verwandeln und diesen z.B. als Datei speichern.
    Die Daten dürfen nicht vom Typ DllStruct sein, da diese nicht vollständig rekonstruierbar sind. (Man kann zwar die Größe in Erfahrung bringen, aber nicht den Aufbau).

    Anwendungsbeispiele:
    Ein Skript enthält einige Bilder, Sounds, usw. Man kann all diese Inhalte in einen Container stecken und z.B. mit 'Pic01' oder 'Snd01' durchnummerieren. In der Beschreibung steht dann ggf eine spezifischere Definition. Den damit erzeugten String kann man einfach in eine Datei schreiben, und die Daten dem Skript somit austauschbar zur Verfügung stellen.
    Für kleine Spiele kann man damit auch Savegames in einer Datei speichern (ein Savegame besteht aus einer Vielzahl verschiedener Daten die man am besten in einer einzigen Datei verstaut).
    uvm.

    Selbstverständlich kann man für alles was die UDF bietet auch die Ini-Funktionen benutzen. Als Index dient hier der Key, und via Key lässt sich der Datensatz ermitteln der z.B. ein B64 Bild enthalten kann.
    Ich habe darauf geachtet, dass der Container unabhängig vom Inhalt (bei Strings) funktionieren sollte (dafür gibts aber keine Garantie), sodass z.B. eine B64 Umrechnung nicht mehr notwendig ist.

    lg
    M

  • Hallo Mars,

    die Idee finde ich sehr gut. Habe mir das Archiv mal gedownloadet und wollte die "Test.au3" ausführen. Nun kommen leider gleich einige Fehler!

    Konsolenausgabe:

    Spoiler anzeigen
    [autoit]


    >"C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\Users\Sven\Downloads\Container\Test.au3" /UserParams
    +>16:54:35 Starting AutoIt3Wrapper v.2.1.2.9 Environment(Language:0407 Keyboard:00000407 OS:WIN_7/Service Pack 1 CPU:X64 OS:X64)
    >Running AU3Check (1.54.22.0) from:C:\Program Files (x86)\AutoIt3
    C:\Users\Sven\Downloads\Container\DecToBin.au3(28,13) : ERROR: syntax error (illegal character)
    Return $l<9?
    ~~~~~~~~~~~^
    C:\Users\Sven\Downloads\Container\DecToBin.au3(28,81) : ERROR: syntax error (illegal character)
    Return $l<9?$c_[$s]:$l<17?$c_[StringTrimRight($s,8)]*256+$c_[StringRight($s,8)]:
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\Sven\Downloads\Container\DecToBin.au3(28,191) : ERROR: syntax error (illegal character)
    Return $l<9?$c_[$s]:$l<17?$c_[StringTrimRight($s,8)]*256+$c_[StringRight($s,8)]:$l<25?$c_[StringTrimRight($s,16)]*65536+$c_[StringRight(StringTrimRight($s,8),8)]*256+ $c_[StringRight($s,8)]:
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\Sven\Downloads\Container\DecToBin.au3(36,18) : ERROR: syntax error (illegal character)
    Return $d<256?
    ~~~~~~~~~~~~~~~~~^
    C:\Users\Sven\Downloads\Container\DecToBin.au3(36,67) : ERROR: syntax error (illegal character)
    Return $d<256?$a_[$d]:$d<65536?$a_[$d/256]&$b_[BitAND($d,255)]:
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\Sven\Downloads\Container\DecToBin.au3(36,137) : ERROR: syntax error (illegal character)
    Return $d<256?$a_[$d]:$d<65536?$a_[$d/256]&$b_[BitAND($d,255)]:$d<16777216?$a_[$d/65536]&$b_[BitAND($d/256,255)]&$b_[BitAND($d,255)]:
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\Sven\Downloads\Container\Container.au3(90,17) : ERROR: syntax error
    Local $aData = [
    ~~~~~~~~~~~~~~~^
    C:\Users\Sven\Downloads\Container\Container.au3(90,30) : ERROR: $var2 already declared as parameter.
    Local $aData = [$var1, $var2,
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\Sven\Downloads\Container\Container.au3(90,37) : ERROR: $var3 already declared as parameter.
    Local $aData = [$var1, $var2, $var3,
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\Sven\Downloads\Container\Container.au3(90,44) : ERROR: $var4 already declared as parameter.
    Local $aData = [$var1, $var2, $var3, $var4,
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\Sven\Downloads\Container\Container.au3(90,51) : ERROR: $var5 already declared as parameter.
    Local $aData = [$var1, $var2, $var3, $var4, $var5,
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\Sven\Downloads\Container\Container.au3(90,58) : ERROR: syntax error
    Local $aData = [$var1, $var2, $var3, $var4, $var5, $var6]
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\Sven\Downloads\Container\Container.au3(23,60) : ERROR: __Container_StringToBin(): undefined function.
    Local $sPop = __Container_StringToBin(StringPop($sFile, 3))
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\Sven\Downloads\Container\Container.au3(42,61) : ERROR: __Container_MaxLen(): undefined function.
    Local $iBit_Data = Int(Log(__Container_MaxLen($aCon, 'Data')
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\Sven\Downloads\Container\Test.au3 - 14 error(s), 0 warning(s)
    !>16:54:35 AU3Check ended. Press F4 to jump to next error.rc:2
    >Exit code: 2 Time: 0.677

    [/autoit]


    DecToBin.au3:

    Spoiler anzeigen
    [autoit]


    ; <Func>--------------------------------------------------|
    ; Wandelt eine Dualzahl in eine Dezimalzahl um |
    ; --------------------------------------------------------|
    Func _BinToDec($s)
    Local $l = StringLen($s)
    Return $l<9?$c_[$s]:$l<17?$c_[StringTrimRight($s,8)]*256+$c_[StringRight($s,8)]:$l<25?$c_[StringTrimRight($s,16)]*65536+$c_[StringRight(StringTrimRight($s,8),8)]*256+ $c_[StringRight($s,8)]:BitShift($c_[StringTrimRight($s,24)],-24)+$c_[StringRight(StringTrimRight($s,16),8)]*65536+$c_[StringRight(StringTrimRight($s,8),8)]*256+$c_[StringRight($s,8)]
    EndFunc

    [/autoit]


    Ich nutze Version 3.3.8.1 und habe noch keine genauere Fehleranalyse durchgeführt. Vielleicht fällt dir auf Anhieb was ein, ansonsten würde ich mich mal durchforsten ;) .

    Vielen Dank für etwaige Unterstützung (Ideen, Verbesserungsvorschläge, Kritik und Zustimmung).
    Einen angenehmen Tag noch!

    UserIsGrateful 【ツ】

  • Ich nutze die Stable 3.3.12.0.

    Problem 1: Ternärer Operator

    [autoit]

    ; Alt
    If [Ausdruck1] Then
    $a = [Ausdruck2]
    Else
    $a = [Ausdruck3]
    EndIf
    ; Neu
    $a = [Ausdruck1] ? [Ausdruck2] : [Ausdruck3]

    [/autoit]


    Problem 2: Implizite Arraydeklaration

    [autoit]

    ; Alt
    Local $a[3] = [1, 2, 3]
    ; Neu
    Local $a = [1, 2, 3]

    [/autoit]


    lg
    M

  • Hallo Mars,

    also liegt es tatsächlich an der AutoIt Version. Ich habe angenommen, dass die Short-Hand-Schreibweise (dein ternärer Op.), unterstützt / erkannt wird. Das Problem 2 deutet dann auf ein Folgefehler hin. Bzw. liegt dies dann auch an der Version. Da muss ich anscheinend doch mal umstellen.

    Hmm, bisher ging es immer auch so ;) , aber man sollte ja aktuell bleiben. Gut, dann weiß ich was zu tun ist.
    Übrigens: gute Arbeit / gute Idee!

    Vielen Dank für etwaige Unterstützung (Ideen, Verbesserungsvorschläge, Kritik und Zustimmung).
    Einen angenehmen Tag noch!

    UserIsGrateful 【ツ】

  • Das mit dem aktuell bleiben ist zurzeit so ne Sache. Viele User wollen nicht updaten, da einige Funktionen oder Konstanten jetzt andere Namen haben. Dadurch werden die meisten "großen" Skripte instabil oder funktionieren garnicht mehr. Ich habe mir aber die Mühe gemacht und etliche Male die blöde (aber richtigere) Bitmapstruct ersetzt, oder die unnötige Umbenennung der GDI+ Dllvariable berücksichtigt usw usw.
    Ich mache niemandem einen Vorwurf, allerdings werde ich immer (halbwegs) aktuell bleiben (meistens kompatibel mit der letzten "Stable").

  • Hallo Mars again>,

    ja da hast du recht, danke für die Infos. An sich ist es auch kein Probl. die aktuelle "stable" sowie eine ältere Version "portable like" zu nutzen. Auf Arbeit habe ich diese Variante (sprich 2 Verisonen) so und es geht recht gut. Zu Hause dachte ich mir, dass ich nicht aktueller sein muss, aber dies ist natürlich abwägenswert. Wie auch immer, bis zum nächste Mal. Danke.

    Vielen Dank für etwaige Unterstützung (Ideen, Verbesserungsvorschläge, Kritik und Zustimmung).
    Einen angenehmen Tag noch!

    UserIsGrateful 【ツ】