#include Problem

  • Hallo,

    ich habe ein #include Problem: ( :( klingt wie eine Krankheit)


    Der Dateipfad kommt aus einem Array
    autoit.de/wcf/attachment/13041/

    Folgendes:
    Wenn ich im Code die au3 direkt angebe, funktioniert es

    [autoit]


    #include 'Code.au3'

    [/autoit]

    Die au3-Files möchte ich aber aus der Tabelle lesen!

    Wenn ich mir das Array anzeigen lasse

    [autoit]


    MsgBox(0,"Meine Datei",$aCode[$i][2])

    [/autoit]


    dann wird Code.au3 angezeigt
    D.h. ich kann auf das Array zugreifen und den Pfad der von include benötigt wird lesen.

    Probiere ich aber mit #include
    nun diese Datei (die natürlich vorhanden ist und im gleichen Ordner liegt...)
    mit

    #include '$aCode[$i][2]' aufzurufen, dann geht das nicht!

    obwohl $aCode[$i][2] in der Msgbox Code.au3 zeigt!

    Grüße
    Ilse ;)

    2 Mal editiert, zuletzt von Ilse (11. April 2011 um 11:40)

  • #include ist eine Präprozessordirektive.
    Also kein Bestandteil des fertigen Quellcodes sondern etwas was nur beim Kompilieren ausgeführt wird.
    Dabei wird die zu includende Datei an dieser Stelle in den Quelltext eingefügt.
    Wenn das Programm dann läuft geht das logischerweise nicht mehr.
    Bei #include kannst du also keine Elemente des Laufzeitcodes verwenden - es ist also nicht variabel.

  • @Alle

    d.h. auch wenn es nur um den Dateinamen geht,
    klappt das nicht!

    #include 'code.au3' geht

    $test = 'code.au3'

    #include $test geht nicht

    Gibt es eine andere Möglichkeit wie man
    die Dateinamen hinter #include per Code austauschen kann?

    :( Grüße Ilse

  • du meinst das so dass wenn du auf eine Button klickst das er dann zum bsp. #include<blabla.au3> gegen #include<xy.au3> austauscht

  • vielleicht ist einfach nur Dein Denkansatz falsch.

    Erklär doch mal, was Du damit erreichen möchtest ...

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Ich fass es mal kurz in Worte:

    Es gibt eine For Schleife die mir die au3 Dateinamen
    die ich includieren will, ausführt

    [autoit]


    For $i = 0 To UBound($aCode,1)-1
    #include 'MeineAu3DateinameAusDerTabelle'
    next

    [/autoit]

    Die Tabelle sieht so aus:
    autoit.de/wcf/attachment/13043/

    da sollten noch mehrere au3 Files rein!

    Ich möchte folgendes machen:
    1. Eine Seite aufrufen aus der csv Spalte 2, das geht ....
    2. Ein passendes au3 File starten Spalte 3 (das array zeigt mir den Namen an)

    das passende au3 File sollte einfach mit #include jeweils eingebunden werden!
    und genau das geht nicht!
    Die Msgbox zeigt alles korrekt, Durchläufe prima, nur #include klappt nicht!

    auch wenn ich in der Tabelle den Eintrag so habe
    <Code.au3>
    'Code.au3'
    "Code.au3"

    :( Grüße Ilse

  • Das haben wir schon verstanden.
    Schnuffel meinte wohl eher WARUM du Dateien variabel includen willst.
    Was steht denn da drin und was soll gemacht werden?
    Warum soll es nur so gehen und nicht anders?
    Nochmal: Variablen für #include-Direktiven werden nicht funktionieren.

  • @alle

    Schade daß das so nicht geht.
    Eine andere Frage:

    Wie kann ich mit einem Loop dann
    mehrere au3 Dateien die in einem Ordner sind
    nacheinander abarbeiten?

    Ich wollte die Pfade in eine csv machen...

    Habt Ihr da eine Grundidee?

    ...ich muß leider schon wieder los
    zum verrücktwerden

    melde mich später wieder

    Liebe Grüße
    ;) Ilse

  • Trotzdem steht die Frage im Raum....Wozu das ganze...

    Eine Idee hätte ich warum und würde es so versuchen zu lösen,
    Ausgangslage: 2 Rechner mit Programme/Program Files und die includeDateien passen mal beim einen mal beim anderen PC.

    [autoit]


    If @ComputerName = "PC1" then
    include blablabla
    else
    include blablablbbb
    endif

    [/autoit]

    Aber einfacher wäre es dann die "eigenen UDFs" neutral abzulegen, so das es für beide passt.

    Zitat

    c:\AutoIt\UDF\....

    Von daher warum brauchst Du das, vielleicht gibt es eine Lösung aber auf einem anderen Weg.

    Gruß Dietmar

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Hi,
    wie wär's wenn du in dein Skript einfügst:
    ..
    #include <diverse.au3>
    ..
    Dann wird also immer diverse.au3 included..
    Was aber aktuell in diverse.au3 enthalten ist, könntest du per filewrite-Anweisung(oder wie auch immer) beeinflussen..
    ..nur so 'ne Idee mit dem Nachteil, daß du ZWEI Skripts benötigst..
    Gruß
    ytwinky

    (Ich) benutze stets die aktuelle (Beta) und SciTE..

  • @ guten Morgen miteinander,

    zuerstmal merci für euren Beistand. Mußte gestern wieder los.
    Vieleicht nochmal so erklärt:

    Zitat

    1. Ich habe mehrere au3 Files in einem Ordner include.
    2. Diese Files werden mitgeliefert.

    Es soll eine Main.au3 geben die (und jetzt kommt's)
    die Daten aus einer csv Tabelle liest.

    Beispiel CSV:

    Spoiler anzeigen


    ID;Files
    1;Daten1.au3
    2;Daten2.au3
    3;Daten4.au3

    Die Main.au3 sollte einen Loop enthalten.
    Nur mal so als Beispiel zum nachvollziehen
    wenn die csv gelesen wird

    If ID="1" then Starte Daten1.au3....
    If ID="2" then Starte Daten2.au3....

    Das Warum?

    Jeder Datensatz braucht eine eigene AU3 (ziemlich umfangreich)
    Jede au3 ist also spezifisch für einen Datensatz angefertigt.

    Damit man die Übersicht in der Main.au3 nicht verliert dachte ich, daß das per include zu lösen ist.

    Was ich nicht verstehe:
    Es geht doch einfach nur um eine Befehlszeile:

    #include 'Daten.au3'
    und das 'Daten.au3' kann man nicht variabel im Loop aus der csv verwenden. Schade


    Ich hoffe ich konnte das Problem etwas besser erklären


    Liebe Grüße
    Ilse ;)

  • Genau einfach alles includieren und dann die passenden Funktionen aus den Include Dateien passend je Datensatz aufrufen.

    Gruß Dietmar

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

    • Offizieller Beitrag

    Ilse.

    Ich denke du hast den Sinn von #Include immer noch nicht verstanden.
    Das wird nicht dynamisch zur Laufzeit verwendet, sondern beim compilieren.
    Entweder du Includiertst alle benötigten Dateien oder du muß dir einen anderen Ansatz überlegen.
    Aus einem Compilierten Script kannst du auch AU3 Dateien aufrufen, was dir aber zusätzliche Arbeit verschafft,
    weil du höchstwahrscheinlich in den Funktionen auch Variablen benutzt.
    Ein Script aus deinem compilierten Hauptscript kannst du etwa so aufrufen:

    [autoit]

    Run('"' & @AutoItExe & '" /AutoIt3ExecuteScript "' & "Remote.au3" & '"')

    [/autoit]
  • ...bitte nochmal langsam

    also ich lege meine Files in meiner Main.au3 per Include
    an den Anfang
    etwa so?

    Spoiler anzeigen


    #Daten1.au3
    #Daten2.au3

    Meine Frage:
    Könnt Ihr mir ein einfaches Loop Beispiel machen...
    For $i = 1To 100
    ...das wenn ID=2 dann die Daten2.au3 startet

    Wie ich die ID aus der csv erhalte ist kein Problem

    huh wenn das klappen würde wäre prima.

    ;) Ilse

    ich glaube ich war

  • Ich persönlich denke nicht das es unumgänglich für jeden Datensatz eine spezielle au3-Datei geben muss.
    In der Regel kann man ein Skript dynamischer Programmieren so das es für alle Gültigkeit besitzt.
    Da wir die Inhalte dieser Skripte nicht kennen können wir dazu aber keine weiteren Hinweise geben.
    Ein paar Work-Arounds wurden dir ja dennoch schon vorgestellt.

    • Offizieller Beitrag
    Zitat

    Meine Frage:
    Könnt Ihr mir ein einfaches Loop Beispiel machen...
    For $i = 1To 100
    ...das wenn ID=2 dann die Daten2.au3 startet

    Könne wir nicht, da wir ja nicht wissen wie deine Includes aussehen.
    Ich vermute mal das deine Inludes ein einfaches Script enthalten und keine Funktionen enthalten.
    Lasse mich aber eines besseren belehren. :D