mehrfach #Include ´n wirkt nicht

  • Moin moin!
    Hab ein Skript in dem ein 2D-Array deklariert wird.
    Beisp.:

    [autoit]


    Global ABC[1000][2]

    [/autoit]


    Per #include werden aus einem 2ten Skript die Werte in selbiges Array reingeschrieben.

    Beisp.:

    [autoit]


    $ABC[0][0] = 123
    $ABC[0][1] = "blablub"
    $ABC[1][0] = 999
    $ABC[1][1] = "werdasliestistdoof"
    $ABC[2][0] = 232
    $ABC[2][1] = "inhalt"

    [/autoit]

    Nun wird letztere Datei gelegentlich erweitert und ein weiteres Mal #Include ´d.
    Jedoch landen die Werte/Strings nicht im Array. :(

    Ich habe zum Test auch bereits mal ne msgbox mit eingebaut - DIE wird ausgegeben...

    Hat jemand ne Idee, warum das #Include nur 1x Vollständig passiert?

    ... wasweisichdennschon...

    2 Mal editiert, zuletzt von Chrischn (21. Oktober 2009 um 16:03)

    • Offizieller Beitrag

    Per #include werden aus einem 2ten Skript die Werte in selbiges Array reingeschrieben.


    Sorry, aber wie schribst du Werte per #Include? Ein Include dient dazu, Funktionen (Funktionssammlungen) dem aktuellen Skript zur Verfügung zu stellen.
    Übrigens: Alle Variablennamen müssen mit einem $ beginnen.

  • ohh ja.. natürlich.. ist auch mit " $ "
    .. ich kann also nur Func´s includen ???
    dann ist´s aber komisch, dass es beim ersten Aufruf immer funktioniert...
    ? ? ?

    ... wasweisichdennschon...

    • Offizieller Beitrag

    .. ich kann also nur Func´s includen ???


    Nein, du kannst natürlich (und sinnvollerweise sollst du dies auch) Konstanten dort deklarieren.
    Ich glaube ich verstehe, was du meinst: Im Include wird ein Array (Global) deklariert, welches du dann im aktuellen Skript bestückst.
    In einigen Fällen macht das auch Sinn, aber ohne dein Skript zu sehen, kann ich nicht sagen, wo der Fehler liegt. Global deklarieren im Include und Wertzuweisung im laufenden Skript ist kein Problem.

    Edit:

    Zitat

    dann ist´s aber komisch, dass es beim ersten Aufruf immer funktioniert...


    Ähm.. kann es sein, dass du die eingetragenen Werte bei einem neuen Aufruf des Skripts verwenden möchtest? DAS geht natürlich nicht! Das Array existiert nur so, wie es in deinem Include deklariert wird. Und bei jedem neuen Aufruf wird es mit diesem Status geladen.

    • Offizieller Beitrag

    Du erwartest nicht um Mitternacht herum innerhalb von 33 Minuten eine Antwort, oder!?

    Zum Thema: Bitte poste mal ein testbares Stück Code. Dein Vorhaben klingt für mich bei schnellem Lesen danach, dass du die Daten aus einer Ini-Datei oder so laden solltest. Dann kannst du sie jederzeit ändern und das Skript lädt sie am Anfang ein.

    Johannes

  • Hallo,
    der eigentliche Sinn der Includes ist es, dass man die Funktionen NICHT in das Skript schreiben muss.
    Da es unübersichtlich werden kann.
    Durch die Includes, kannst du die Funktionen auch aufrufen.
    Wenn du dir die Skripte anschaust, die du "includest", merkst du, das diese sehr lang sind.
    Stell dir mal vor, das alles wäre in deinem Skritp nur damit es funktioniert ^^
    Ziemlich viel ne? =D
    Also ist der Sinn, dass du lange Funktionen durch den Include auch nutzen kannst.
    Beispiel:
    _StringBetween
    Kannst sowas auch in dein Skript schreiben.. Jedoch wird es SEHR lang ^^

    Ich hoffe du verstehst es so ein wenig..

  • ja danke ,,, dad versteh ich wohl... aber ich kann die Ursache für mein Problem noch immer nicht finden...
    werde gleich mal nen Klotz Skript posten...

    ... wasweisichdennschon...

  • KLOTZ


    "OCRArrayLevel2.au3"

    Spoiler anzeigen
    [autoit]


    $OCR[0][0] = 194
    $OCR[0][1] = "a"
    $OCR[1][0] = 281
    $OCR[1][1] = "b"
    $OCR[2][0] = 183
    $OCR[2][1] = "c"
    $OCR[3][0] = 240
    $OCR[3][1] = "d"
    $OCR[4][0] = 220
    $OCR[4][1] = "e"
    $OCR[5][0] = 167
    $OCR[5][1] = "f"
    $OCR[6][0] = 208
    $OCR[6][1] = "g"
    $OCR[7][0] = 204
    $OCR[7][1] = "h"
    $OCR[8][0] = 96
    $OCR[8][1] = "i"
    $OCR[9][0] = 121
    $OCR[9][1] = "j"
    $OCR[10][0] = 226
    $OCR[10][1] = "k"
    $OCR[11][0] = 122
    $OCR[11][1] = "l"
    $OCR[12][0] = 263
    $OCR[12][1] = "m"
    $OCR[13][0] = 271
    $OCR[13][1] = "n"
    $OCR[14][0] = 216
    $OCR[14][1] = "o"
    $OCR[15][0] = 202
    $OCR[15][1] = "p"
    $OCR[16][0] = 237
    $OCR[16][1] = "q"
    $OCR[17][0] = 248
    $OCR[17][1] = "r"
    $OCR[18][0] = 199
    $OCR[18][1] = "s"
    $OCR[19][0] = 130
    $OCR[19][1] = "t"
    $OCR[20][0] = 190
    $OCR[20][1] = "u"

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

    "Hauptscript.au3"

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

    Global $OCR[1000][2]

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

    While 1
    Include(2)
    Sleep(2000)
    WEnd

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

    Func Include($L)
    If $L = 1 Then
    #Include <OcrArrayLevel1.au3>
    EndIf
    If $L = 2 Then
    #Include <OcrArrayLevel2.au3>
    EndIf
    _ArrayDisplay($OCR)
    EndFunc

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

    Problem: Verändere ich wärend das Script läuft die "OCRArrayLevel2.au3" , so wirkt sich das nicht auf das Script aus.( Keine Änderungen im ArrayDisplay.....

    ... wasweisichdennschon...

    2 Mal editiert, zuletzt von Chrischn (21. Oktober 2009 um 14:21)

  • Zitat

    Aber das Include wird definitif aufgerufen. Hatte zum Test noch mal ne MSGBox eingebaut...

    ja es wird immer wieder aufgerufen, aber es ist wie peethebee schon gesagt hat:
    es wird genau einmal eingebaut und zwar beim kompilieren oder beim ausführen, was für dich soviel heißen soll wie:
    dem script ist es egal ob sich die datei die du irgendwann mal included hast verändert, weil die includetet datei nur so verwendet wird, wie sie zu dem zeitpunkt war an dem du dein script kompiliert oder ausführt hast

    klingt komisch is aber so :D

    Ok - hab ne neue idee - werd mich mal mit INI- R/W beschäftigen...

    gute idee^^
    iniwrite und iniread sin nämlich 2 total easy sachen und sehr effektiv

  • Grundsätzlich (wie es schon viele andere Leute erläutert haben) werden UDF's am Anfang des Scriptes eingebunden (include).
    Auf die Funktionen und Variablen werden schließlich zu gegriffen, im gesamten Script.

    Du kennst doch bestimmt die GUIConstantsEx.au3 und was man noch alles braucht für die GUI. In diesen UDF's werden schließlich die Variablen gespeichert für $ES_Readonly, $ES_Number usw. !

    Nach dem komplimieren des Scriptes werden auch diese Funktionen und Variablen in die .exe mit eingespeichert.
    Noch mehr Informationen zu dem Befehl #include findest du schließlich in der Hilfe, vergewissere dich aber, das du die deutsche hast, aber du kannst ja auch gerne das englische ins deutsche übersetzen. :)

    Suche einfach nach #include.