#include Problem

  • [autoit]


    ;Include-Beispiel aus der de. Hilfe angepasst !

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

    ;;; TIME.AU3 ;;;
    MsgBox(0,"", "Die Zeit ist " & @HOUR & ":" & @MIN & ":" & @SEC)

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

    ;;; SCRIPT.AU3 ;;;
    #include <c:\aaa\TIME.AU3>
    MsgBox(0,"", "Beispiel")
    #include <c:\MeineIncludeSammlung\TIME.AU3>

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

    MsgBox(0,"", "Falsches Beispiel")

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

    ;filename >> Der Dateiname des Skriptes, das eingebunden werden soll.
    ;Der Pfad ist optional. Er muss ein String sein - er darf keine Variable sein.

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

    ;$path = "c:\aaa\TIME.AU3"
    ;#include <$path> funktioniert also nicht !!!
    Exit

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

    ; Das Ausführen von script.au3 zeigt 3 Dialogboxen an
    ; Eine mit der Zeit, eine mit 'Beispiel' und eine weitere mit der Zeit.

    [/autoit]
  • Am besten einfach mal das Hauptscript und 2 der individuellen Scripte hier als Dateianhang posten. So wirklich Sinn ergibt das bislang nicht, vielleicht versteht man dich ja wenn mal ein echtes Beispiel da ist. Vermutlich kannst du all deine Teilscripte die du hier includen willst auch zu einer Funktion zusammenfassen, die je nach Parameter beim Aufruf das erledigt was erledigt werden soll.

    Dynamisch includen geht jedenfalls nicht, wenn müsstest du also wie schon erwähnt wurde alles includen.

  • Hallo,

    erstmal danke an alle Helfer.
    Ich habe mich vielleicht nicht so gut ausgedrückt.

    So, ich habe jetzt mal eine Variante meiner Main.au3 zusammengestellt
    Macht einfach die Tabelle.csv mit den Daten ins Hauptverzeichnis.

    [autoit]


    #include <Array.au3>
    #include <file.au3>
    #include <IE.au3>

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

    ;#include <Datei1.au3>
    ;#include <Datei2.au3>

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

    Global $aCsv, $aCsvPath = 'Tabelle.csv'
    Global $sSeparatorCSV = ';'

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

    _FileReadToArray($aCsvPath, $aCsv)
    Global $aCsv2D[$aCsv[0]-1][11]
    For $i = 2 To $aCsv[0]
    $aTmp = StringSplit($aCsv[$i], $sSeparatorCSV)
    For $j = 1 To $aTmp[0]
    $aCsv2D[$i-2][$j-1] = $aTmp[$j]
    Next
    Next
    _ArrayDisplay($aCsv2D)

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

    For $i = 0 To UBound($aCsv2D,1)-1

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

    MsgBox(0,"Datei starten:",$aCsv2D[$i][2])

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

    next

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

    Die Daten kommen aus der Tabelle.csv
    Sieht so aus:

    Spoiler anzeigen


    ID;Seite;Code
    1;Petra;'Code.au3'
    2;Klaus;'Code2.au3'


    Die #include ?.au3 sind ganz normale Scripte!
    Beispiel:
    Code.au3

    [autoit]


    Msgbox(0,"Anrede","Hallo Petra")
    ;hier kommt nur der Code von Petra rein)

    [/autoit]

    Code2.au3

    [autoit]


    Msgbox(0,"Anrede","Hallo Klaus")
    ;hier kommt nur der Code von Klaus rein)

    [/autoit]

    Alle Daten wollte ich in der Tabelle.csv managen und per ID zugreifen.


    Ich hoffe die Welt hat mich nun verstanden?


    Liebe Grüße
    Ilse ;)

  • Hallo Ilse,

    MsgBoxen ausgeben kannst du doch auch anders lösen, als über includes, oder soll ich mir als ein Teil dieser (AutoIt-)Welt jetzt veräppelt vorkommen?

    mfg autoBert

  • Interessant wäre doch wo die Unterschiede zwischen den Benutzer Scripten liegen. Wenn sich das wie jetzt in Deinem Beispiel nur durch den Namen in einer msgbox unterscheidet ist es total sinnlos dafür seperate Funktionen zu nutzen.

    [autoit]


    func hello($name)
    msgbox(0,"Begrüßung","Hallo " & $name)
    if $name = "klaus" then
    ; irgendwas das nur für klaus zutrifft
    else
    ; alles was für alle anderen ausser Klaus zutrifft
    endif

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

    ; hier alles das für alle benutzer zutrifft
    endfunc

    [/autoit]

    Würde genau das Selbe tun.

    • Offizieller Beitrag
    Zitat von Ilse

    Hallo,
    :!:
    erstmal danke an alle Helfer.
    Ich habe mich vielleicht nicht so gut ausgedrückt.


    Was du vorhattest ist schon klar, aber scheinbar verstehst du nich was man dir sagen will :!:

    Entweder du compilierst die einzelnen Scripte welche du ausführen willst und rufst sie per Run auf oder
    du machst aus jeder deiner "Includescripts" eine Func und rufst diese auf.

    Zitat von Autobert

    Hallo Ilse,

    MsgBoxen ausgeben kannst du doch auch anders lösen, als über includes, oder soll ich mir als ein Teil dieser (AutoIt-)Welt jetzt veräppelt vorkommen?

    mfg autoBert

    Ich denke das sollten nur Beispiele sein, wäre ja Schwachsinn sowas in ein extra Script zu packen :D

  • Das geht nicht, weil wir schon gesagt wurde dies eine Präprozessoranweisung ist!
    Du wirst das nicht in C++,C# oder Java finden, einfach nirgends.
    Eine Lösung wäre, dass du den Code in die Tabelle schreibst und dann ausließt. Ansonsten schon im Code speichern und dann per If-Abfrage gucken.

    Nur keine Hektik - das Leben ist stressig genug

    • Offizieller Beitrag

    Hallo Ilse,
    wenn ich dein Ansinnen richtig verstanden habe soll doch nix weiter passieren, als nach Fallentscheidung verschieden Skripte abzuarbeiten.
    Du bist nun (warum auch immer) der unverrückbaren Meinung du müsstest einzelne Skripte verwenden. Dieser Denkansatz ist schlicht und einfach falsch - wirf ihn über Bord, sonst gehst du Wasser saufen. ;)
    Verwende parametrisierte Funktionen. Übergib je nach Fallentscheidung halt entsprechende Parameterinhalte. Das hat auch den Vorteil, dass dein Skript übersichtlicher wird.
    Also nicht: Main.au3 und Datei1.au3, Datei2.au3 - sondern: Main(), Datei1(param1, param2,..), Datei2(param1, param2,..).
    Versuche mal, dein Skript dahingehend zu gestalten. Wenn du nicht richtig klar kommst melde dich - aber bitte mit möglichst genauer Beschreibung. 8o

  • Guten Morgen zusammen,


    autoBert  misterspeed

    Zitat

    MsgBoxen ausgeben kannst du doch auch anders lösen....

    ...damit ich für eine Msgbox nicht diesen Aufwand betreibe versteht sich doch von selbst :thumbup:
    Wie bereits erwähnt das sind Beispiele.
    Jedes Script ist ID bezogen und ziemlich umfangreich.

    Raupi

    Zitat

    Was du vorhattest ist schon klar, aber scheinbar verstehst du nich was man dir sagen will :!:

    Entweder du compilierst die einzelnen Scripte welche du ausführen willst und rufst sie per Run auf oder
    du machst aus jeder deiner "Includescripts" eine Func und rufst diese auf.

    Auch das ist mir klar Raupi :!: . Jedes Script compilieren, testen, ändern, compilieren...
    ich finde daß das keine elegante Lösung ist. :thumbdown:

    Zitat

    oder du machst aus jeder deiner "Includescripts" eine Func und rufst diese auf.

    ich denke daß der Weg ist. :thumbup:
    Aber zurück zu meiner Frage: Ich hoffe du verstehst was ich sagen will:
    Bei 100 au3 Files wie kann man so etwas am besten managen, per ID zuordnen
    ohne den Überblick zu verlieren
    .

    Dann stelle ich die Frage so:
    Wie kann ich in meiner Tabelle die Funktionen für die jeweiligen ID's managen
    und per Loop aufrufen?
    Auch für die Bearbeitung wichtig:

    Ich sehe in der Tabelle bei ID 68 die Funktion v. Erika.au3
    Diese wird geändert, das war's!
    Das MainScript wird nicht benötigt.

    Also wie kann ich diese Komponenten MainScript, Funktionen und Tabelle
    sinnvoll verknüpfen ohne ein einziges Mainscript mit 20000 Zeilen zu haben.

    Ich bräuchte mal ein Beispiel
    Mein Mainscript

    Spoiler anzeigen


    #include <Array.au3>
    #include <file.au3>
    #include <IE.au3>


    ;#include <Datei1.au3>
    ;#include <Datei2.au3>


    Global $aCsv, $aCsvPath = 'Tabelle.csv'
    Global $sSeparatorCSV = ';'

    _FileReadToArray($aCsvPath, $aCsv)
    Global $aCsv2D[$aCsv[0]-1][11]
    For $i = 2 To $aCsv[0]
    $aTmp = StringSplit($aCsv[$i], $sSeparatorCSV)
    For $j = 1 To $aTmp[0]
    $aCsv2D[$i-2][$j-1] = $aTmp[$j]
    Next
    Next
    _ArrayDisplay($aCsv2D)

    For $i = 0 To UBound($aCsv2D,1)-1


    MsgBox(0,"Datei starten:",$aCsv2D[$i][2])

    next


    ...Tabelle mit Name der Funktion
    ...Aufruf der Funktion aus der Tabelle

    Liebe Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (10. April 2011 um 11:15)

  • also,
    ich würde das so lösen:

    für jeden User erstellst Du eine au3-Datei.
    Diese heißt so, wie in deiner Tabelle angegeben. z.B. Erika.au3
    in der au3-Datei erstellst Du jeweils 1 Funktion, die auch so heißt wie die au3-Datei.
    z.B.

    [autoit]

    Func erika()
    ...
    ...
    EndFunc

    [/autoit]


    alle au3-Dateien speicherst Du in einem Ordner. Wie auch deine main.au3.

    In der main.au3 werden !alle! au3-File's included mit:
    #include<erika.au3>
    #include<sylvia.au3>
    oder wie auch immer die heißen.
    Somit kannst Du jede Funktion, die einer einzelnen Person gehört übersichtlich in einer eigenen Datei bearbeiten,
    hast aber trotzdem alles zusammen.

    Die letzte und entscheidende Frage ist jetzt nur noch:
    wie du die Anwendung triggerst. D.h. welcher Name kommt zur Anwendung.
    Entweder über eine Eingabe in einer Input-Box oder über den angemeldeten Usernamen @Username, oder, oder, oder

    so long ilse

    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. ;)

    • Offizieller Beitrag

    Wenn du über 100 au3 Files hat kannst du diese auch aus deinem Mainscript aufrufen.

    Hab ich weiter oben schon mal geschrieben :

    Zitat von Raupi

    Ein Script aus deinem compilierten Hauptscript kannst du etwa so aufrufen:

    [autoit]

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

    [/autoit]

    MfG Raupi

  • jetzt hab ich den ganzen Thread mehrmals gelesen. Aber...

    ich verstehe immer noch nicht was das Endergebnis dieses Konstruktes machen soll?????

    liebste ilse,
    kannst Du uns etwas genauer den von Dir gedachten Ablauf erklären?
    - Werden die einzelnen au3-Dateien mal zu exe Dateien und an die User verteilt?
    - was machen die Funktionen in den einzelnen au3-Dateien?
    - Ist deine main.au3 "nur" zum managen der ganzen anderen au3-Dateien gedacht?
    - willst du eine AD-Verwaltung auf Userebene nachbauen?

    Fragen über Fragen.
    Ich denke wenn wir verstehen wofür das Verwendung finden soll, dann löst sich das sehr schnell in ein Ergebnis auf. ;)

    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. ;)

  • Kann mir nachwievor nicht vorstellen, dass deine 100 au3 Dateien alle total verschieden sind und nicht zu einer oder deutlich weniger Funktionen zusammengefasst werden können. Daher nochmals die bitte einfach mal einige dieser user au3's in ihrere original Fassung hier zur Verfügung zu stellen. Du kannst das ganze zwecks Übersicht auch in eine zip Datei packen und als Dateianhang hochladen.

    Alleine schon die Vorstellung mit 100 Teilscripten zu arbeiten... das ist doch absolut unübersichtlich.

  • autoBert  misterspeed

    Zitat
    MsgBoxen ausgeben kannst du doch auch anders lösen....

    ...damit ich für eine Msgbox nicht diesen Aufwand betreibe versteht sich doch von selbst :thumbup:
    Wie bereits erwähnt das sind Beispiele.
    Jedes Script ist ID bezogen und ziemlich umfangreich.

    Das dein Skript nicht nur MsgBoxen aufrufn soll ist mir schon klar, aber auch andere Funktionen kann man mit Parameter ansteuern.
    Du hast einen Konzeptionsfehler in deinem Projektentwurf: man kann zur Laufzeit keine Dateien includieren, mir ist auch nie ein Fall untergekommen in dem ich es benötigt hätte.

    Solange du nicht bereit bist Originalskripte oder zumindest Beispiele (an denen man die wie du meinst nötige Vorgehensweise erkennen kann) einzustellen, dreht sich der Thread hier im Kreis bzw. es wird ein grosses Rätselraten.

    Ich vote daher dafür diesen Thread nicht mehr zu supporten bis du dein Haupt- und ein paar Einzelskripte eingestellt hast,

    mfg autoBert

  • @ alle Helfer

    dank euch für alle Tipps.

    @ Autobert
    ...hatte doch mein original Script, Screenshots, Beispiel.au3's gepostet

    Zitat

    Du hast einen Konzeptionsfehler in deinem Projektentwurf

    Du hast ja Recht, meine Ansätze waren falsch, das haben mir auch BugFix und die anderen mitgeteilt.
    Manchmal denkt man in die verkehrte Richtung. :huh:
    Und wenn man dann fertig ist,
    bekommt man die Info: So ist das nicht möglich!

    ...und damit habt ihr mir geholfen. Ich hoffe ich bin mit den Funktionen
    wieder auf dem richtigen Weg.

    Also, ich schließe diesen Thread, und probiere alle eure Tipps.
    Ich bin euch dankbar, auch wenn es euch viel Nerven mit mir gekostet hat :huh:


    Liebe Grüße
    Ilse :)

  • ...hatte doch mein original Script, Screenshots, Beispiel.au3's gepostet

    Deine Beispiel.au3s bestanden aus einer Msgbox und den wirklich wichtigen Teil hast du komplett entfernt.
    Damit können wir nichts anfangen.

    Manchmal denkt man in die verkehrte Richtung.
    [...]
    Ich hoffe ich bin mit den Funktionen wieder auf dem richtigen Weg

    Und jetzt poste doch einfach mal ein paar ungekürzte au3s - das tut doch nicht weh.
    Ich hab schon wieder die Vermutung das du es wieder zu kompliziert machen willst.
    Lass mich einfach raten: Du erstellst für jede Include-Datei eine Funktion und kopierst deren Inhalt 1:1 einfach in die Funktion?
    Wenn ja - genau das wollen wir ja verhindern.
    Wir denken (wenn wir den Code endlich mal sehen würden!...) dass wir den Code massiv einkürzen können und so die Übersicht und Wartbarkeit zu verbessern.
    Aber du streubst dich ja seit 36 Posts erfolgreich gegen jede einfach Bitte doch endlich mal ein paar komplette, zu includende, Dateien zu posten.

  • Guten Morgen AspirinJunkie,

    ich poste jetzt einfach mal alles was ich bis jetzt habe, bevor ich mit weitermache.
    Bin jetzt irgendwie unsicher wie's richtig weitergeht!

    Mein Projektentwurf (gedacht...)
    Könnte ich das so machen?

    1. Das Main Script (das noch nicht fertig ist)
    das greift auf die Tabelle zu die alle Daten enthält

    [autoit]


    #include <Array.au3>
    #include <file.au3>
    #include <IE.au3>

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

    ;#include <Datei1.au3>
    ;#include <Datei2.au3>

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

    Global $aCsv, $aCsvPath = 'Tabelle.csv'
    Global $sSeparatorCSV = ';'

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

    _FileReadToArray($aCsvPath, $aCsv)
    Global $aCsv2D[$aCsv[0]-1][11]
    For $i = 2 To $aCsv[0]
    $aTmp = StringSplit($aCsv[$i], $sSeparatorCSV)
    For $j = 1 To $aTmp[0]
    $aCsv2D[$i-2][$j-1] = $aTmp[$j]
    Next
    Next
    _ArrayDisplay($aCsv2D)

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

    For $i = 0 To UBound($aCsv2D,1)-1

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

    MsgBox(0,"Wesite",$aCsv2D[$i][1])
    MsgBox(0,"Datei starten",$aCsv2D[$i][2])

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

    next

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

    2. Meine Tabelle.csv (die ich noch nicht fertig ist)
    würde ich gerne mit allen Feldnamen die benötigt werden ausbauen
    auch Passwörter, Benutzernamen (...Gedanke)

    Spoiler anzeigen


    ID;Seite;Code
    1;http://www.web.de;Petra.au3
    2;http://www.web.de;Klaus.au3
    3;http://www.gmx.de;Lisa.au3

    3. Die einzelnen Scripte die für jeden gemacht werden aber unterschiedlich sind!
    Jeder hat eine eMail Adresse, Benutzername... bei unterschiedlichen Anbietern.
    Das würde ich gerne in die Tabelle einbauen und übersichtlich verwalten.

    [autoit]


    #include <IE.au3>

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

    MsgBox(0,"Anmeldung für:","Petra",2) ; hier sollte normalerweise der Name aus der Tabelle hin!

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

    $oIE = _IECreate ("http://www.web.de/fm/") ;hier sollte normalerweise die Seite aus der Tabelle hin!

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

    $name = _IEGetObjByName($oIE,"username") ; Wenn ich in die Tabelle die Felder eintragen könnte wäre auch besser!
    $Email = _IEGetObjByName($oIE,"password")

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

    _IEPropertySet($Name, 'innerText','Petra') ; kann auch in die Tabelle
    _IEPropertySet($Email, 'innerText','Petra@web.de'); kann auch in die Tabelle

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

    MsgBox(0,"Anmeldedaten wurden eingetragen","Petra",2)
    Sleep (1000)

    [/autoit]

    Die Bearbeitung/Ablauf:

    Also, das MainScript startet, geht zur Adresse1 aus der Tabelle macht die Anmeldung, wenn fertig
    dann einen neuen Tab, geht zur Adresse 2 usw.
    aber...soweit bin ich ja leider noch nicht!

    Das Ergebnis:
    Tab1 Petra Anmeldung bei Web.de fertig
    Tab2 Klaus Anmeldung bei Web.de fertig
    Tab3 Lisa Anmeldung bei Gmx.de fertig

    Und warum das ganze?

    Spoiler anzeigen


    So jetzt kommt die Frage, darf da jeder die eMails des anderen lesen, schreiben...?
    JA, das soll so sein.

    Und wie Ihr seht, jedes Script ist unterschiedlich und
    hat andere Feldnamen u.s.w.
    Da wartet noch sehr viel Arbeit auf mich :huh:


    Liebe Grüße
    Ilse;)

  • Hi ilse.

    Dann würde ich an deiner Stelle für jeden Anbieter eine eigene Funktion machen, also

    [autoit]


    func main()
    ; hier wie du es ja bereits machst deine Daten Datei einlesen mit Username und PW
    for $i=1 to $lastuser
    ; Hier noch ein switch case oder vergleichbares, das schaut bei welchem Anbieter der User ist und dann die passende login funktion aufruft...
    next
    endfunc

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

    func loginWebDE($user,$pw)
    endfunc

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

    func loginGmxDE($user,$pw)
    endfunc

    [/autoit]

    EDIT:

    Aber sofern es dir nur um Emails abrufen geht gibt es doch auch UDF's die POP3 Abruf ermöglichen wenn ich mich nicht irre. Der Umweg über den Browser ist nicht gerade schön und auch langsamer.

    Einmal editiert, zuletzt von misterspeed (11. April 2011 um 13:09)

  • Hallo Misterspeed,

    schön daß du meldest.
    Die ganzen Variablen setzen mir wirklich schwer zu.
    Mal langsam,
    So, ....die Infos aus der Tabelle bekomme ich ja so

    [autoit]


    MsgBox(0,"Wesite",$aCsv2D[$i][1])
    MsgBox(0,"Datei starten",$aCsv2D[$i][2])

    [/autoit]

    Ich schreibe eine Funktion z.B. für Web.de
    und schon geht's wieder los: müssen da die Variablen aus der Tabelle rein
    oder muß ich alles im MainScript deklarieren?


    und diese Variablen kommen aus dem MainScript?

    [autoit]


    func loginWebDE($user,$pw) endfunc

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


    brrr....komm irgendwie total durcheinander
    :huh: ...kann gerade nicht mehr denken!!!!

    Ich habe mal meine CSV erneuert

    Spoiler anzeigen


    ID;Seite;Code;Benutzerfeld;Benutzername;Passwortfeld;Passwort
    1;http://www.web.de;Petra.au3;username;Petra;password;33221
    2;http://www.web.de;Klaus.au3;username;Klaus;password;33442

    Ilse

    Einmal editiert, zuletzt von Ilse (11. April 2011 um 13:27)