für Statistikfreunde

    • Offizieller Beitrag

    Hi,
    unter der Rubrik Mitglieder findet man ja Angaben zu Anmeldedatum und Postanzahl. Das sind zur Zeit aber 12 Seiten (Tendenz steigend :D ).
    Ich habe hier 2 Skripte geschrieben um
    a) die entsprechenden Daten herunterzuladen und in eine Datei zu speichern
    b) diese Daten in einem Listview darzustellen.

    Die Liste ist per Klick auf den Spaltenkopf sortierbar, aber bitte Geduld ;) - über 1400 Einträge wollen erst mal umsortiert sein.
    Allerdings weist die Sortierung in der Post-Spalte einen Fehler auf. Anscheinend funktioniert die Sortierung hier nur bei Zahlen < 1000.

    Hauptsortierkriterium ist das Anmeldedatum (deshalb auch die sortierbare Schreibweise). Alle Einträge gleichen Datums sind mit gleicher Hintergrundfarbe belegt.

    2 Skripte sind es, weil ich nicht jedes mal, wenn ich die Daten ansehen möchte, vorher auch aktualisieren will (dauert immerhin z.Zt. ca. 2 min).

    Im ersten Skript ist meine ArrayMore.au3 includet.

    Daten holen:

    Spoiler anzeigen
    [autoit]

    #include <IE.au3>
    #include <string.au3>
    #include 'C:\Dokumente und Einstellungen\Standard\Desktop\AU3-Scripte\ArrayMore.au3'

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

    $url = 'http://www.autoit.de/memberslist.php?letter=&order=ASC&sortby=regdate&page='
    $oIE = _IECreate($url & 1, 0, 0)
    $nSite = 0
    $oTable = _IETableGetCollection ($oIE, 9)
    $aTableData = _IETableWriteToArray ($oTable)
    $ret = _StringBetween($aTableData[0][0], '(', ')')
    $nSite = $ret[0]
    Dim $aAllData[1][1], $pathWrite = @ScriptDir & '\AllUsers.txt'

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

    For $i = 1 To $nSite
    If $i > 1 Then _IENavigate($oIE, $url & $i)
    $oTable = _IETableGetCollection ($oIE, 8)
    $aTableData = _IETableWriteToArray ($oTable)
    _Array2DMirror($aTableData)
    _Array2DDelete($aTableData, 0)
    _Array2DDelete($aTableData, 0)
    _Array2DDelete($aTableData, UBound($aTableData)-1)
    For $k = 0 To UBound($aTableData)-1
    $aTableData[$k][1] = ''
    $aTableData[$k][2] = ''
    $aTableData[$k][3] = ''
    $aTableData[$k][4] = ''
    $aTableData[$k][5] = ''
    Next
    _Array2DEmptyDel($aTableData, 1)
    If UBound($aAllData) = 1 Then
    $aAllData = $aTableData
    Else
    _Array2DJoin($aAllData, $aTableData)
    EndIf
    Next
    For $i = 0 To UBound($aAllData)-1
    $var = StringSplit($aAllData[$i][1], '.')
    $aAllData[$i][1] = $var[3] & '-' & $var[2] & '-' & $var[1]
    Next
    _ArraySort($aAllData, 0,0,0,3,1)
    If FileExists($pathWrite) Then FileDelete($pathWrite)
    $fh = FileOpen($pathWrite, 1)
    For $i = 0 To UBound($aAllData)-1
    FileWriteLine($fh, $aAllData[$i][0] & ';' & $aAllData[$i][1] & ';' & $aAllData[$i][2])
    Next
    FileClose($fh)
    _IEQuit($oIE)

    [/autoit]


    Anzeige im ListView

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIListView.au3>
    #include <file.au3>
    Opt("GUIOnEventMode", 1)

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

    Dim $pathUser = @ScriptDir & '\AllUsers.txt', $aUser, $aItem[1], $last = 1, $lastCol
    Dim $col1 = 0xAFEEEE, $col2 = 0xFFF0F5, $col = $col1
    $Form1 = GUICreate("www.AutoIt.de - Userübersicht", 429, 601, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
    $ListView1 = GUICtrlCreateListView("User|Anmeldedatum|Posts", 8, 8, 413, 585, Default, $LVS_EX_GRIDLINES)
    GUICtrlSetOnEvent(-1, "ListClick")
    GUICtrlSendMsg($ListView1, 0x101E, 0, 222)
    GUICtrlSendMsg($ListView1, 0x101E, 1, 100)
    GUICtrlSendMsg($ListView1, 0x101E, 2, 60)
    _GUICtrlListViewJustifyColumn($ListView1, 1, 2)
    _GUICtrlListViewJustifyColumn($ListView1, 2, 1)
    LoadData()
    GUISetState(@SW_SHOW)
    Dim $B_DESCENDING[_GUICtrlListViewGetSubItemsCount ($ListView1)]

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

    While 1
    Sleep(100)
    WEnd

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

    Func Form1Close()
    Exit
    EndFunc

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

    Func LoadData()
    _FileReadToArray($pathUser, $aUser)
    _ArrayDelete($aUser, 0)
    _ArrayDelete($aUser, UBound($aUser)-1)
    ReDim $aItem[UBound($aUser)]
    For $i = 1 To UBound($aUser)-1
    $var = StringSplit($aUser[$i], ';')
    If IsArray($var) Then
    $aItem[$i] = GUICtrlCreateListViewItem($var[1] &'|'& $var[2] &'|'& Number($var[3]), $ListView1)
    Select
    Case $last = 1
    $last = $var[2]
    $lastCol = $col1
    Case Else
    If $var[2] <> $last Then
    If $lastCol = $col1 Then
    $col = $col2
    Else
    $col = $col1
    EndIf
    $lastCol = $col
    $last = $var[2]
    EndIf
    EndSelect
    GUICtrlSetBkColor($aItem[$i], $col)
    EndIf
    Next
    EndFunc

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

    Func ListClick() ; Sortierung ist aber fehlerhaft bei Postanzahl > 999
    _GUICtrlListViewSort($ListView1, $B_DESCENDING, GUICtrlGetState($ListView1))
    EndFunc

    [/autoit]
  • Anzeige im Listview- Error:

    C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\test.au3 (33) : ==> Array variable subscript badly formatted.:
    ReDim $aItem[UBound($aUser)]
    ReDim $aItem[^ ERROR

    Dieser Beitrag wurde 9521 mal editiert, zum letzten Mal von Blubkuh: Morgen, 02:28.

    [autoit]

    If Not $Elephant Then $Irelephant = True

    [/autoit]
  • Und diese Anzeige kommt bei mir im Daten holen- Error...:

    C:\Dokumente und Einstellungen\Admin\Eigene Dateien\AutoIt Scripts\Test.au3 (10) : ==> Subscript used with non-Array variable.:
    $ret = _StringBetween($aTableData [0] [0] , '(', ')')
    $ret = _StringBetween($aTableData ^ ERROR

    Einmal editiert, zuletzt von [KdD]Wolf (14. August 2007 um 22:27)

  • Zitat

    Original von BugFix


    Damit wird die Seitenzahl selektiert.
    Table #8 auf der Website $oIE.

    Bei mir hab ich das bestimmt schon 10 mal laufen lassen - ohne jeden Fehler.
    Sehr seltsam.

    Könnte man die Seitenzahl nicht anders selektieren??

    • Offizieller Beitrag
    Zitat

    Könnte man die Seitenzahl nicht anders selektieren??


    Könnte man, z.B.aus dem Quelltext. Aber das wäre viel aufwändiger.
    Stell mal bei _IECreate auf 'visible' - ob überhaupt die richtige Seite kommt.

    statt: $oIE = _IECreate($url & 1, 0, 0)
    so: $oIE = _IECreate($url & 1, 0, 1)

  • Zitat

    Original von BugFix


    Könnte man, z.B.aus dem Quelltext. Aber das wäre viel aufwändiger.
    Stell mal bei _IECreate auf 'visible' - ob überhaupt die richtige Seite kommt.

    statt: $oIE = _IECreate($url & 1, 0, 0)
    so: $oIE = _IECreate($url & 1, 0, 1)

    Also er greift auf die Seite zu...also ist das doch richtig oder??

  • Soll das Script einen tieferen Sinn haben? Weil im Forum kann ich die Daten auch sortieren lassen^^

    • Offizieller Beitrag
    Zitat

    Original von Sn0opy
    Soll das Script einen tieferen Sinn haben? Weil im Forum kann ich die Daten auch sortieren lassen^^

    Ja, :D
    Ich hab keine Lust in 12 oder mehr Seiten zu blättern.
    Ich bin dabei die Daten weiterzuverarbeiten für eine grafische Übersicht.
    (z.B. Hitliste der Tage mit den meisten Anmeldungen, Top/Low -Poster)