ini auslesen

  • Hallo,

    ich habe, das Problem, das ich nur Werte aus der ini lesen kann, welche mit einer Zahl beginnen.

    ist vorne ein Buchstabe, dann geht es nicht. Und es kommt meine Fehlermeldung "Wert nicht gefunden"

    funktioniert nicht...
    [LayerName]
    GUID = "Firefox"

    funktioniert..
    [LayerName]
    GUID = "123Firefox"

    Komisch ist, das der Fehler nur auftritt, wenn ich den Wert mit if abfrage.

    Muss ich irgend was dafür includen?

    Hir mal ein Auszug vom Script...

    Code
    $input = IniRead($IniNameNeu,"LayerName","GUID1", "Schlüssel nicht gefunden")
    If $input = 0 Then
        MsgBox(4096,"    GUID1","Wert nicht gefunden", $input)
    Else
    
    
    ; zum testen	
    Run("Notepad.exe", "", @SW_MAXIMIZE)
    EndIf

    Ist bestimmt ein Fehler im Code?!

    Einmal editiert, zuletzt von thunder-man (13. November 2006 um 16:11)

  • Wenn der Schlüssel "GUID" heißt dann solltest du ihn auch so ansprechen - und nicht als "GUID1"

    Also

    [autoit]

    $input = IniRead($IniNameNeu,"LayerName","GUID", "Schlüssel nicht gefunden")

    [/autoit]

    Außerdem ist die Zeile "If $input = 0 Then" eigentlich überflüssig denn $input wird nie 0 - es sei denn es wird in der Ini als Wert angegeben.
    Wenn der Wert nicht existiert bzw. auf die ini nicht zugegriffen werden kann erhält $input als Wert den String "Schlüssel nicht gefunden".
    Du solltest deine Fallunterscheidung da also eher auf diesen Fall hin abstimmen.

  • Oh, habe ich gar nicht gesehen, das in meinem Beispiel GUID steht, habe wohl falsch kopiert.

    Ich habe in der ini GUID bis GUID10

    Zitat

    Wenn der Wert nicht existiert bzw. auf die ini nicht zugegriffen werden kann erhält $input als Wert den String "Schlüssel nicht gefunden".

    kommt nur wenn ich es ohne if habe.

    Mit If kommt immer die Meldung
    "Wert nicht gefunden"

    (Ich vermutete, eines ist wenn der Schlüssel nicht gefunden wird und das andere, wenn der Wert nicht gefunden wird..)

    Aber ich denke, 0 ist bei einen Fehler und 1 bei alles OK, oder?

    Was hat das denn in meinem Beispiel auf sich, das ich nur keinen Fehler bekomme, wenn der Wert von GUID1 mit einer Zahl beginnt, (GUID1 = "123Firefox")

    wenn der Wert mit einen Buchstaben beginnt aber doch? (GUID1 = "Firefox")

    Deshalb fragte ich nach dem include.

    Habe noch nicht gesucht, gibt es eine Quelle, aus der man ersehen kann, was man für welchen Zweck includen muss?

  • Nun das Problem ist das du mit der Zeile "If $input = 0 Then" einen String mit einer Zahl vergleichen willst.
    Deswegen formt AutoIt den String intern in eine Zahl um.
    Das läuft intern so das alle Zahlen am Anfang des Textest übernommen werden und als Zahl zurückgegeben.
    Im Falle von "123FireFox" würde bei dieser Umwandlung 123 herauskommen.
    Das kann AutoIt dann mit einer Zahl vergleichen.
    Ist am Anfang keine Zahl vorhanden wird 0 zurückgeben.
    Hier sieht es nun so aus das $input nun den Wert "Schlüssel nicht gefunden" hat und dann, da du ihn mit einer Zahl vergleichst und nicht mit einem String intern in eine Zahl umgewandelt wird.
    Und da kommt 0 dabei heraus - deswegen ist deine If-Bedingung in diesem Fall erfüllt.

    Du musst also deine If-Anweisung auf den Fall umstellen:

    [autoit]

    If $input = "Schlüssel nicht gefunden" Then

    [/autoit]

    Auch verstehe ich nicht warum du in der msgbox

    [autoit]

    MsgBox(4096," GUID1","Wert nicht gefunden", $input)

    [/autoit]

    $input als TimeOut-Wert angibst? - zumal der laut deiner Anweisung in dem Fall so oder so auf 0 festgesetzt ist.

    Includen musst du lediglich wenn du eine Funktion brauchst die in einer zu includierenden Datei steckt - nicht mehr und nicht weniger.

    Einmal editiert, zuletzt von AspirinJunkie (13. November 2006 um 17:17)

  • Hatte es gerade mal umgestellt, bleibt aber gleich.

    Code
    If IniRead($IniNameNeu,"LayerName","GUID1", "Schlüssel nicht gefunden") = 1 Then 
    	Run("Notepad.exe", "", @SW_MAXIMIZE)
    Else	
    	MsgBox(4096,"    GUID1","Wert nicht gefunden", )
    EndIf
  • Hör doch mal auf dauernd Strings mit Zahlen vergleichen zu wollen.
    Ob 0 als Fehlerrückgabe dient und 1 gleichbedeutend mit erfolgreich ist hängt einzig von der Funktion ab - hier ist es nicht so.

    So wie du es hingeschrieben hast kommt in jedem Fall die Msgbox weil "Schlüssel nicht gefunden" eben nie 1 wird.

    wenn dann sollte es eher so funktionieren:

    [autoit]

    $input = IniRead($IniNameNeu,"LayerName","GUID1", "Schlüssel nicht gefunden")

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

    If $input = "Schlüssel nicht gefunden" Then
    MsgBox(4096," GUID1","Wert nicht gefunden")
    Else
    Run("Notepad.exe", "", @SW_MAXIMIZE)
    EndIf

    [/autoit]
  • Habe es verstanden, da "Schlüssel nicht gefunden" schon die Fehlermeldung ist, also 0 muss ich die Fehlermeldung/String "Schlüssel nicht gefunden" an sich abfragen.

    Nun klappt es...

    Nur ist aber das Resultat, das wenn in der ini steht
    GUID1 = ohne " " dann 1 übergeben wird
    Auch wenn der Wert leer ist, wird 1 übergeben GUID1 = " "

    Einzig wenn nur GUID1 steht ( ohne = ) wird 0 übergeben.

    Na ja damit muss ich wohl leben, ich wollte erreichen, das jemand der die ini ändert und einen Fehler macht, weil der Wert leer ist ne entsprechende Meldung bekommt.

    Denn die ini verleitet folgendes zu schreiben...

    GUID1 = "Firefox"
    GUID2 = "Thunderbird"
    GUID3 = "ZipGenius"
    GUID4 = " "
    GUID5 = " "
    GUID6 = " "

    usw. bis GUID10

    Aber danke ich bin froh das es klappt und habe als Newbie wieder was gelernt
    THX

  • Seltsam - wenn du dort GUID = "" stehen hast oder gar nichts sollte auch ein String ohne Characters übertragen werden.
    Eine entsprechende Abfrage If $input = "" Then sollte darauf dann auch ansprechen.
    Achte auch mal drauf das du kein Leerzeichen zwischen die beiden Anführungszeichen haust und poste mal dein ganzes Skript sonst können wir nur raten an was es liegt.

  • Kann ich das zusammenfassen?

    Habe das mit ElseIF versucht, bin ich aber zu doof für!

    • Offizieller Beitrag

    Hi,

    versuch mal :

    [autoit]

    $input = IniRead($IniNameNeu, "LayerName", "GUID1", "Schlüssel nicht gefunden")
    Switch $input
    Case ""
    MsgBox(4096, " GUID1", "Der Wert darf nicht leer sein")
    Case "Schlüssel nicht gefunden"
    MsgBox(4096, " GUID1", "Wert nicht gefunden")
    Case Else
    Run("Notepad.exe", "", @SW_MAXIMIZE)
    EndSwitch

    [/autoit]

    So long,

    Mega

  • Ist es so richtig?

    • Offizieller Beitrag

    Hi,

    geht mein Vorschlag nicht?

    [autoit]


    Switch IniRead($IniNameNeu, "LayerName", "GUID1", "Schlüssel nicht gefunden")
    Case ""
    MsgBox(4096, " GUID1", "Der Wert darf nicht leer sein")
    Case "Schlüssel nicht gefunden"
    MsgBox(4096, " GUID1", "Wert nicht gefunden")
    Case Else
    Run("Notepad.exe", "", @SW_MAXIMIZE)
    EndSwitch

    [/autoit]

    So long,

    Mega

  • das ganze soll dann im zusammenhang mit dem funktionieren...

    Nur habe ich das 10 mal bis GUID 10
    ist noch mein alter code, der ja mit If $input1 = 0 Then nicht funktioniert...

    • Offizieller Beitrag

    Hi,

    verstehe ich dich richtig? Wenn du "" in die ini schreibst sprich

    [LayerName]
    GUID1=""

    dann kommt MsgBox(4096, " GUID1", "Der Wert darf nicht leer sein")?

    Das ist doch richtig! Oder wo liegt das Problem? Vielleicht sollte ich mal den gesamten Thread lesen, hmmh!

    So long,

    Mega

  • Ja, bei

    [LayerName]
    GUID1=""

    kommt MsgBox(4096, " GUID1", "Der Wert darf nicht leer sein"


    Aber bei
    [LayerName]
    GUID1=" " kommt kein Fehler...

  • Aber in meinen Fall darf der Wert nich leer sein, sondern nur sowas,
    "ClipboardPath"
    oder so etwas "9f1a8dca-52f3-4f8f-8b7e-786ea59986a8" enthalten, aber auf keinen Fall leer sein!

    Kann man wohl nichts machen.

    Muss ich halt in der Beschreibung explizit darauf hinweisen.