1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BugFix

Beiträge von BugFix

  • FileWriteFromArray2D

    • BugFix
    • 27. August 2007 um 22:21

    Hi,
    mich hat schon lange gestört, dass _FileWriteFromArray nur mit 1D-Arrays funktioniert.
    Deshalb nun hier die Funktion für 1D und 2D -Arrays.

    _FileWriteFromArray2D($FILEPATH, $ARRAY [, $iROWstart=0 [, $iROWend=0 [, $iCOLstart=0 [, $iCOLend=0 [, $DELIM='|']]]]])

    $iROWstart - Index der Startzeile - Standard 0
    $iROWend - Index der Endzeile - Standard (Ubound)-1
    $iCOLstart - Index der Startspalte - Standard 0
    $iCOLend - Index der Endspalte - Standard (Ubound,2)-1
    $DELIM - Trennzeichen - Standard '|'

    Bei 2D-Arrays werden pro Textzeile die Einträge der Spalten getrennt durch $DELIM geschrieben.

    Spoiler anzeigen
    [autoit]

    ;==========================================================================================================================================
    ; Function: _FileWriteFromArray2D($FILEPATH, $ARRAY [, $iROWstart=0 [, $iROWend=0 [, $iCOLstart=0 [, $iCOLend=0 [, $DELIM='|']]]]])
    ;
    ; Description: Write 1D/2D array to file, 2D with delimiter between every entry
    ;
    ; Parameter(s): $FILEPATH - path/filename of the file to be write
    ; $ARRAY - array to write from
    ; optional $iROWstart - start row-index, default 0
    ; optional $iROWend - end row-index, default Ubound(array)-1
    ; optional $iCOLstart - start column-index, default 0
    ; optional $iCOLend - end column-index, default Ubound(array,2)-1
    ; optional $DELIM - delimiter for 2D-array entries, default '|'
    ;
    ; Requirement(s): None
    ;
    ; Return Value(s): On Success - Returns -1
    ; On Failure - Returns 0 and sets @error = 1 (given array is'nt array); @error = 2 (unable to open filepath)
    ;
    ; Note: If $iROWstart > $iROWend or $iCOLstart > $iCOLend the values will be swapped among
    ;
    ; Author(s): BugFix ( [email='bugfix@autoit.de'][/email] )
    ;==========================================================================================================================================
    Func _FileWriteFromArray2D($FILEPATH, $ARRAY, $iROWstart=0, $iROWend=0, $iCOLstart=0, $iCOLend=0, $DELIM='|')
    If Not IsArray($ARRAY) Then
    SetError(1)
    Return 0
    EndIf
    Local $Ubound = UBound($ARRAY)
    If $iROWend = 0 Then $iROWend = $Ubound-1
    Local $fh = FileOpen($FILEPATH, 2)
    If $fh = -1 Then
    SetError(2)
    Return 0
    EndIf
    Select
    Case $iROWstart < 0 Or $iROWstart > $Ubound-1
    $iROWstart = 0
    ContinueCase
    Case $iROWend < 0 Or $iROWend > $Ubound-1
    $iROWend = $Ubound-1
    ContinueCase
    Case $iROWstart > $iROWend
    $tmp = $iROWstart
    $iROWstart = $iROWend
    $iROWend = $tmp
    EndSelect
    Local $Ubound2nd = UBound($ARRAY, 2)
    If @error = 2 Then
    For $i = $iROWstart To $iROWend
    FileWriteLine($fh, $ARRAY[$i])
    Next
    Else
    If $iCOLend = 0 Then $iCOLend = $Ubound2nd-1
    Select
    Case $iCOLstart < 0 Or $iCOLstart > $Ubound2nd-1
    $iCOLstart = 0
    ContinueCase
    Case $iCOLend < 0 Or $iCOLend > $Ubound2nd-1
    $iCOLend = $Ubound2nd-1
    ContinueCase
    Case $iCOLstart > $iCOLend
    $tmp = $iCOLstart
    $iCOLstart = $iCOLend
    $iCOLend = $tmp
    EndSelect
    For $i = $iROWstart To $iROWend
    $tmp = ''
    For $k = $iCOLstart To $iCOLend
    If $k < $iCOLend Then
    $tmp &= $ARRAY[$i][$k] & $DELIM
    Else
    $tmp &= $ARRAY[$i][$k]
    EndIf
    Next
    FileWriteLine($fh, $tmp)
    Next
    EndIf
    FileClose($fh)
    Return -1
    EndFunc ;==>_FileWriteFromArray2D

    [/autoit]

    EDIT:

    Und hier auch gleich die 'Co-Funktion' ;)

    _FilereadToArray2D($FILEPATH, $ARRAY [, $DELIM=-1])

    Das Array[0] bzw. Array[0][0] enthält die Anzahl der Elemente.
    Durch Angabe des Trennzeichens wird ein 2D-Array erzeugt.
    Dabei Beachten:
    Alle Zeilen der Datei müssen die gleiche Anzahl von Trennzeichen enthalten, ansonsten wird die Funktion mit Fehler abgebrochen.

    Spoiler anzeigen
    [autoit]

    ;==========================================================================================================================================
    ; Function: _FilereadToArray2D($FILEPATH, $ARRAY [, $DELIM=-1])
    ;
    ; Description: Read 1D/2D array from file, if $DELIM is given (<> -1) 2D array will created
    ;
    ; Parameter(s): $FILEPATH - path/filename of the file to read in an array
    ; $ARRAY - array variable to hold readed data
    ; optional $DELIM - delimiter for 2D-array entries, default -1 (none 2D-array)
    ;
    ; Requirement(s): None
    ;
    ; Return Value(s): On Success - Returns -1
    ; On Failure - Returns 0 and sets @error = 1 (given file are not seperated with given delimiter or count of delimiters
    ; are not equal); @error = 2 (unable to open filepath)
    ;
    ; Note: If given file is delimited to create 2D-array ALL lines need the same count of delimiters, otherwise an error occurs!
    ;
    ; Author(s): BugFix ( [email='bugfix@autoit.de'][/email] )
    ;==========================================================================================================================================
    Func _FilereadToArray2D($FILEPATH, ByRef $ARRAY, $DELIM=-1)
    Local $fh = FileOpen($FILEPATH, 0), $line, $var, $n = 1
    If $fh = -1 Then
    SetError(2)
    Return 0
    EndIf
    If $DELIM <> -1 Then
    $line = FileReadLine($fh, 1)
    $var = StringSplit($line, $DELIM)
    If IsArray($var) Then
    $Ubound2nd = $var[0]
    Local $AR[1][$Ubound2nd]
    $AR[0][0] = 0
    Else
    SetError(1)
    Return 0
    EndIf
    While 1
    $line = FileReadLine($fh, $n)
    If @error = -1 Then ExitLoop
    $var = StringSplit($line, $DELIM)
    If IsArray($var) Then
    ReDim $AR[UBound($AR)+1][$Ubound2nd]
    For $i = 0 To $Ubound2nd-1
    $AR[UBound($AR)-1][$i] = $var[$i+1]
    Next
    $AR[0][0] += 1
    Else
    SetError(1)
    Return 0
    EndIf
    $n += 1
    Wend
    Else
    Local $AR[1]
    $AR[0] = 0
    While 1
    $line = FileReadLine($fh, $n)
    If @error = -1 Then ExitLoop
    ReDim $AR[UBound($AR)+1]
    $AR[UBound($AR)-1] = $line
    $AR[0] += 1
    $n += 1
    WEnd
    EndIf
    FileClose($fh)
    $ARRAY = $AR
    Return -1
    EndFunc ;==>_FilereadToArray2D

    [/autoit]

    Dateien

    _FileWriteFromArray2D.au3 2,77 kB – 589 Downloads _FileReadToArray2D.au3 2,21 kB – 624 Downloads
  • Ich weiß nicht ob sie es schon wußten...

    • BugFix
    • 27. August 2007 um 20:33

    :willkommen: "Junger Hüpfer" :rofl:

    Was soll ich denn da sagen... 30 tse tse ;)

  • Ja ich weiß meine Vorstellung kommt ein bissle spät

    • BugFix
    • 27. August 2007 um 20:30

    Hi & :willkommen:

    Ich frag mich ganz brennend, was dieses 'L.' in deinem Namen bedeutet. Macht mich gaaanz wuschig. :rofl:

  • Programm trotz Error weiterlaufen lassen?

    • BugFix
    • 27. August 2007 um 13:49

    Um mehr zu sagen, ist etwas Code notwendig ;)

    Die Fehlermeldung besagt, dass die Aktion (.visible) mit diesem Objekt fehlgeschlagen ist.
    Kann als Ursache haben, dass das Objekt nicht existiert (abfangen mit IsObj() ) oder dass die Methode nicht auf dieses Objekt angewendet werden kann (mal bei MSDN nachschauen).

  • Bin neu hier und brauch hilfe

    • BugFix
    • 26. August 2007 um 20:05

    Im Portal oben rechts findest du einen Link auf: SciTE4AutoIt
    In SciTE ist Koda mit enthalten.

  • Checkbox

    • BugFix
    • 26. August 2007 um 16:08

    AU3Lib, guckst du hier:
    http://www.autoitscript.com/forum/index.php?showtopic=33677&st=0&p=243973&#entry243973

  • Programm trotz Error weiterlaufen lassen?

    • BugFix
    • 26. August 2007 um 15:59

    Mal ein grober Entwurf:

    [autoit]

    While 1
    $msg = GUIGetMsg()
    $statusTab = _GUICtrlTabGetCurSel($Tab)
    Select
    Case $statusTab = 0
    ; Tab 0 aktiv
    Select
    Case $msg = $button
    ; Code Button
    ;
    ;
    EndSelect
    Case $statusTab = 1
    ; Tab 1 aktiv
    ;
    ;
    EndSelect
    WEnd

    [/autoit]

    Willst du, dass mit Betätigung von Button1 auch der Code von Button2 ausgeführt wird, leg den entsprechenden Code in eine Funktion und ruf diese auf:

    [autoit]

    Case $msg = $button1
    _button1() ; code Button1
    _button2() ; code Button2
    ;
    ;
    Func _button1()
    ; code
    EndFunc

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

    Func _button2()
    ; code
    EndFunc

    [/autoit]
  • Programm trotz Error weiterlaufen lassen?

    • BugFix
    • 26. August 2007 um 15:32

    Status abfragen, welches Tab aktiv ist (Index bei 0 beginnend).
    Dann kannst du auch den Button abfragen.

  • Array sortieren nach Anzahl gleicher Einträge

    • BugFix
    • 26. August 2007 um 15:15

    Hi,
    mal wieder Zeit für eine neue Array-Funktion. :D

    Wenn ein Array in einer Spalte mehrfach gleiche Werte enthält (z.B. Datum, IP-Nr), so läßt sich hiermit nach der Anzahl gleicher Werte sortieren.

    _Array2DSortByCountSameEntries(ByRef $ARRAY [, $iCol=0 [, $DESCENDING=1]])

    Sortiert ein Array nach der Anzahl gleicher Einträge, bei 2D-Array nach Anzahl gleicher Einträge einer angegebenen Spalte.
    Wahlweise Sortierung nach fallender (Standard) oder steigender Anzahl gleicher Elemente.
    Erfordert die Funktion: _ArraySort_2ary()

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    Dim $AR[10]=['a','a','a','b','b','c','e','e','e','e']
    Dim $AR2[10][3]
    $AR2[0][0] = 1
    $AR2[1][0] = 2
    $AR2[2][0] = 3
    $AR2[3][0] = 4
    $AR2[4][0] = 5
    $AR2[5][0] = 6
    $AR2[6][0] = 7
    $AR2[7][0] = 8
    $AR2[8][0] = 9
    $AR2[9][0] = 10

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

    $AR2[0][1] = 'a'
    $AR2[1][1] = 'a'
    $AR2[2][1] = 'x'
    $AR2[3][1] = 'b'
    $AR2[4][1] = 'c'
    $AR2[5][1] = 'c'
    $AR2[6][1] = 'e'
    $AR2[7][1] = 'e'
    $AR2[8][1] = 'e'
    $AR2[9][1] = 'e'

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

    $AR2[0][2] = 'X'
    $AR2[1][2] = 'X'
    $AR2[2][2] = 'A'
    $AR2[3][2] = 'A'
    $AR2[4][2] = 'B'
    $AR2[5][2] = 'B'
    $AR2[6][2] = 'B'
    $AR2[7][2] = 'D'
    $AR2[8][2] = 'F'
    $AR2[9][2] = 'F'

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

    _ArrayDisplay($AR, '1D - unsortiert')
    _Array2DSortByCountSameEntrys($AR)
    _ArrayDisplay($AR, '1D - sortiert nach Anzahl gleicher Einträge; fallend')

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

    _ArrayDisplay($AR2, '2D - unsortiert')
    _Array2DSortByCountSameEntrys($AR2,2,0)
    _ArrayDisplay($AR2, '2D - sortiert nach Anzahl gleicher Einträge in Col 2; steigend')

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

    ;----------------------------------------------------------------------------------------------------------------------
    ; Function _Array2DSortByCountSameEntries(ByRef $ARRAY [, $iCol=0 [, $DESCENDING=1]])
    ;
    ; Description - Sorts an 1D/2D Array by count of same entries (2D - in a given column)
    ; - Count de- or ascending
    ;
    ; Parameter $ARRAY: Array to sort
    ; optional $iCol: Column with same entries to sort (default 0)
    ; optional $DESCENDING: Sort ascending[0]/descending[1] (default 1)
    ;
    ; Return Success -1 sorted array
    ; Failure 0 @error = 1, given array is not array
    ;
    ; Requirements _ArraySort_2ary() with #include <array.au3>
    ;
    ; Author BugFix ([email='bugfix@autoit.de'][/email])
    ;----------------------------------------------------------------------------------------------------------------------
    Func _Array2DSortByCountSameEntries(ByRef $ARRAY, $iCol=0, $DESCENDING=1)
    If ( Not IsArray($ARRAY) ) Then
    SetError(1)
    Return 0
    EndIf
    If $DESCENDING <> 1 Then $DESCENDING = 0
    Local $UBound2nd = UBound($ARRAY,2)
    If @error = 2 Then ; 1D
    Dim $aTMP[UBound($ARRAY)][2]
    For $i = 0 To UBound($ARRAY)-1
    $aTMP[$i][0] = 1
    $aTMP[$i][1] = $ARRAY[$i]
    Next
    $k = 0
    For $i = 0 To UBound($ARRAY)-1
    If ($i > 0) And ($i < UBound($ARRAY)-1) Then
    If $ARRAY[$i] <> $aTMP[$k][1] Then
    For $x = $k To $i-1
    $aTMP[$x][0] = $i-$k
    Next
    $k = $i
    EndIf
    ElseIf $i = UBound($ARRAY)-1 Then
    If $ARRAY[$i] <> $aTMP[$k][1] Then
    For $x = $k To $i-1
    $aTMP[$x][0] = $i-$k
    Next
    $k = $i
    Else
    For $x = $k To $i
    $aTMP[$x][0] = $i-$k+1
    Next
    EndIf
    EndIf
    Next
    _ArraySort_2ary($aTMP, 0, $iCol, $DESCENDING)
    For $i = 0 To UBound($ARRAY)-1
    $ARRAY[$i] = $aTMP[$i][1]
    Next
    Else ; 2D
    Dim $aTMP = $ARRAY
    ReDim $aTMP[UBound($ARRAY)][$UBound2nd+1]
    For $i = 0 To UBound($ARRAY)-1
    $aTMP[$i][$UBound2nd] = 1
    Next
    $k = 0
    For $i = 0 To UBound($ARRAY)-1
    If ($i > 0) And ($i < UBound($ARRAY)-1) Then
    If $ARRAY[$i][$iCol] <> $aTMP[$k][$iCol] Then
    For $x = $k To $i-1
    $aTMP[$x][$UBound2nd] = $i-$k
    Next
    $k = $i
    EndIf
    ElseIf $i = UBound($ARRAY)-1 Then
    If $ARRAY[$i][$iCol] <> $aTMP[$k][$iCol] Then
    For $x = $k To $i-1
    $aTMP[$x][$UBound2nd] = $i-$k
    Next
    $k = $i
    Else
    For $x = $k To $i
    $aTMP[$x][$UBound2nd] = $i-$k+1
    Next
    EndIf
    EndIf
    Next
    _ArraySort_2ary($aTMP, $UBound2nd, $iCol, $DESCENDING)
    For $i = 0 To UBound($ARRAY)-1
    For $k = 0 To $UBound2nd-1
    $ARRAY[$i][$k] = $aTMP[$i][$k]
    Next
    Next
    EndIf
    Return -1
    EndFunc ;_Array2DSortByCountSameEntries

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

    Func _ArraySort_2ary(ByRef $ARRAY, $DIM_1ST=0, $DIM_2ND=1, $DESCENDING=0, $REVERSE=False)
    If ( Not IsArray($ARRAY) ) Then
    SetError(1)
    Return 0
    EndIf
    Local $FIRST = 0, $LAST, $tmpFIRST, $sortYES = 0
    Local $UBound2nd = UBound($ARRAY,2)
    If @error = 2 Then
    SetError(2)
    Return 0
    EndIf
    If $DIM_1ST <> 0 Then $DIM_1ST = $UBound2nd-1
    Local $arTmp[1][$UBound2nd]
    _ArraySort($ARRAY,$DESCENDING,0,0,$UBound2nd,$DIM_1ST)
    If $REVERSE Then
    Switch $DESCENDING
    Case 0
    $DESCENDING = 1
    Case 1
    $DESCENDING = 0
    EndSwitch
    EndIf
    For $u = 0 To $UBound2nd-1
    For $i = 0 To UBound($ARRAY)-1
    If $sortYES = 0 Then
    If $u > 0 Then
    If ( $i < UBound($ARRAY)-1 ) And ( $ARRAY[$i][$u] = $ARRAY[$i+1][$u] ) And _
    ( $ARRAY[$i][$u-1] = $ARRAY[$i+1][$u-1] )Then
    $sortYES = 1
    $FIRST = $i
    EndIf
    Else
    If ( $i < UBound($ARRAY)-1 ) And ( $ARRAY[$i][$u] = $ARRAY[$i+1][$u] ) Then
    $sortYES = 1
    $FIRST = $i
    EndIf
    EndIf
    ElseIf $sortYES = 1 Then
    If ( $i = UBound($ARRAY)-1 ) Or ( $ARRAY[$i][$u] <> $ARRAY[$i+1][$u] ) Then
    $sortYES = 0
    $LAST = $i +1
    ReDim $arTmp[$LAST-$FIRST][$UBound2nd]
    $tmpFIRST = $FIRST
    For $k = 0 To UBound($arTmp)-1
    For $l = 0 To $UBound2nd-1
    $arTmp[$k][$l] = $ARRAY[$tmpFIRST][$l]
    Next
    $tmpFIRST += 1
    Next
    $tmpFIRST = $FIRST
    _ArraySort($arTmp,$DESCENDING,0,0,$UBound2nd,$DIM_2ND)
    For $k = 0 To UBound($arTmp)-1
    For $l = 1 To $UBound2nd-1
    $ARRAY[$tmpFIRST][$l] = $arTmp[$k][$l]
    Next
    $tmpFIRST += 1
    Next
    EndIf
    EndIf
    Next
    $sortYES = 0
    Next
    Return -1
    EndFunc ;==>_ArraySort_2ary

    [/autoit]
  • Hellö

    • BugFix
    • 25. August 2007 um 23:46

    Auch von mir ein :willkommen:
    Fühl dich wohl in DER deutschsprachigen AutoIt-Gemeinde. ;)

    Achja:

    Zitat

    Der Sieg wird ganz klar unser sein, auch ohne dass wir euch bestechen müssen^^

    Ich bin zwar nicht unbedingt der Experte - aber müsstet ihr dazu nicht das Spielfeld mit Käse auslegen..... :rofl:

  • Problem mit Error "Verwaltung"

    • BugFix
    • 25. August 2007 um 21:12

    gigx hat es schon richtig erkannt:

    [autoit]

    If $getURLs = 0 Then

    [/autoit]

    geht nicht.
    Du hast ein Inputfeld, dass du mit einem String fütterst. Wenn es leer ist, ist der Inhalt ("") - ein Leerstring, aber niemals Null.
    Selbst wenn du in das Inputfeld eine Null eingeben würdest, wäre die Bedingung nicht erfüllt, da es eine String-Null wäre und nicht, wie in deiner Abfrage verwendet, eine numerische Null.

    Im Allgemeinen fährst du besser, wenn du die Abfrage invertierst.

    [autoit]

    If $getURLs <> "" Then ; auf das, was nicht sein darf prüfen, aber negativ
    ; alles OK - URL da
    Else
    ; Fehler
    EndIf

    [/autoit]
  • wahlfreies Lesen in einer Datei?

    • BugFix
    • 17. August 2007 um 15:07

    Das Byte-weise einlesen ist kein Problem. Du kannst ja mit FileOpen() binäres Lesen/Schreiben festlegen.
    Allerdings ist mir bisher nicht bekannt, dass an einer 'aktuellen' Position begonnen werden kann. Woher soll auch diese Position kommen? Wenn du mit einem anderen Programm diese Datei vorher bearbeitet hast und die zuletzt bearbeitete Position z.B. 20 war, wird dieser Wert ja nicht mit gespeichert.
    Die Datei wird also immer 'jungfräulich' an Position 1 begonnen zu lesen, Zeichen- oder Byte- weise. Je nach FileOpen.

  • array array array

    • BugFix
    • 17. August 2007 um 14:14
    Zitat

    mit arrayunique filter ich ja doppelte einträge raus, wie füge ich denn 2 arrays zusammen? ist das nicht arraypush?


    Nein, ist es nicht. Push ist eine in Speicherregistern verwendete Funktion mit dem Wirkungsalgorithmus: Last-In / First-Out
    Heißt: Du fügst ans Ende einen Eintrag an, dafür wird der erste Eintrag gelöscht - das Array bleibt gleich groß.
    (Oder entgegengesetzt: FILO)

    Zitat

    Hilfe:
    Add new values without increasing array size. Either by inserting at the end the new value and deleting the first one or vice versa.

    Um Arrays zusammenzufügen verwende _Array2DJoin() aus meiner Sig.
    Zum Entfernen von Doppeleinträgen verwende ich meine eigene Fkt. _Array2DDblDel().

  • Browser Connections

    • BugFix
    • 17. August 2007 um 09:51

    Eine direkte Interaktion mit FF ist nicht möglich. Du mußt also über Umwege zum Ziel.
    Schau ob FF die Logs in Dateien ablegt und frage dann diese Dateien ab. Vielleicht reicht für deine Zwecke ja die History von FF.

  • für Statistikfreunde

    • BugFix
    • 15. August 2007 um 17:08
    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)

  • für Statistikfreunde

    • BugFix
    • 14. August 2007 um 22:57
    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)

  • für Statistikfreunde

    • BugFix
    • 14. August 2007 um 22:32
    Zitat

    $ret = _StringBetween($aTableData [0] [0] , '(', ')')


    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.

  • für Statistikfreunde

    • BugFix
    • 14. August 2007 um 22:14

    Dann liegt die im ersten Skript erstellte Datei "AllUsers.txt" nicht im Skriptpfad.

  • für Statistikfreunde

    • BugFix
    • 14. August 2007 um 21:30

    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]
  • kein TrayToolTip

    • BugFix
    • 14. August 2007 um 18:05

    Was möchtest du tun? TrayToolTip setzen und dann vom Programm aus abschalten?

    Einfach:

    [autoit]

    TraySetToolTip()

    [/autoit]

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™