Variablen einlesen

    • Offizieller Beitrag

    Sorry, aber ich muß das mal so kraß sagen: Du hast noch nicht die Grundlagen von Programmabläufen verstanden.
    Frag dich mal, was ist eine Variable (oder frag die Hilfe, Google,Wiki, etc.) und dann lies deine obige Behauptung (..führt....ad absurdum).
    Aus einem gespeicherten Wert (wie es die INI macht) kann nur das herauskommen, was du hineinschreibst.
    Wenn du schreibst:
    $_temp=$_war & "\" & $_pro & "\Tempfolder"
    kann niemals
    Wartung\Projekte\Tempfolder
    herauskommen.

    Es sei denn du schreibst das mit INIWrite, dann wird deine Variable in die entsprechenden realen Werte umgesetzt.

    Eine Variable nimmt unterschiedliche Werte entgegen und speichert sie. Aber sie kann nicht erahnen, wie und in welcher Form du Werte vor dem Speichern ändern möchtest.

    Auch hier gilt: 90 % der Fehler entstehen 60 cm vorm Monitor

  • warum klappt das dann, wenn ich im Script direkt die Variablen definiere?
    Es ist sogar recht wahrscheinlich, daß ich Programmabläufe (noch) nicht
    verstanden habe - deswegen stelle ich hier ja meine Fragen, die mir bis jetzt
    auch absolut klasse beantwortet wurden.
    Warum sich dieser Thread zu solch einem Fiasko entwickelt, ist mir schleierhaft.

    Im Script direkt definiere ich:
    $_pro="Projekte"
    $_war="Wartung"
    $_tool="Tools"
    $_brow="Browser"
    $_back="Backup"
    $_graf="Grafik"
    $_save="Sicherheit"
    $_opt="Optimierung"
    $_desk="WinDesktop"
    $_short=$_war & "\" & $_pro & "\Copy_Shortcuts"
    $_temp=$_war & "\" & $_pro & "\Tempfolder"

    ein simpler Test mit MsgBox(0, "", $_temp) ergibt Wartung\Projekte\Tempfolder

    Mit der ini klappt das nicht und das verstehe ich nicht.

  • [autoit]

    $vars = IniReadSectionNames(@ScriptDir & '\test.ini')

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

    For $i = 1 to $vars[0]
    $vars2 = IniReadSection(@ScriptDir & '\test.ini', $vars[$i])
    Next

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

    For $i = 1 to $vars2[0][0]
    MsgBox(0, '',$vars2[$i][0] & @CRLF & $vars2[$i][1])
    Next

    [/autoit]

    So er zeigt nun alles an was in der Ini steht

    Und der Inhalt meinre INI:

    Code
    [var]
    pro=Projekte
    war=Wartung
    tool=Tools
    brow=Browser
    back=Backup
    graf=Grafik
    save=Sicherheit
    opt=optimierung
    desk=WinDesktop

    Ich habe keine Probleme beim auslesen

    Einmal editiert, zuletzt von Aiden (26. Oktober 2007 um 10:48)

  • Ne das ist wahr aber anders ist das nicht möglich fürchte ich.

    man muss halt vorher festlegen welche Variablen man hat oder halt nen Array benutzen.

    Also mir fällt keine andere Möglichkeit ein. Aber ich lasse mich gerne eines besseren belehren.


    Mfg
    Aiden

    • Offizieller Beitrag

    Meine Frage, was und warum du machen willst, hast du immer noch nicht beantwortet.

    Es sollte so gehen, aber es macht in aller Regel keinen Sinn...

    [autoit]


    IniReadSection(@ScriptDir & '\test.ini', "vars")

    For $i = 1 to $vars2[0][0]
    Assign($vars2[$i][0], $vars2[$i][1], 2)
    Next

    [/autoit]

    Es sollte dem User aber niemals möglich sein, Variablen unter eigenen Bezeichnungen in das Programm laden zu lassen. Das ist ein enormes Risiko.

    peethebee

  • Zitat

    Original von peethebee
    Meine Frage, was und warum du machen willst, hast du immer noch nicht beantwortet.
    peethebee

    hm - ich weiß jetzt echt nicht was ich darauf sagen soll...
    ich definiere Variablen - das sind in aller Regel Verzeichnisstrukturen.
    Diese lese ich per #include in mein(e) Script(e) ein;
    Das Script kopiert Dateien, führt kleine Installationen und Updates durch.
    Die Verzeichnisstruktur der Sourcedaten kann sich aber ändern.

    Vorteile:
    ich definiere die Variablen einmal und nicht in jedem Script.
    bei Änderungen/Erweiterungen ändere ich nur an einer Stelle

    kleiner Nachteil und Grund dieses Threads:
    - bei Änderungen/Erweiterungen an der var.au3 muß das Script, welches den
    #include Befehl enthält, neu compiliert werden.

    Ich habe das bisher halt mit einer Batchdatei gemacht und möchte dies in
    AutoIt übertragen, weil ich da mehr Möglichkeiten sehe.

    Einmal editiert, zuletzt von Baruse (26. Oktober 2007 um 11:53)

  • ||

    Mal zu kleinen Verallgemeinerung an Baruse.

    Wenn du eine *.au3 includierst, wird sie direkt ins script eingefügt. Punkt.
    Es bedeutet also nichts anderes, als wenn du die Variablen direkt am Anfang deines Hauptscriptes geschrieben hättest.

    Jetzt verstehst du nicht wieso es nicht mit einer INI-Date funktioniert. Zweite Mal: Punkt.

    Die Antwort darauf ist glasklar:
    ES SIND ZWEI GRUNDLEGEND, UNTERSCHIEDLICHE PRINZIPIEN.
    Zwei unterschiedliche Formate bzw. Syntax. Du kannst doch mit Microsoft Word auch keine odt.Dateien lesen.

    Und grundlegend gilt auch immer:
    Wenn codeseitig was geändert wird, muss zwangsläufig compiliert werden. Das findest du in jeder Sprache vor. Es heißt zwar "AutoIT Script", aber es muss um zur Ausführung nunmal compiliert werden. Es unterscheidet sich grundlegend von einer batch-Datei.

    ||

    2 Mal editiert, zuletzt von zio82draw (26. Oktober 2007 um 12:58)

    • Offizieller Beitrag
    Zitat

    Original von zio82draw
    Und grundlegend gilt auch immer:
    Wenn codeseitig was geändert wird, muss zwangsläufig compiliert werden. Das findest du in jeder Sprache vor. Es heißt zwar "AutoIT Script", aber es muss um zur Ausführung nunmal compiliert werden. Es unterscheidet sich grundlegend von einer batch-Datei.

    Hi,

    das ist leider nicht richtig. Du kannst auch eine au3 Datei ausführen ohne sie zu kompilieren.

    So long,

    Mega

  • Zitat

    das ist leider nicht richtig. Du kannst auch eine au3 Datei ausführen ohne sie zu kompilieren.

    Das ist wiederum nicht richtig. Wenn du auf die Methode mittels des AutoITwrapper ansprichst, würde ich in den Raum werfen, dass hier auch eine Datei kompiliert wird. Schließlich wird autoit3.exe hierfür genutzt.

    Oder du meinst etwas ganz anderes, dann belehr mich.

    Einmal editiert, zuletzt von zio82draw (26. Oktober 2007 um 13:52)

    • Offizieller Beitrag

    Mal grundsätzlich: Im Prinzip kompiliert AutoIt nie. Es wird immer der Quelltext von der AutoIt3.exe interpretiert - in einer Exe-Datei sind eben nur AutoIt3.exe und der Quelltext zusammengepackt (was nach außen aussieht wie eine echte Kompilierung, die es aber wie gesagt nicht ist).

    Man kann also die AutoIt3.exe nehmen und ihr immer den aktuellen Quelltext übergeben.

    peethebee

  • ||

    @ peethebee

    Ok, dann hab ich das falsch interpretiert. Macht aber auch Sinn, sonst wären ausführbare Scripte auch nicht auf anderen System ohne AutoIT lauffähig. Darauf hätte man auch allein drauf kommen können. (Selbst-Peitsch).

    ||

  • Du könnetes alternative die Dateien suchen und die dann kopieren lassen. Das dürfte leichter sein als mit deinen Variablen Variablennamen.

  • ich werde das jetzt ganz anders lösen;
    im Prinzip ändert sich meist nur die Route und die kann ich grundsätzlich
    ja abfragen.

    Ich denke wahrscheinlich noch zu sehr in Batch ;)

    Wenn ein Pfad hinzukommt, compiliere ich halt neu.

    VG und vielen Dank an Alle!
    Jörg