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. elcojon

Beiträge von elcojon

  • Probleme mit MustDeclareVars

    • elcojon
    • 5. September 2014 um 14:28

    Hey jz mal Butter bei die Fische... Fakt ist: Fehler wurde Nicht richtig erkannt. Für Case $6 MUSSTE* keine deklaration erfolgen. das script ist erst am compiler gecrasht - darum gehts mir

    *(Decalr.ErrorReport by MustDeclareVars)

  • Probleme mit MustDeclareVars

    • elcojon
    • 5. September 2014 um 14:21
    Zitat von YaeroxXO

    In C ist das so? Das will ich gerne sehen 8| Ich würde behaupte das ist in C nicht so, da ist alles noch viel strenger ... ich kann mich nicht daran errinnern, dass das in C so sei. Wenn du da ein Beispiel hast darfst du mir das gerne mal zeigen bitte.


    ... dass man immer UNTER einer function weiter coden muss wenn von dort der aufruf erfolgr ?(

    und zu dem switch.. nein.. aber ohne den davor aufgerufenen case ist das ganze nicht viel mehr... außerdem waren da """""""" ^^

  • Probleme mit MustDeclareVars

    • elcojon
    • 5. September 2014 um 14:12

    zu 1. ja okay hab ich nich ausprobiert aber in c ist das ja so...
    zu 2. ja und genau das gleiche ist bei switch.. switch entscheidet welche "innere Funktion" aufgerufen wird (via wahrheitswert der mittels den cases festgelegt wird) bei select würde ich es ja noch verstehen weil dort mehrere zutreffen können und sie nacheinander abgearbeitet werden aber bei switch? naja.. problem ist jz auf jedenfall bekannt und man weiß jz woran man ist :rolleyes:

  • Probleme mit MustDeclareVars

    • elcojon
    • 5. September 2014 um 13:55
    Spoiler anzeigen
    [autoit]

    Opt("MustDeclareVars", 1)

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

    Func _EineFunktion()
    Local $Answer=MsgBox (6,0,1)
    EndFunc

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

    $Answer="Hi"
    MsgBox (0,0,$Answer)

    [/autoit]


    // Ich code UNTER _EineFunktion() weiter und es wird mit EndFunc der lokale gültikeits bereich verlassen :huh: // und erkannt...

  • Probleme mit MustDeclareVars

    • elcojon
    • 5. September 2014 um 13:49
    Zitat von AspirinJunkie

    Wenn $a lediglich in einem anderen Case deklariert wird, dann ist das kein Fehler von Au3Check sondern schlicht korrekt.
    Mit MustDeclareVars soll sichergestellt werden, dass Variablen erst nach einer expliziten Deklaration initialisiert werden dürfen.
    Wenn die Deklaration aber in einem Case steht ist die Deklaration in einem anderen Case nicht sichergestellt (weil das Case mit der Deklaration unter Umständen nie aufgerufen wird).
    Die Deklaration muss also außerhalb des Switchs passieren wenn eine Variable Case-Übergreifende verwendet wird. Oder in jedem Case wo sie verwendet wird einzeln.

    Für Fälle in denen die Struktur wirklich mal zu komplex für Au3Check ist, nimmt man hingegen #forceref.


    stimmt fast... bestimme ich eine lokale in einer func. und code unter ihr weiter meckert mustdecare check auch rum... und sie ist theoretisch definiert... jedoch (praktisch) nicht zwingend (mustdecalre) ...

  • Probleme mit MustDeclareVars

    • elcojon
    • 5. September 2014 um 13:45

    ... und wegen minimal beispiel... wenn ICH code... kann es keiner lesen und jz den ganzen code aufräumen nur um iwas kleines zu fixen.. nää ^^

  • Probleme mit MustDeclareVars

    • elcojon
    • 5. September 2014 um 13:38

    OMG!! :party: okay en kolege hats gepackt ^^ schmerzhafter fail... Es ligt dem ganzen wohl ein Fehler in der Struktur der Au3Check, bzw. was sich auch immer um den check des mustdeclar kümmert, vor.

    $a war weiter oben in einem anderes Case bereits deklariert.
    in case $6 aber noch nicht... der check läft drüber und sieht ein local $a in der while loop und alles is gut... bin der compiler bzw interpreter selbst dran geht :cursing::cursing:

    Spoiler anzeigen
    [autoit]


    Case $6
    $a = _INIREAD(Default)
    ConsoleWrite($a & @CRLF)
    _ArrayDisplay($a, "ENCRIPT")
    Case Else
    EndSwitch

    [/autoit]

    Lösung ;)

    Spoiler anzeigen
    [autoit]

    Case $6
    Local $a = _INIREAD(Default)
    ConsoleWrite($a & @CRLF)
    _ArrayDisplay($a, "ENCRIPT")
    Case Else
    EndSwitch

    [/autoit]


    Trotzdem ein Dank an alle die sich ein kopf gemacht haben :thumbup:

    gibts iwo so ne art sphotline für autoit? :D das könnte man ja im nächsten rl fixen :whistling:

    And Now.. Rock'n'Roll :rock::love:

  • Probleme mit MustDeclareVars

    • elcojon
    • 5. September 2014 um 13:02
    Zitat von name22

    Das sollte eigentlich nicht passieren. Die Funktionsdeklaration sollte nicht als Aufruf einer Variable gewertet werden, sondern als Deklaration eine lokalen Variable.


    also das ist mir jz ehrlichgesagt nich neu :P aber trotzdem gehn mir so langsam die ideen aus.. ;(

  • Probleme mit MustDeclareVars

    • elcojon
    • 5. September 2014 um 11:52

    * nur die Variablen $___MLUDF_* sind Global bzw Global Statics ... und alle vars im und um die gui sind nur zum test gedacht..

    Ich hab das gefühl dass es in dem funktionsheader liegt... thoretischw erden alle enthaltenen Variablen/Parameter Lokal für diese einzige Funktion deklariert.
    [[ _INIREAD($s_PATH = Default, $f_UseEncryptedINI = Default) ]] aber scheind als würde das must decar nicht reichen ://

    Zitat von name22

    Ich bin mir nicht so sicher, ob das sinnvoll ist einfach alle Variablen global zu deklarieren, wenn er denn schon MustDeclareVars benutzt...
    Hast du schon überprüft, ob irgendeine Variable in deiner Funktion, zum Zeitpunkt des Aufrufens, noch nicht deklariert ist? Möglicherweise ist das einfach nur eine seltsame Zeilenangabe von Au3Check

    Ja generell schon...

    btw der kopf (Steht da so nix beautified o.ä.):

    Spoiler anzeigen
    [autoit]

    #include-once
    #include <Crypt.au3>
    #include <Array.au3> ;#DEBUG
    ;~ #include <File.au3> ;#DEBUG
    Opt("MustDeclareVars", 1)

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

    Global Static $__MLUDF_f_USE_ENCRYPT_LngFile = True
    Global Static $__MLUDF_m_USE_PASSWORD = Default ; May enter your own pw (Default=@ScriptName)
    Global Static $__MLUDF_v_USE_ENCRYPT_ALG = Default ;Default = $CALG_AES_256
    Global Static $__MLUDF_s_ML_FILEPATH = @ScriptDir & ""
    Global Static $__MLUDF_s_ML_FILENAME = StringTrimRight(@ScriptName, 4) & ".lng"
    ;~ Global Static $__MLUDF_s_ML_FILEHASH = Default ; For more Secure create a hash and put it in...

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

    Global $__MLUDF_a_Languages[1][3] = [["Nr", "ID", "Name"]]
    Global $__MLUDF_a_MLControlTable[1][3] = [["C_Handle", "C_Name", "L_ID"]]

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

    ;~ Global $__MLUDF_a_INI=_INIREAD($__MLUDF_s_ML_FILEPATH&$__MLUDF_s_ML_FILENAME) ;TEST2
    Global $__MLUDF_a_INI = $__MLUDF_s_ML_FILEPATH & $__MLUDF_s_ML_FILENAME
    ;~ Global $__MLUDF_a_INI = _INIREAD(@ScriptDir & "\LNG.TXT") ;TEST

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

    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    ;~ _INIREAD()

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

    #Region - GUI Create
    Local $gui, $1, $2, $3, $4, $5, $6
    $gui = GUICreate('')
    GUISetState()
    $1 = GUICtrlCreateButton("text1", 0, 0, 150)
    __AddToMultiLanguage($1, "hahaha")
    $2 = GUICtrlCreateButton("text2", 0, 50, 150)
    __AddToMultiLanguage($2)
    $3 = GUICtrlCreateButton("text3", 0, 100, 150)
    __AddToMultiLanguage($3)
    $4 = GUICtrlCreateButton("text4", 0, 150, 150)
    __AddToMultiLanguage($4)
    $5 = GUICtrlCreateButton("text5", 0, 200, 150)
    __AddToMultiLanguage($5)
    $6 = GUICtrlCreateButton("text6", 0, 250, 150)
    __AddToMultiLanguage($6)

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

    ;~ _ArrayDisplay($__MLUDF_a_INI)
    #EndRegion - GUI Create

    [/autoit]
  • Probleme mit MustDeclareVars

    • elcojon
    • 5. September 2014 um 11:08

    Hallöchen alle ihr jungs und mädchen ;)

    vielleicht kann mir jmd helfen:
    Idee Live MultiLanguage Sprachumschaltung
    kleines Extra damit nicht irgendwer an den Sprachen rumfummelt.. encryptchen.

    es ist eigenlich noch nichts ganz fertig darum verzeit mir.. umständliche codingwege ..

    Jz das eigenliche Problem: (FEHLER auf grund von Opt("MustDeclareVars", 1) => bei 0 ist alles okay..)

    Spoiler anzeigen


    "C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\Users\ICH\Desktop\AutoIt v3 Script (neu) (2).au3" /UserParams
    +>10:38:22 Starting AutoIt3Wrapper v.14.801.2025.0 SciTE v.3.4.4.0 Keyboard:00000407 OS:WIN_81/ CPU:X64 OS:X64 Environment(Language:0407)
    +> SciTEDir => C:\Program Files (x86)\AutoIt3\SciTE UserDir => C:\Users\ICH\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper SCITE_USERHOME => C:\Users\ICH\AppData\Local\AutoIt v3\SciTE
    >Running AU3Check (3.3.12.0) from:C:\Program Files (x86)\AutoIt3 input:C:\Users\ICH\Desktop\AutoIt v3 Script (neu) (2).au3
    +>10:38:23 AU3Check ended.rc:0
    >Running:(3.3.12.0):C:\Program Files (x86)\AutoIt3\autoit3.exe "C:\Users\ICH\Desktop\AutoIt v3 Script (neu) (2).au3"
    --> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop
    "C:\Users\ICH\Desktop\AutoIt v3 Script (neu) (2).au3" (276) : ==> Variable used without being declared.:
    Func _INIREAD($s_PATH = Default, $f_UseEncryptedINI = Default)
    ^ ERROR
    ->10:38:24 AutoIt3.exe ended.rc:1
    +>10:38:24 AutoIt3Wrapper Finished.
    >Exit code: 1 Time: 1.943

    der Aufruf :

    Spoiler anzeigen
    [autoit]


    #Region - GUI Create
    Local $gui, $1, $2, $3, $4, $5, $6
    $gui = GUICreate('')
    GUISetState()
    $1 = GUICtrlCreateButton("text1", 0, 0, 150)
    ;__AddToMultiLanguage($1, "hahaha")
    $2 = GUICtrlCreateButton("text2", 0, 50, 150)
    ;__AddToMultiLanguage($2)
    $3 = GUICtrlCreateButton("text3", 0, 100, 150)
    ;__AddToMultiLanguage($3)
    $4 = GUICtrlCreateButton("text4", 0, 150, 150)
    ;__AddToMultiLanguage($4)
    $5 = GUICtrlCreateButton("text5", 0, 200, 150)
    ;__AddToMultiLanguage($5)
    $6 = GUICtrlCreateButton("text6", 0, 250, 150)
    ;__AddToMultiLanguage($6)

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

    #EndRegion - GUI Create

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

    #Region - GUI SwitchLoop
    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_Close
    Exit
    Case $1
    Case $2
    Case $3
    Case $4
    Case $5
    Case $6
    $a = _INIREAD(Default)
    ConsoleWrite($a & @CRLF)
    _ArrayDisplay($a, "ENCRIPT")
    Case Else
    EndSwitch
    WEnd
    #EndRegion - GUI SwitchLoop

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

    Die Function

    Spoiler anzeigen
    [autoit]


    Func _INIREAD($s_PATH = Default, $f_UseEncryptedINI = Default)

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

    Local $a_Return[1][2] = [["SECTION", "ARRAYofITEMS"]]
    Local $a_Sections[1] = ["$a_Sections"]

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

    If $s_PATH == Default Then $s_PATH = $__MLUDF_s_ML_FILEPATH & $__MLUDF_s_ML_FILENAME
    If $f_UseEncryptedINI == Default Then $f_UseEncryptedINI = True

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

    If $f_UseEncryptedINI Then
    If $__MLUDF_m_USE_PASSWORD == Default Then $__MLUDF_m_USE_PASSWORD = @ScriptName
    If $__MLUDF_v_USE_ENCRYPT_ALG == Default Then $__MLUDF_v_USE_ENCRYPT_ALG = $CALG_AES_256

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

    Local $s_SpawnFile = _TempFile(Default, Default, ".bin", 9)

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

    If _Crypt_DecryptFile($s_PATH, $s_SpawnFile, $__MLUDF_m_USE_PASSWORD, $__MLUDF_v_USE_ENCRYPT_ALG) Then
    MsgBox($MB_SYSTEMMODAL, "Success", "Operation succeeded.")
    Else
    Switch @error
    Case 1
    MsgBox($MB_SYSTEMMODAL, "Error", "Failed to create the key.")
    Return False ; REPORT
    Case 2
    MsgBox($MB_SYSTEMMODAL, "Error", "Couldn't open the source file.")
    Return False ; REPORT
    Case 3
    MsgBox($MB_SYSTEMMODAL, "Error", "Couldn't open the destination file.")
    Return False ; REPORT
    Case 4 Or 5
    MsgBox($MB_SYSTEMMODAL, "Error", "Decryption error.")
    Return False ; REPORT
    EndSwitch
    EndIf

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

    FileSetAttrib($s_SpawnFile, "+SHOT") ; could help to hide a bit more
    $s_PATH = $s_SpawnFile

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

    EndIf

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

    Local $hFileOpen = FileOpen($s_PATH, $FO_READ)
    Local $lines = _FileCountLines($s_PATH)

    If $hFileOpen = -1 Then Return SetError(1, 0, 0) ; REPORT
    If $lines = 0 And @error Then Return SetError(1, 0, 0) ; REPORT

    For $i = 0 To $lines
    Local $s_FRL = FileReadLine($hFileOpen, $i)
    If StringLeft($s_FRL, 1) == "[" And StringRight($s_FRL, 1) == "]" Then _ArrayAdd($a_Sections, $s_FRL)
    Next

    FileClose($hFileOpen)

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

    $hFileOpen = Null ; Leak Fix

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

    $a_Sections[0] = UBound($a_Sections) - 1

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

    For $i = 1 To $a_Sections[0]
    Local $a_tmp[1][2] = [[StringTrimRight(StringTrimLeft($a_Sections[$i], 1), 1), IniReadSection($s_PATH, StringTrimRight(StringTrimLeft($a_Sections[$i], 1), 1))]]
    _ArrayAdd($a_Return, $a_tmp)
    Next

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

    If $f_UseEncryptedINI Then
    FileDelete($s_SpawnFile) ; delete TempSpawn
    EndIf

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

    Return $a_Return

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

    EndFunc ;==>_INIREAD

    [/autoit]


    Vielen dank Ich hoffe ich hab jetzt auf die schnelle nicht allzuviel vergessen bzw fehler gemacht :thumbup::thumbup:
    :)
    ElCoón ;)

  • Netzwerkcomputer und deren Benutzer

    • elcojon
    • 4. September 2014 um 16:57

    8| Wie nicht "richtige" ergebnisse? ?(
    Computer tun nur das was man ihnen sagt 8o

  • Stimme zum Vorlesen von Texten

    • elcojon
    • 4. September 2014 um 16:50

    es (gab/gibt) auch ein Scite shortcard leider find ich ihn nicht mehr... irgendetwas mit speech oder so

    #EDIT:

    einfach 'say' eingeben und mit einem 'Space' abschließen :P
    etwas billig aber mit ein paar einstellungen ganz verträglich :whistling:

  • Netzwerkcomputer und deren Benutzer

    • elcojon
    • 4. September 2014 um 16:43

    guckmal ob vlt etwas bei den pstools von ms dabei ist.. bin geade wieder weg von windows ^^

    es gibt ja auch remotetaskmgr etc...

    TIPP: Sysinternal Suite

  • Netzwerkcomputer und deren Benutzer

    • elcojon
    • 4. September 2014 um 16:37
    Zitat von Phil-IT

    1. nslookup bringt mir nichts weil den PC namen hab ich ja schon aber keine IP


    Zu #1
    _TCPIpToName
    TCPNameToIP
    Macht aus jeweils einem, das andere...

  • Netzwerkcomputer und deren Benutzer

    • elcojon
    • 4. September 2014 um 16:27

    teste das mal übers Terminal ;)

    RE_name=>nslookup <IP>

    RE_user=>nbtstat -A <IP>

    #EDIT: #1
    Hoppla.. Bin gerade ständig auf Linux unterwegs, aber guckmal soetwas in der Art gibt es bestimmt auch für Windows :thumbup:

    #EDIT: #2
    Beide Befehle existieren auch in Windows :thumbup: einfach mal cmd ausführen, einfügen und -A mit -? ersetzen :party:

  • _ArrayBinarySearch "übersieht"/klappt nicht

    • elcojon
    • 21. April 2014 um 01:10

    bin nich so der changelog suchti :D hm ja aber das ist eine ganz andere art in die ich mich fast komplett einarbeiten müsste...

    Da du mich jz wieder mit der @error Anomalie drauf gehoben hast... das "Problem" liegt eigenlich garnicht als solches vor.

    vorne weg: Probelm gelöst => _ArraySearch () statt der Binary Alternative.
    Im Test Klappts... jz muss es sich nurnoch in der Praxis beweisen :P


    Das Problem liegt im Unterschied: _ArrayBinarySearch() VS. _ArraySearch ()
    _ArrayBinarySearch sucht mittels lexikographischem Muster(desswegen ja auch das anfängliche _arraySort)

    die "Fehlerhafte"-Zeile (z116@\Include\Array.au3):

    [autoit]

    If $avArray[$iStart] > $vValue Or $avArray[$iEnd] < $vValue Then Return SetError(2, 0, -1)

    [/autoit]


    ... oder im Spoiler z14:

    Array.au3(UDF-Funtion _ArrayBinarySearch)
    [autoit]

    Func _ArrayBinarySearch(Const ByRef $avArray, $vValue, $iStart = 0, $iEnd = 0)
    If Not IsArray($avArray) Then Return SetError(1, 0, -1)
    If UBound($avArray, 0) <> 1 Then Return SetError(5, 0, -1)

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

    Local $iUBound = UBound($avArray) - 1

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

    ; Bounds checking
    If $iEnd < 1 Or $iEnd > $iUBound Then $iEnd = $iUBound
    If $iStart < 0 Then $iStart = 0
    If $iStart > $iEnd Then Return SetError(4, 0, -1)

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

    Local $iMid = Int(($iEnd + $iStart) / 2)

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

    If $avArray[$iStart] > $vValue Or $avArray[$iEnd] < $vValue Then Return SetError(2, 0, -1)

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

    ; Search
    While $iStart <= $iMid And $vValue <> $avArray[$iMid]
    If $vValue < $avArray[$iMid] Then
    $iEnd = $iMid - 1
    Else
    $iStart = $iMid + 1
    EndIf
    $iMid = Int(($iEnd + $iStart) / 2)
    WEnd

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

    If $iStart > $iEnd Then Return SetError(3, 0, -1) ; Entry not found

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

    Return $iMid
    EndFunc ;==>_ArrayBinarySearch

    [/autoit]

    Wir vergleichen mit den Operatoren "<" & ">"
    Diese arbeiten auf lexikographischer Ebene

    Operatoren


    >
    Prüft, ob der erste Wert größer als der zweite ist. Die Strings werden
    lexikographisch verglichen, auch wenn die Inhalte der Strings numerisch sind.

    <
    Prüft, ob der erste Wert kleiner als der zweite ist. Die Strings werden
    lexikographisch verglichen, auch wenn die Inhalte der Strings numerisch sind.

    //Wer sich mal die mühe machen will vergleicht die 2 Funktionen der arrayUDF (au3v3381)

    __ArrayBinarySearch
    [autoit]

    Func _ArrayBinarySearch(Const ByRef $avArray, $vValue, $iStart = 0, $iEnd = 0)
    If Not IsArray($avArray) Then Return SetError(1, 0, -1)
    If UBound($avArray, 0) <> 1 Then Return SetError(5, 0, -1)

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

    Local $iUBound = UBound($avArray) - 1

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

    ; Bounds checking
    If $iEnd < 1 Or $iEnd > $iUBound Then $iEnd = $iUBound
    If $iStart < 0 Then $iStart = 0
    If $iStart > $iEnd Then Return SetError(4, 0, -1)

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

    Local $iMid = Int(($iEnd + $iStart) / 2)

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

    If $avArray[$iStart] > $vValue Or $avArray[$iEnd] < $vValue Then Return SetError(2, 0, -1)

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

    ; Search
    While $iStart <= $iMid And $vValue <> $avArray[$iMid]
    If $vValue < $avArray[$iMid] Then
    $iEnd = $iMid - 1
    Else
    $iStart = $iMid + 1
    EndIf
    $iMid = Int(($iEnd + $iStart) / 2)
    WEnd

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

    If $iStart > $iEnd Then Return SetError(3, 0, -1) ; Entry not found

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

    Return $iMid
    EndFunc ;==>_ArrayBinarySearch

    [/autoit]
    _ArraySearch
    [autoit]

    Func _ArraySearch(Const ByRef $avArray, $vValue, $iStart = 0, $iEnd = 0, $iCase = 0, $iCompare = 0, $iForward = 1, $iSubItem = -1)
    If Not IsArray($avArray) Then Return SetError(1, 0, -1)
    If UBound($avArray, 0) > 2 Or UBound($avArray, 0) < 1 Then Return SetError(2, 0, -1)

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

    Local $iUBound = UBound($avArray) - 1

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

    ; Bounds checking
    If $iEnd < 1 Or $iEnd > $iUBound Then $iEnd = $iUBound
    If $iStart < 0 Then $iStart = 0
    If $iStart > $iEnd Then Return SetError(4, 0, -1)

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

    ; Direction (flip if $iForward = 0)
    Local $iStep = 1
    If Not $iForward Then
    Local $iTmp = $iStart
    $iStart = $iEnd
    $iEnd = $iTmp
    $iStep = -1
    EndIf

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

    ; same var Type of comparison
    Local $iCompType = False
    If $iCompare = 2 Then
    $iCompare = 0
    $iCompType = True
    EndIf

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

    ; Search
    Switch UBound($avArray, 0)
    Case 1 ; 1D array search
    If Not $iCompare Then
    If Not $iCase Then
    For $i = $iStart To $iEnd Step $iStep
    If $iCompType And VarGetType($avArray[$i]) <> VarGetType($vValue) Then ContinueLoop
    If $avArray[$i] = $vValue Then Return $i
    Next
    Else
    For $i = $iStart To $iEnd Step $iStep
    If $iCompType And VarGetType($avArray[$i]) <> VarGetType($vValue) Then ContinueLoop
    If $avArray[$i] == $vValue Then Return $i
    Next
    EndIf
    Else
    For $i = $iStart To $iEnd Step $iStep
    If StringInStr($avArray[$i], $vValue, $iCase) > 0 Then Return $i
    Next
    EndIf
    Case 2 ; 2D array search
    Local $iUBoundSub = UBound($avArray, 2) - 1
    If $iSubItem > $iUBoundSub Then $iSubItem = $iUBoundSub
    If $iSubItem < 0 Then
    ; will search for all Col
    $iSubItem = 0
    Else
    $iUBoundSub = $iSubItem
    EndIf

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

    For $j = $iSubItem To $iUBoundSub
    If Not $iCompare Then
    If Not $iCase Then
    For $i = $iStart To $iEnd Step $iStep
    If $iCompType And VarGetType($avArray[$i][$j]) <> VarGetType($vValue) Then ContinueLoop
    If $avArray[$i][$j] = $vValue Then Return $i
    Next
    Else
    For $i = $iStart To $iEnd Step $iStep
    If $iCompType And VarGetType($avArray[$i][$j]) <> VarGetType($vValue) Then ContinueLoop
    If $avArray[$i][$j] == $vValue Then Return $i
    Next
    EndIf
    Else
    For $i = $iStart To $iEnd Step $iStep
    If StringInStr($avArray[$i][$j], $vValue, $iCase) > 0 Then Return $i
    Next
    EndIf
    Next
    Case Else
    Return SetError(7, 0, -1)
    EndSwitch

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

    Return SetError(6, 0, -1)
    EndFunc ;==>_ArraySearch

    [/autoit]


    //\// Neue Suche:

    [autoit]

    $iSearchResult = _ArraySearch($aTempCleaned_RAW, $aTemp[$i][0], 0, 0, 1, 2)

    [/autoit]
  • _ArrayBinarySearch "übersieht"/klappt nicht

    • elcojon
    • 20. April 2014 um 22:29
    Zitat von elcojon

    Zur Frage :thumbup: : Warum "killt", wie du es so schöhn beschrieben hast, Binarysearch nicht die doppelten einträge?!

    Ladet euch das Script einfach runter, und Testet es selbst... es klappt einfach nich?! -______-

    PS:
    es sind im Endeffekt 9Zeilen Code...
    zum Anzeigen:

    über das

    [autoit]

    EndFunc ;==>__clearList

    [/autoit]


    schreibt ihr ein

    [autoit]

    Return $aTempCleaned_RAW

    [/autoit]

    und etwa ca um zeile 80-82 steht

    [autoit]

    __clearList($aTest)

    [/autoit]


    ersetzt das durch

    [autoit]

    $a=__clearList($aTest)
    _arrayDisplay($a)

    [/autoit]


    und ihr bekommt die (eigenlich wiederholungsFreie Tabelle) angezeit

  • _ArrayBinarySearch "übersieht"/klappt nicht

    • elcojon
    • 20. April 2014 um 22:20

    Ok ich versteh jz auch dein ansatz ^^ aber... das ist zu groß aufgebaut.

    Zur Frage :thumbup: : Warum "killt", wie du es so schöhn beschrieben hast, Binarysearch nicht die doppelten einträge?!

    Und jz nochmal kurz zum aufbau:

    Ausgangs Array =>>

    [autoit]

    $aTemp[6][2] = [["127.0.0.1","Lokales System"],["127.0.0.1","localhost"],["10.0.0.1","Gateway"],["10.123.200.254","Router_1"],["192.168.10.1","DMZ denkt euch was aus :D"],["10.123.200.254","Router1"]]

    [/autoit]

    die Informationen sind also faktisch, durch einen delimiter, von der IP getrennt.
    Wie in dem noch beigefügten Script:

    [autoit]

    #cs ====Tabelle sieht etwa so aus:====================================================

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

    ##########################################################
    ## 127.0.0.1 ___________# Lokales System _______________##
    ## 127.0.0.1 ___________# localhost ____________________##
    ## 10.0.0.1 ____________# Gateway ______________________##
    ## 10.123.200.254 ______# Router_1 _____________________##
    ## 192.168.10.1 ________# DMZ denkt euch was aus :D ____##
    ## 10.123.200.254 ______# Router1 ______________________##
    ##########################################################

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

    #ce ==================================================================================

    [/autoit]

    Die in der 2. Spalte befindliche Info lassen wir links liegen, wir arbeiten jetzt mit _arrayAdd (also rein 1Dimensional)
    Wir nehmen uns die oben abgebildete Tabelle (natürlich als array siehe "$aTemp[6][2] = [["127.0"...)

    und durchwandern sie mit einer For/Newxt schleife in Einzelnen Schritten:

    [autoit]

    For $i=$iStartIndex To UBound($aTemp,1) - 1

    [/autoit]


    oder einfacher

    [autoit]

    For $i=0 To UBound($aTemp) - 1 Step 1

    [/autoit]


    also von Anfang:0 bis variables ende (Arrayumfang-1, weil 0basieren!) Ubound($aTemp)-1

    (Jetzt erstellen wir ein 1 dimensionales Array names "$aTempCleaned_RAW" (weil arbeit mit _arrayAdd() nur 1ne Dim.)

    [autoit]

    $aTempCleaned_RAW[1]

    [/autoit]

    +=> Ein Leeres Array benötigt IMMER min. 1 Eintrag (der leer is aber egal).. darum das..._RAW[1])

    Und nun nochmal zu dem Schleifen inhalt der das eigentliche Problem dastellt:

    [autoit]

    _ArrayBinarySearch ($aTempCleaned_RAW,$aTemp[$i][0])

    [/autoit]


    Beim ersten durchlauf(also $i=0) nemhen wir also aus der Tabelle (oben) die Zeile 0 (da $i=0) und auch die erste Spalte(0, da ..."[$i][0])", mit der IP)
    => also wir haben jz schlicht die Aller 1. IP-Adresse.

    Nun schauen wir ob diese (1.IP-Adr.) in dem eben angelegen Array sind (natürlich jetzt noch nicht, aber später ist es möglich dass diese IP schon in der liste steht)
    Dies tun wir mit _ArrayBinarySearch($a_Such_In_Mir, $s_Was_du_auch_immer_suchen_moechtest)

    Syntax von _ArrayBinarySearch()
    Code
    #include <Array.au3>
    _ArrayBinarySearch($avArray, $vValue)
    
    
    Parameter:
    $avArray:    Das zu durchsuchende Array.
    $vValue:      Wert nach dem im Array gesucht werden soll.
    
    
    Rückgabewert
    
    
    Erfolg: Index wo der Wert im Array gefunden wurde.
    
    
    Fehler: -1, setzt @error
    @error:
    1 - $avArray ist kein Array
    2 - $vValue außerhalb der min und max Werte des Arrays
    3 - $vValue wurde im Array nicht gefunden
    4 - $iStart ist größer als $iEnd
    5 - $avArray ist kein 1-dimensionales Array
    Alles anzeigen

    Und WENN ein Fehler Auftritt (Rückgabewert also == (-1)) also der Eintrag NICHT gefunden wird, dann fügen wir ihn mittels _arrayadd hinzu.

    Und so testen wir jede IP der ausgangsTabelle.


    und zum Schluss biitte, guckt euch das angefügt Script an...

    :)

  • _ArrayBinarySearch "übersieht"/klappt nicht

    • elcojon
    • 20. April 2014 um 17:58

    Hallo

    auf den wunsch von president chip der Thread zur frage:

    Es geht um eine zusammenführung von div. IP-Listen (mitbeschreibung)
    1. Dim. = IP; 2. Dim. = beschreibung (kann variieren, daher auch kein _ArrayUnique möglich)

    Nun soll eine Neue Liste (array) erstellt werden in die nur einträge hinzugefügt werden, wenn sie nicht schon vorhanden sind.

    Wie oben beschrieben wird ein 2d-array angeliefert, ein neues 1d erstellt, und der rest in Codeform :P

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

    _ArraySort ($aTemp)

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

    Local $aTempCleaned_RAW[1]=["IPs"]

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

    For $i=$iStartIndex To UBound($aTemp,1) - 1 ; führ den block für jede IP-Adr. in der Liste ($aTemp) aus.

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

    $iSearchResult=_ArrayBinarySearch ($aTempCleaned_RAW,$aTemp[$i][0]) ; überprüft ob der Momentane Eintrag ($aTemp[$i][0], 0=Ip, 1=Info) schon in der neuen Liste ($aTempCleaned_RAW) vorhanden ist.

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

    ;_ArrayDisplay ($aTempCleaned_RAW,"$aTempCleaned_RAW") ; nur zum test ob es echt so logisch daneben läuft ^^

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

    If $iSearchResult== (-1) Then _ArrayAdd ($aTempCleaned_RAW,$aTemp[$i][0]) ; Beim Fehler auf -1 und @error - Wenn FEHLER dann Nicht Vorhanden =>> also eintrag hinzufügen.

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

    Next ; schließt bekanntlich den block

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


    anschließend würden die IPs mit der orginalliste verglichen und die informationen in die 2. dim. ergänzt aber das dürfte erstmal egal sein :)

    PS: BSP Liste:

    [autoit]

    $aTemp[6][2] = [["127.0.0.1","Lokales System"],["127.0.0.1","localhost"],["10.0.0.1","Gateway"],["10.123.200.254","Router_1"],["192.168.10.1","DMZ denkt euch was aus :D"],["10.123.200.254","Router1"]]

    [/autoit]


    Hoffe es versteht jmd ^^ und kann mir auch noch weiterhelfen :whistling: :thumbup:

    Dateien

    au3DE_Thread45103_SepUp.au3 4,21 kB – 283 Downloads
  • WinHttp - Arbeiten über Tor das Tor-Netzwerk

    • elcojon
    • 10. Juni 2013 um 23:24

    Okeee :D
    es geht darum das ein login auf einer testseite immer abschmirt wenn es anfragen von speziellen IPs bekommt... also länder bezogen. jz is erstmal die frage gewesen warum... und mir wurde angetragen doch erstmal fest zustellen ob es immer z.b. länderbezogen ist, oder ein bereich oder ein provider.

    leider besitze ich nich die befugnis die Seite zu publizieren :/

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™