Im Portal oben rechts findest du einen Link auf: SciTE4AutoIt
In SciTE ist Koda mit enthalten.
Beiträge von BugFix
-
-
-
Mal ein grober Entwurf:
[autoit]While 1
[/autoit]
$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
WEndWillst 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
[/autoit][autoit][/autoit][autoit]
_button1() ; code Button1
_button2() ; code Button2
;
;
Func _button1()
; code
EndFuncFunc _button2()
[/autoit]
; code
EndFunc -
Status abfragen, welches Tab aktiv ist (Index bei 0 beginnend).
Dann kannst du auch den Button abfragen. -
Hi,
mal wieder Zeit für eine neue Array-Funktion.
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>
[/autoit] [autoit][/autoit] [autoit]
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$AR2[0][1] = 'a'
[/autoit] [autoit][/autoit] [autoit]
$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'$AR2[0][2] = 'X'
[/autoit] [autoit][/autoit] [autoit]
$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'_ArrayDisplay($AR, '1D - unsortiert')
[/autoit] [autoit][/autoit] [autoit]
_Array2DSortByCountSameEntrys($AR)
_ArrayDisplay($AR, '1D - sortiert nach Anzahl gleicher Einträge; fallend')_ArrayDisplay($AR2, '2D - unsortiert')
[/autoit] [autoit][/autoit] [autoit]
_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 ;_Array2DSortByCountSameEntriesFunc _ArraySort_2ary(ByRef $ARRAY, $DIM_1ST=0, $DIM_2ND=1, $DESCENDING=0, $REVERSE=False)
[/autoit]
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 -
Auch von mir ein :willkommen:
Fühl dich wohl in DER deutschsprachigen AutoIt-Gemeinde.
Achja:
ZitatDer 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.....

-
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
[/autoit]
; alles OK - URL da
Else
; Fehler
EndIf -
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. -
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)ZitatHilfe:
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(). -
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. -
Zitat
Original von Sn0opy
Soll das Script einen tieferen Sinn haben? Weil im Forum kann ich die Daten auch sortieren lassen^^Ja,
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) -
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
$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. -
Dann liegt die im ersten Skript erstellte Datei "AllUsers.txt" nicht im Skriptpfad.
-
Hi,
unter der Rubrik Mitglieder findet man ja Angaben zu Anmeldedatum und Postanzahl. Das sind zur Zeit aber 12 Seiten (Tendenz steigend
).
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>
[/autoit] [autoit][/autoit] [autoit]
#include <string.au3>
#include 'C:\Dokumente und Einstellungen\Standard\Desktop\AU3-Scripte\ArrayMore.au3'$url = 'http://www.autoit.de/memberslist.php?letter=&order=ASC&sortby=regdate&page='
[/autoit] [autoit][/autoit] [autoit]
$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'For $i = 1 To $nSite
[/autoit]
If $i > 1 Then _IENavigate($oIE, $url & $i)
$oTable = _IETableGetCollection ($oIE,
$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)
Anzeige im ListViewSpoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIListView.au3>
#include <file.au3>
Opt("GUIOnEventMode", 1)Dim $pathUser = @ScriptDir & '\AllUsers.txt', $aUser, $aItem[1], $last = 1, $lastCol
[/autoit] [autoit][/autoit] [autoit]
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)]While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc Form1Close()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFuncFunc LoadData()
[/autoit] [autoit][/autoit] [autoit]
_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
EndFuncFunc ListClick() ; Sortierung ist aber fehlerhaft bei Postanzahl > 999
[/autoit]
_GUICtrlListViewSort($ListView1, $B_DESCENDING, GUICtrlGetState($ListView1))
EndFunc -
Was möchtest du tun? TrayToolTip setzen und dann vom Programm aus abschalten?
Einfach:
[autoit]TraySetToolTip()
[/autoit] -
-
[autoit]
$input = ''
[/autoit][autoit][/autoit][autoit]Func _BlauClick()
[/autoit]
$input = 'DuDa'
Filewrite("text.txt" , "hallo " & $input & " das hier ist ein text")
EndFuncWäre schon besser, wenn du Code reinstellst, damit man sieht, was es überhaupt werden soll.
-
Klar geht das.
[autoit]
Am Besten du verwendest OnEvent - Mode.Opt("GUIOnEventMode", 1)
[/autoit]
;...
GUICtrlCreateButton("Blau", 20, 20, 40, 25)
GUICtrlSetOnEvent(-1, "_BlauClick")
;..
;..
Func _BlauClick()
; Send("Blau") oder wie auch immer das realisiert sein soll
EndFuncEdit peethebee: OnEventMode auch angemacht

-
Scheint ein generelles Problem für einige Windows-interne Abfrage Fenster zu sein.
Siehe auch hier:
Dateidownload-Fenster vom IE - kein Klick funktioniertBis jetzt das einzig Funktionierende ist MouseClick().