Array wird nicht übergeben ?

  • Hallo,

    hier mal der Code

    [autoit]


    $sUserLog = FileOpen(@TempDir & "\XFDL_User.log", 0); öffne XFDL User Log - nur lesend
    $aXFDL_USER = FileReadToArray($sUserLog); Lese XFDL User Log ins Array
    $aUniqXFDLUser = _ArrayUnique($aXFDL_USER, Default, Default, 1)
    _ArrayDisplay($aUniqXFDLUser, "Eindeutig"); wird angezeigt und ist OK
    $aSortXFDLUser = _ArraySort($aUniqXFDLUser)
    _ArrayDisplay($aSortXFDLUser, "Sortiert"); wird nicht mehr angezeigt - WARUM ?

    [/autoit]


    Ich möchte gerne eine Liste in ein Array einlesen, auf Eindeutigkeit prüfen (geht noch) und dann sortieren (geht nicht mehr).
    Was habe ich vergessen ?

  • Hilfe lesen waers halt ...

    Das zu sortierende Array wird per ByRef uebergeben. Die Funktion selbst gibt 0 oder 1 zurück.
    Es muesste also heissen:

    [autoit]

    _ArrayDisplay($aUniqXFDLUser, "Sortiert")

    [/autoit]

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • ByRef heißt das die übergebene variable nicht für die aufgerufene funktion kopiert wird sondern mit der ursprungsvariable "verknüpft" wird
    ein beispiel:

    [autoit]


    Func test1(ByRef $var)
    $var &= " welt"
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func test2($var)
    $var &= " welt"
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    $var1 = "Hallo"
    test2($var1)
    ConsoleWrite($var1 & @CRLF)
    test1($var1)
    ConsoleWrite($var1 & @CRLF)

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Wenn eine Variable ByRef übergeben wird arbeitet man innerhalb der Funktion mit der original variable unter anderem namen, ohne ByRef wird die Variable kopiert, was bei sehr langen strings oder großen arrays lange dauern kann.

  • Ich weiß ja nicht, inwieweit du mit anderen Programmiersprachen vertraut bist, aber die Bezeichnungen ByRef (wie oben genannt: By Reference) und ByVal (By Value) stammen eher aus der BASIC-Ecke. In C z.B. wäre das ByVal sehr unüblich, da man die Variable manuell kopieren müsste... Deswegen wird dort fast ausschließlich ByRef verwendet, wobei man das da nicht unbedingt so nennen kann. Dort, im C-Slang, wird eigentlich nur von einer Pointer-Übergabe bzw. Referenz geredet.
    Daher auch die Bezeichnung By Reference, denn das "Erstellen" eines solchen Pointers bezeichnet man auch als Referenzieren.
    Man hat also eine Variable, nehmen wir mal an, eine Integer-Variable... Wenn wir jetzt eine Funktion haben, die zu unserer Variable 42 dazurechnen soll, dann übergeben wir unserer Funktion einen Pointer/eine Referenz auf die Integer-Variable. Diese Funktion dereferenziert den Pointer, und addiert zum dereferenzierten Wert 42 dazu. Somit sparen wir uns die Mühe, erste eine Kopie von der Variable anzulegen. ^^

    Ich hoffe, der kleine Exkurs ist gut verständlich. :D

    Gruß