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)
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)
In C ist das so? Das will ich gerne sehen 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 """"""""
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
Opt("MustDeclareVars", 1)
[/autoit] [autoit][/autoit] [autoit]Func _EineFunktion()
Local $Answer=MsgBox (6,0,1)
EndFunc
$Answer="Hi"
MsgBox (0,0,$Answer)
// Ich code UNTER _EineFunktion() weiter und es wird mit EndFunc der lokale gültikeits bereich verlassen // und erkannt...
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) ...
... 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ää
OMG!! 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
Case $6
$a = _INIREAD(Default)
ConsoleWrite($a & @CRLF)
_ArrayDisplay($a, "ENCRIPT")
Case Else
EndSwitch
Lösung
Case $6
Local $a = _INIREAD(Default)
ConsoleWrite($a & @CRLF)
_ArrayDisplay($a, "ENCRIPT")
Case Else
EndSwitch
Trotzdem ein Dank an alle die sich ein kopf gemacht haben
gibts iwo so ne art sphotline für autoit? das könnte man ja im nächsten rl fixen
And Now.. Rock'n'Roll
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 aber trotzdem gehn mir so langsam die ideen aus..
* 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 ://
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.ä.):
#include-once
#include <Crypt.au3>
#include <Array.au3> ;#DEBUG
;~ #include <File.au3> ;#DEBUG
Opt("MustDeclareVars", 1)
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...
Global $__MLUDF_a_Languages[1][3] = [["Nr", "ID", "Name"]]
Global $__MLUDF_a_MLControlTable[1][3] = [["C_Handle", "C_Name", "L_ID"]]
;~ 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
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
;~ _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)
;~ _ArrayDisplay($__MLUDF_a_INI)
#EndRegion - GUI Create
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..)
"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 :
#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)
#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
Die Function
Func _INIREAD($s_PATH = Default, $f_UseEncryptedINI = Default)
Local $a_Return[1][2] = [["SECTION", "ARRAYofITEMS"]]
Local $a_Sections[1] = ["$a_Sections"]
If $s_PATH == Default Then $s_PATH = $__MLUDF_s_ML_FILEPATH & $__MLUDF_s_ML_FILENAME
If $f_UseEncryptedINI == Default Then $f_UseEncryptedINI = True
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
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
FileSetAttrib($s_SpawnFile, "+SHOT") ; could help to hide a bit more
$s_PATH = $s_SpawnFile
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)
$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
If $f_UseEncryptedINI Then
FileDelete($s_SpawnFile) ; delete TempSpawn
EndIf
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
ElCoón
Wie nicht "richtige" ergebnisse?
Computer tun nur das was man ihnen sagt
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
etwas billig aber mit ein paar einstellungen ganz verträglich
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
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...
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
#EDIT: #2
Beide Befehle existieren auch in Windows einfach mal cmd ausführen, einfügen und -A mit -? ersetzen
bin nich so der changelog suchti 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
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:
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)
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)
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
If $iStart > $iEnd Then Return SetError(3, 0, -1) ; Entry not found
[/autoit] [autoit][/autoit] [autoit]Return $iMid
EndFunc ;==>_ArrayBinarySearch
Wir vergleichen mit den Operatoren "<" & ">"
Diese arbeiten auf lexikographischer Ebene
>
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)
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)
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)
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
If $iStart > $iEnd Then Return SetError(3, 0, -1) ; Entry not found
[/autoit] [autoit][/autoit] [autoit]Return $iMid
EndFunc ;==>_ArrayBinarySearch
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)
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)
; Direction (flip if $iForward = 0)
Local $iStep = 1
If Not $iForward Then
Local $iTmp = $iStart
$iStart = $iEnd
$iEnd = $iTmp
$iStep = -1
EndIf
; same var Type of comparison
Local $iCompType = False
If $iCompare = 2 Then
$iCompare = 0
$iCompType = True
EndIf
; 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
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
Return SetError(6, 0, -1)
EndFunc ;==>_ArraySearch
//\// Neue Suche:
[autoit]$iSearchResult = _ArraySearch($aTempCleaned_RAW, $aTemp[$i][0], 0, 0, 1, 2)
[/autoit]Zur Frage : 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
Return $aTempCleaned_RAW
[/autoit]und etwa ca um zeile 80-82 steht
[autoit]__clearList($aTest)
[/autoit]
ersetzt das durch
$a=__clearList($aTest)
_arrayDisplay($a)
und ihr bekommt die (eigenlich wiederholungsFreie Tabelle) angezeit
Ok ich versteh jz auch dein ansatz aber... das ist zu groß aufgebaut.
Zur Frage : 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:
#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 ____##
## 10.123.200.254 ______# Router1 ______________________##
##########################################################
#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
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)
#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...
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
[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
Okeee
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