Variablen einlesen

  • Hallo zusammen,

    bis jetzt habe ich Variablen in einer Datei "Var.au3", die ich mit #include fest
    einbinde;
    wenn nun eine Variable hinzukommt, dann muß ich ja jedesmal neu compilieren;
    welche Möglichkeit bietet mir AutoIt bei diesem Problem(chen)?
    Habe schon iniread und fileread probiert, klappt aber leider net.

    VG
    Jörg

  • hm - nur so einfach isses wohl nicht:

    IniReadSection("var.ini", "var")

    wobei die var.ini so aussieht:

    [var]
    $_save="Sicherheit"
    $_opt="Optimierung"

    die Hilfe sagt dazu:
    Gibt ein 2-dimensionales Array zurück, in dem element[n][0] der Schlüssel und element[n][1] der Wert ist.

    Was um alles in der Welt ist nun ein Array und wie gehe ich damit um?

    Gibt's nicht was einfaches wie #include, nur soll es halt jedesmal eingelesen werden?

    VG
    Jörg

    • Offizieller Beitrag

    Hallo

    Hilfe hilft. Beispiel in der AutoIt3 Hilfe zu IniReadSection:

    Spoiler anzeigen
    [autoit]

    $var = IniReadSection("C:\Temp\myfile.ini", "section2")
    If @error Then
    MsgBox(4096, "", "Error occurred, probably no INI file.")
    Else
    For $i = 1 To $var[0][0]
    MsgBox(4096, "", "Key: " & $var[$i][0] & @CRLF & "Value: " & $var[$i][1])
    Next
    EndIf

    [/autoit]

    Mfg Spider

    • Offizieller Beitrag
    Zitat

    Was um alles in der Welt ist nun ein Array und wie gehe ich damit um?


    Da du es nicht weißt, ist es korrekt, die Frage zu stellen - aaaber: stelle sie z.B. im Tutorial,Wiki, Google damit du erst mal die Basics weißt.
    Programmspezifische Fragen klären wir gern.

    Aber da ich am Schreiben bin ;) mal ganz kurz:
    Ein Array ist vergleichbar mit einer Tabelle.
    Das Array, welches von INIReadSection() zurückgegeben wird wäre dann eine Tabelle mit zwei Spalten.
    Arrays werden über Index angesprochen, das erste Element hat immer Index 0.
    Die Spalte 0 enthält dann den Schlüssel und die Spalte 1 den Wert.
    Also:
    $ArrayFromINI[0][0] = Anzahl der Einträge
    $ArrayFromINI[1][0] = Schlüssel1
    $ArrayFromINI[1][1] = Wert1
    $ArrayFromINI[2][0] = Schlüssel2
    $ArrayFromINI[2][1] = Wert2
    usw.

    • Offizieller Beitrag

    Hallo

    Ich wusste doch das BugFix, The King Of Array, nicht wieder stehen kann ;)

    Baruse: Ich hab dir das bsp mal etwas Kommentiert, ich hoffe das hilft ebenfalls:

    Spoiler anzeigen
    [autoit]

    ;Liest aus C:\Temp\myfile.ini alle werte von section2 aus.
    $var = IniReadSection("C:\Temp\myfile.ini", "section2")
    If @error Then ;Wenn es ein error gibt (z.B. die datei nicht existiert) dann gibt es eine Error Messagebox
    MsgBox(4096, "", "Error occurred, probably no INI file.")
    Else;Else, also ansonsten wenn es kein Error gibt...
    For $i = 1 To $var[0][0];... Zähle von 1 zu $var[0][0] (Die anzahl der Werte in der Sektion)
    MsgBox(4096, "", "Key: " & $var[$i][0] & @CRLF & "Value: " & $var[$i][1]);Und hier gibt er in einer MsgBox den Key ($var[$i][0]) und den dazugehörigen Wert ($var[$i][1]) aus.
    Next
    EndIf

    [/autoit]

    Mfg Spider

  • na gut, aber für meinen Zweck ist das doch gar nicht brauchbar:
    ich definiere einerseits Variablen, die (für mich) einen logischen Namen haben
    (z.B. $_save für "Sicherheit")
    Mit diesen Arrays muß ich nun aber die Zeilennummer abfragen:
    $var[1][1]
    das führt aber den Sinn einer Variable ad absurdum - was nun, wenn ich zwischen zwei Variablen eine weitere einfüge?
    Dann stimmt gar nix mehr;
    ich spiel das mal weiter:
    [var]
    $_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"

    $var[11][1] ergibt nun den für mich nicht brauchbaren String
    $_war & "\" & $_pro & "\Tempfolder"

    Arbeite ich hingegen mit #include, dann kommt hier richtig
    Wartung\Projekte\Tempfolder heraus.

    Einmal editiert, zuletzt von Baruse (26. Oktober 2007 um 00:44)

  • hm peethebee - was willst Du mir damit sagen?
    ich hab ja nichts gegen kurze und prägnante Aussagen, aber einfach so
    'ne Funktion hier reinzuwerfen...

    anscheinend gibt's nicht das was ich suche, oder ich drücke mich zu undeutlich aus...

    VG
    Jörg

    • Offizieller Beitrag

    Hi!

    Naja, es sollte dich dazu bringen, den Befehl in der Hilfe nachzuschlagen - hat leider nicht geklappt...

    Spoiler anzeigen

    Das tut schon das, was du zu wollen glaubst. Aber vielleicht schilderst du mal genau, was du erreichen willst (ohne den Weg), in aller Regel geht es schöner.

    peethebee

  • Ein Array ist eine Variable in der mehrere variablen stehen können.

    du kannst da verschiedene sachen(andere variablen,texte,usw.) reinschmeißen.

    Bsp:

    [autoit]

    $array = ("var1","var2","var3")

    [/autoit]


    rauslesen kannst du die variablen in dem du die nummer in [] mit angibst.

    zb:

    [autoit]

    Msgbox(0,"mein array",$array[2])

    [/autoit]


    in der Msgbox würde dann "var2" stehen.


    /edit ups hab da wohl so einiges überlesen und sollte wohl noch einiges lesen;)

    2 Mal editiert, zuletzt von Vollnoob (26. Oktober 2007 um 09:26)

  • das wird glaub ich uferlos;
    peethebee : ich schlage natürlich die Hilfe nach, kann aber "Assign" nicht als
    meinen Problemlöser erkennen;
    @Vollnoob: auch bei "Dim" kann ich nicht erkennen, wie ich es für mein
    "Problem" einsetzen sollte;

    also nochmal:
    ich habe eine Datei "var.au3" mit folgendem Inhalt:
    $_pro="Projekte"
    $_war="Wartung"
    $_tool="Tools"
    $_brow="Browser"

    Diese wird per #include "var.au3"
    integriert;
    wenn sich nun am Inhalt dieser "var.au3" etwas ändert, dann muß ich neu
    compilieren;
    wie kann ich das verhindern?
    In einer Batchdatei sage ich an der Stelle einfach: call var.bat - und gut.

    VG
    Jörg

  • die ini sollte so aussehen:

    [autoit]

    [vars]
    pro=Projekte
    war=Wartung
    tool=Tools
    brow=Browser

    [/autoit]

    abrufen tust du s mit


    [autoit]

    $_pro= iniread("meine.ini","vars","pro","")

    [/autoit]
  • die ini musst du nicht compilieren ?(

    /edit und schlag mal n anderen Ton an, wenn du schon nicht lesen willst

    Einmal editiert, zuletzt von Vollnoob (26. Oktober 2007 um 09:59)

  • brauchst Dich ja nicht mit diesem Thread zu beschäftigen, wenn Dir mein
    Ton nicht passt.
    Ich hab auch mit keiner Silbe erwähnt, eine ini zu compilieren.
    Es geht um ein Script, welches bei Deiner "Lösung" neben dem Neucompilieren
    zusätzlich bei jeder Änderung der ini auch noch mit Daten versorgt werden
    müsste.