Subscript used with non-Array variable.

  • Hey,

    was mache ich hier falsch??

    [autoit]

    Func _checknewest()
    Local $icount, $sNewest, $iNewest, $sChecked = ''
    _GUICtrlListView_DeleteAllItems($LVNP)
    $icount = _GUICtrlListView_GetItemCount($LV)
    For $i = 0 To $icount - 1
    $ListViewText = StringRegExpReplace(_GUICtrlListView_GetItemText($LV, $i), '(.+\\).*', '$1')
    If Not StringInStr($sChecked, $ListViewText) Then
    $sChecked &= $ListViewText
    $aImageList = _FileListToArray($imagepath & $ListViewText, '*', 1)
    If Not @error Then
    $sNewest = '0000/00/00'
    $iNewest = 0
    For $j = 1 To $aImageList[0]
    $sDate = StringRegExpReplace(FileGetTime($imagepath & $ListViewText & '\' & $aImageList[$j], 0, 1), '(\d{4})(\d{2})(\d{2}).+', '$1/$2/$3')
    If $sDate > $sNewest Then
    $sNewest = $sDate
    $iNewest = $j
    EndIf
    Next


    GUICtrlCreateListViewItem($ListViewText & $aImageList[$iNewest], $LVNP)
    Else
    MsgBox(0, 'Fehler', 'Keine Dateien gefunden!')
    EndIf
    EndIf
    Next
    _newest()
    EndFunc ;==>_checknewest

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

    Func _newest()
    ; _GUICtrlListView_DeleteAllItems($LVNP)
    Local $icount = _GUICtrlListView_GetItemCount($LVNP)

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

    For $i = 0 To $icount - 1
    $ListViewText = _GUICtrlListView_GetItemTextArray($LVNP, $i)
    _ArrayDisplay($ListViewText)
    $sLog = FileRead(@ScriptDir & '\history.log') ; hier kann man sich das FileOpen sparen
    $ti = FileGetTime($imagepath & $ListViewText[1], 1)

    ConsoleWrite($ListViewText & $imagepath & $ListViewText[1] & @CRLF)

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

    If Not @error Then
    $yyyymd = $ti[0] & "/" & $ti[1] & "/" & $ti[2]
    If @error Then Return
    EndIf

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

    If StringInStr($sLog, $ListViewText[1] & ';' & $yyyymd) Then

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

    ; GUICtrlCreateListViewItem($ListViewText[1], $LVNP)
    _GUICtrlListView_DeleteItem($lvnp, $ListViewText[1])
    ;Return
    ; GUICtrlCreateListViewItem($ListViewText[1], $LVNP)
    EndIf
    Next
    EndFunc ;==>_checkap

    [/autoit]


    Kriege einen fehler in der zeile 40 einen array habe ich _arraydisplay in zeile 38 ist erfolgreich,
    jemand eine idee?

    Danke
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Un wie mache ich darus wieder eine Array ich stehe echt auf dem schlauch????

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hey,
    du hast recht
    If not isArray($ListViewText) Then MsgBox(16, "Error", "Jetzt geht es gleich schief!")

    ist schief gegangen ;(
    und jetzt ?
    Danke
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hi,

    [autoit]

    If not isArray($ListViewText) Then
    MsgBox(16, "Error", "Jetzt geht es gleich schief!")
    exitloop / continueloop ;exitloop verlässt die For/Next Schleife oder ein continueloop um die Liste weiter abzuarbeiten
    endif

    [/autoit]
  • Hey,
    jetzt stürtzt mein Script nicht ab;
    aber er löscht er nicht die richtigen werte Was mache ich falsch??

    [autoit]

    Func _newest()
    ; _GUICtrlListView_DeleteAllItems($LVNP)
    Local $icount = _GUICtrlListView_GetItemCount($LVNP)

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

    For $i = 0 To $icount - 1
    $ListViewText = _GUICtrlListView_GetItemTextArray($LVNP, $i)
    ;_ArrayDisplay($ListViewText)

    If not isArray($ListViewText) Then
    ; MsgBox(16, "Error", "Jetzt geht es gleich schief!")
    ; exitloop
    continueloop; verlässt die For/Next Schleife oder ein continueloop um die Liste weiter abzuarbeiten
    endif

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

    $ti = FileGetTime($imagepath & $ListViewText[1], 1)


    ;ConsoleWrite($imagepath & $ListViewText[1] & @CRLF)

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

    If Not @error Then
    $yyyymd = $ti[0] & "/" & $ti[1] & "/" & $ti[2]
    If @error Then Return
    EndIf

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

    $sLog = FileRead(@ScriptDir & '\history.log') ; hier kann man sich das FileOpen sparen
    ConsoleWrite($sLog & @CRLF)


    If not StringInStr($sLog, $ListViewText[1] & ';' & $yyyymd) Then

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

    ; GUICtrlCreateListViewItem($ListViewText[1], $LVNP)
    _GUICtrlListView_DeleteItem($lvnp, $ListViewText[1])
    ;Return
    ; GUICtrlCreateListViewItem($ListViewText[1], $LVNP)
    EndIf
    Next
    EndFunc

    [/autoit]

    Eine Idee?

    Gruß
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    Einmal editiert, zuletzt von subzero007 (14. August 2009 um 17:16)

  • Das ist mit den Codezeilen schwierig zu sagen.
    Auf jeden Fall erscheint es mir ziemlich unnötig den Text des ganzen Items in ein Array zu laden und anschließend nur den Wert eines Subitems zu verwenden.
    Dafür gibt es: _GUICtrlListView_GetItemText

  • Vorschlag wie ich das machen kann?

    Gruß
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Schau mal Zeile 20-23

    [autoit]

    If Not @error Then
    $yyyymd = $ti[0] & "/" & $ti[1] & "/" & $ti[2]
    If @error Then Return ;wird nie erreicht
    EndIf

    [/autoit]


    sollte ersetzt werden mit:

    [autoit]

    If @error Then Return ;raus wenn fehler
    $yyyymd = $ti[0] & "/" & $ti[1] & "/" & $ti[2] ;datum wenn kein fehler

    [/autoit]


    danach wird das log gelesen, dann erfolgt die stringinstr()-Abfrage.
    Ich würde in Zeile 33/34 einfügen

    [autoit]

    else
    consolewrite ("Datei "&$ListViewText[1] & ';' & $yyyymd&" im Log nicht enthalten!")

    [/autoit]
  • Zitat

    aber er löscht er nicht die richtigen werte

    Welche wären denn die richtigen? Löscht er überhaupt keine, oder nur einige, oder einige Falsche?

  • Zeile 32

    [autoit]

    _GUICtrlListView_DeleteItem($lvnp, $ListViewText[1])

    [/autoit]


    der INDEX wird zum Löschen angegeben!
    also:

    [autoit]

    _GUICtrlListView_DeleteItem($lvnp, $i)

    [/autoit]
  • Hey,
    er löscht die falschen,

    backup\server\server_woechentlich.tib;2009/08/07

    Dieser log eintrag ist definitiv nicht vorhanden aber er löscht den eintrag trotzdem eine idee?

    Habe ich einen denkfeher oder liegt es am Script??

    er soll ja löschen wenn eintrag vorhanden ist....
    Danke
    Subzero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • So sieht mein code aktuell aus:

    [autoit]

    Func _newest()
    ; _GUICtrlListView_DeleteAllItems($LVNP)
    Local $icount = _GUICtrlListView_GetItemCount($LVNP)

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

    For $i = 0 To $icount - 1
    $ListViewText = _GUICtrlListView_GetItemTextArray($LVNP, $i)
    ;_ArrayDisplay($ListViewText)

    If not isArray($ListViewText) Then
    ; MsgBox(16, "Error", "Jetzt geht es gleich schief!")
    ; exitloop
    continueloop ; verlässt die For/Next Schleife oder ein continueloop um die Liste weiter abzuarbeiten
    endif

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

    $ti = FileGetTime($imagepath & $ListViewText[1], 1)


    ;ConsoleWrite($imagepath & $ListViewText[1] & @CRLF)

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

    If @error Then Return ;raus wenn fehler
    $yyyymd = $ti[0] & "/" & $ti[1] & "/" & $ti[2] ;datum wenn kein fehler

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

    $sLog = FileRead(@ScriptDir & '\history.log') ; hier kann man sich das FileOpen sparen
    ;ConsoleWrite($sLog & @CRLF)


    If not StringInStr($sLog, $ListViewText[1] & ';' & $yyyymd) Then

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

    ; GUICtrlCreateListViewItem($ListViewText[1], $LVNP)
    ;_GUICtrlListView_DeleteItem($lvnp, $ListViewText[1])
    _GUICtrlListView_DeleteItem($lvnp, $i)

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

    ;Return
    ; GUICtrlCreateListViewItem($ListViewText[1], $LVNP)
    else
    consolewrite ("Datei "&$ListViewText[1] & ';' & $yyyymd&" im Log nicht enthalten!" & @CRLF)

    EndIf

    Next
    EndFunc

    [/autoit]

    Danke
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    • Offizieller Beitrag

    Also dein Code :

    Spoiler anzeigen
    [autoit]

    If not StringInStr($sLog, $ListViewText[1] & ';' & $yyyymd) Then

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

    ; GUICtrlCreateListViewItem($ListViewText[1], $LVNP)
    ;_GUICtrlListView_DeleteItem($lvnp, $ListViewText[1])
    _GUICtrlListView_DeleteItem($lvnp, $i)

    [/autoit]


    Löscht den Listvieweintrag wenn er nicht im Log enthalten ist .
    Und

    Spoiler anzeigen
    [autoit]

    else
    consolewrite ("Datei "&$ListViewText[1] & ';' & $yyyymd&" im Log nicht enthalten!" & @CRLF)

    [/autoit]


    zeigt dann aber falsch an . Da der Log eintrag ja vorhanden ist.
    Wenn es andersrum sein soll dann

    [autoit]

    If StringInStr($sLog, $ListViewText[1] & ';' & $yyyymd) <> 0 Then

    [/autoit]
  • also sollen die Dateien, die NICHT im log stehen gelöscht werden?!
    dann ersetze mal

    [autoit]

    If not StringInStr($sLog, $ListViewText[1] & ';' & $yyyymd) Then

    [/autoit]


    durch

    [autoit]

    If StringInStr($sLog, $ListViewText[1] & ';' & $yyyymd)=0 Then ;löscht wenn NICHT im LOG

    [/autoit][autoit]

    If StringInStr($sLog, $ListViewText[1] & ';' & $yyyymd)<>0 Then ;löscht wenn im LOG

    [/autoit]


    je nachdem was passt^^

    Edit: heute bin ich einfach zu langsam^^

  • Mhm um die Differenz- / Schnittmenge zu bestimmen habe ich dir (subzero007) doch schon vor Tagen ein Beispiel (was nicht unaufwendig war) mit der UDF von Bugfix geschrieben.
    Wieso sind wir jetzt wieder bei der 0815 Lösung? :(