Array Problem

  • Hi Leute,
    ich habe ein Programm geschrieben (was das macht ist nicht weiter wichtig), aber manchmal taucht ein Fehler auf. Um diesen zu beheben habe ich das folgende Script geschrieben. (Immer wenn ein Ergebnis aus der Section, bzw. Key = 1 oder 0 ist soll er die Section löschen). Jetzt kommt aber immer der Fehler, dass $e kein array ist. Ich habe schon alles was ich gefunden habe ausprobiert, es nützt aber nichts. Könnt ihr mir sagen was ich falsch mache? Ich habe bereits Dim $e[0] = 0, etc. geschrieben und auch $e = IniReadSectionNames... durch $e[0] ersetzt.
    Schaut es euch einfach mal an, das merkwürdige ist, dass es mit meinem compilten script geht ;(

    [autoit]

    Global $e, $i, $c

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

    FileCopy(@ScriptDir & "\Statistic.ini", @ScriptDir & "\Statistic.ini.backup")
    $e = IniReadSectionNames(@ScriptDir & "\Statistic.ini")
    For $i = 1 To $e[0]
    $c = IniRead(@ScriptDir & "\Statistic.ini", $e[$i], $e[$i], "0")
    ;MsgBox(1, "Section Name", $c & "|" & $e[$i])
    If $c = 1 Or $c = 0 Then
    IniDelete(@ScriptDir & "\Statistic.ini", $e[$i])
    EndIf
    Next

    [/autoit]

    Einmal editiert, zuletzt von Aquaplant (28. Oktober 2009 um 15:53)

  • Ok, es scheint an der Zeile zu hapern. Das "fehler" Fenster öffnet sich

    [autoit]

    Global $i, $c
    Dim $e[1]
    FileDelete(@ScriptDir & "\Statistic.ini")
    FileCopy(@ScriptDir & "\Statistic.ini", @ScriptDir & "\Statistic.ini.backup")
    $e[0] = IniReadSectionNames(@ScriptDir & "\Statistic.ini")

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

    If @error Then
    MsgBox(1, "", "fehler")
    EndIf

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

    For $i = 1 To $e[0]
    $c = IniRead(@ScriptDir & "\Statistic.ini", $e[$i], $e[$i], "0")
    ;MsgBox(1, "Section Name", $c & "|" & $e[$i])
    If $c = 1 Or $c = 0 Then
    IniDelete(@ScriptDir & "\Statistic.ini", $e[$i])
    EndIf
    Next

    [/autoit]
  • Hi,

    ich schlage folgende Änderungen zwecks Debugging vor:

    1) #include <array.au3> am Anfang Deines Skriptes
    2) Ändere Dim $e [1] zu Global $e
    3) Ändere $e[0] = IniReadSectionNames(@ScriptDir & "\Statistic.ini") zu
    $e = IniReadSectionNames(@ScriptDir & "\Statistic.ini")
    4) Nächste Zeile nach dem $e =....
    _Arraydisplay ($e)

    Bei dem Arraydisplay siehst Du, ob Deine ini richtig ausgelesen wird. Gffs. musst Du mal die Ini posten.

    ;-))
    Stefan

  • und jetzt prüf nochmal nach:

    Gibt es die Datei wirklich?
    Sind Name & Pfad richtig (geschrieben)?
    Ist es eine ini-Datei und keine .txt o. Ä.?

    Und mir fällt grad auf:
    Erst löschst du die ini mit FileDelete, dann kopierst du sie in eine .backup-Datei, und willst dann die Sections auslesen?
    --> konstruktive Kritik =)


    greetz syne

  • Hi Auquaplant !

    IniReadSectionNames gibt ein array zurück wenn du es aber mit einem array deklarierst wird ein fehler angezeigt lass also $e[0] weg und Dim $e[1] und nimm nur $e
    dann geht es da ein array zurückgegeben wird
    sieh dir mal die hilfe zur Funkttion IniReadSectionNames an

    gruss Simon

  • Super, danke jetzt klappts.

    Zitat

    Und mir fällt grad auf:
    Erst löschst du die ini mit FileDelete, dann kopierst du sie in eine .backup-Datei, und willst dann die Sections auslesen?
    --> konstruktive Kritik =)


    Ist mir auch schon aufgefallen, habe .backup vergessen, sonst macht es natürlich keinen Sinn ^^
    Was bringt denn #include <array.au3> ? und das mit dem _arraydisplay hab ich nicht ganz verstanden, stattdessen habe ich eine simple msgbox eingebaut. Das Script sieht jetzt so aus:

    [autoit]

    #include <array.au3>
    Global $i, $c, $e

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

    FileDelete(@ScriptDir & "\Statistic.ini.backup")
    FileCopy(@ScriptDir & "\Statistic.ini", @ScriptDir & "\Statistic.ini.backup")
    $e = IniReadSectionNames(@ScriptDir & "\Statistic.ini")
    ;MsgBox(1, "$e", $e)
    If @error Then
    MsgBox(1, "", "fehler")
    EndIf

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

    For $i = 1 To $e[0]
    $c = IniRead(@ScriptDir & "\Statistic.ini", $e[$i], $e[$i], "0")
    ;MsgBox(1, "Section Name", $c & "|" & $e[$i])
    If $c = 1 Or $c = 0 Then
    IniDelete(@ScriptDir & "\Statistic.ini", $e[$i])
    EndIf
    Next

    [/autoit]
  • Hi,

    s. F1 oder Hilfe: Funktion _Arraydisplay ().

    -> Zeigt ein Array in einer Liste an.

    Für diese Funktion benötigst Du die Datei array.au3, ergo: #include <array.au3>

    Da Du die Funktion nicht nutzt, kannst Du das include auch wieder rausnehmen!

    ;-))
    Stefan