Kann mir wer das mitm Array erklären ( hab ich noch nie verstanden :D). Wie wird das denn benutzt und so?
Schau mal in meine Signatur ==> Array-Tut
Kann mir wer das mitm Array erklären ( hab ich noch nie verstanden :D). Wie wird das denn benutzt und so?
Schau mal in meine Signatur ==> Array-Tut
doch das ist erlaubt, dafür gibts es sogar einen extra abteil
http://www.autoit.de/index.php?page=Board&boardID=34
glaube jedoch nicht, dass du eine antwort finden wirst fang doch einfach an und sag wo du probleme kriegst...
Lies bitte die Forenregeln, Bots sind hier tabu.
Wir hatten sie früher im verlinkten Bot-Forum geführt - aber da lauter Scriptkiddys, die ihr Seelenheil im Manipulieren von Spielen sehen, plötzlich unser Forum überschwemmten, haben wir uns generell dagegen entschieden.
Der Wunsch ist zwar sehr seltsam
- aber auch dieser wird erfüllt:
#include <array.au3>
#cs
[section]
schlüssel_A_bla=1
schlüssel_Z_bla=2
schlüssel_V_bla=3
schlüssel_B_bla=4
schlüssel_O_bla=5
schlüssel_E_bla=6
schlüssel_Q_bla=7
schlüssel_R_bla=8
schlüssel_B_bla=9
#ce
;~ $arINI = IniReadSection($INI, 'section')
;~ liefert:
Local $arINI[10][2] = [ _
[9], _
['schlüssel_A_bla',1], _
['schlüssel_Z_bla',2], _
['schlüssel_V_bla',3], _
['schlüssel_B_bla',4], _
['schlüssel_O_bla',5], _
['schlüssel_E_bla',6], _
['schlüssel_Q_bla',7], _
['schlüssel_R_bla',8], _
['schlüssel_X_bla',9]]
Local $ar2Sort[UBound($arINI)-1][4]
For $i = 1 To UBound($arINI) -1
$ar2Sort[$i-1][0] = StringLeft($arINI[$i][0], 10)
$ar2Sort[$i-1][1] = StringMid($arINI[$i][0], 11, 1)
$ar2Sort[$i-1][2] = StringRight($arINI[$i][0], StringLen($arINI[$i][0])-11)
$ar2Sort[$i-1][3] = $arINI[$i][1]
Next
_ArraySort($ar2Sort, 0, 0, 0, 1)
_ArrayDisplay($ar2Sort)
Local $arINIWrite[UBound($ar2Sort)][2]
For $i = 0 To UBound($ar2Sort) -1
$arINIWrite[$i][0] = $ar2Sort[$i][0] & $ar2Sort[$i][1] & $ar2Sort[$i][2]
$arINIWrite[$i][1] = $ar2Sort[$i][3]
Next
;~ Array zurückschreiben
;~ IniWriteSection($INI, 'section', $arINIWrite, 0)
Ich möchte eine Funktion für mehrere Variablen anwenden.
Eigentlich dachte ich mit Bitand schaffe ich es, leider funktioniert das ganze nicht.
Im Beispiel wird die Funktion nur auf Variable 1 angewendet.
Ich verstehe nicht, was du machen möchtest.
Wenn du 2 Variablen in der Funktion verwenden möchtest, solltest du auch 2 übergeben.
Bit-Operationen kannst du verwenden, wenn Konstanten eingesetzt werden, so wie das z.B. bei Styles für Controls der Fall ist.
Mehr über Bit-Operationen: s. Tut in meiner Signatur.
Erstmal das Array richtig deklarieren ![]()
Local $beispiel[5][5] = [[00,01,02,03,04], _
[10,11,12,13,14], _
[20,21,22,23,24], _
[30,31,32,33,34], _
[40,41,42,43,44]]
$beispiel[3][1] = 31
; 1.) ... die Ausgabe in eine MsgBox?
MsgBox(0, '', $beispiel[3][1])
; 2.) ... den Wert von 31 z. B. auf 37 abändern?
$beispiel[3][1] = 37
Hi,
es kommt häufiger vor, dass wir 2 verschiedene Mengen haben, die untersucht werden müssen auf gemeinsame oder unterschiedliche Elemente (Vergleichen von Arrays oder Strings).
Mit der Funktion _GetIntersection( ) werden aus 2 gegebenen Mengen,
- die als 1D-Array oder Trennzeichenbasierter String übergeben werden
- die Schnittmenge (gemeinsame Elemente)
- die Differenzmenge 1 (nur in Menge 1 enthaltene Elemente) und
- die Differenzmenge 2 (nur in Menge 2 enthaltene Elemente) ermittelt.- mehrfach vorkommende Elemente werden nur 1-mal ausgegeben
- mehrfach vorkommende Elemente der Differenzmengen werden wahlweise kpl. oder 1-mal ausgegeben
- der Vergleich ist Case-Sensitiv, also [9] <> '9'
- Rückgabe erfolgt in einem 2D-Array ([n][0]=Schnittmenge; [n][1]=Diff1; [n][2]=Diff2)
EDIT: Differenzmengen wahlweise komplett oder einmalig zurückgeben
EDIT 14.10.2008
- für $Delim wird als Standard 'Default' verwendet und damit das Trennzeichen aus Opt("GUIDataSeparatorChar")
- gefixed: Fehler bei Verwendung von @CRLF alsTrennzeichen
#include <array.au3>
Local $1 = '1,1,2,3,3,3,4,4,5,6,7'
Local $2[10] = ['5','5','5','8','8','9','12','12','3','1']
Local $ret = _GetIntersection($1, $2, 0, ',')
If IsArray($ret) Then _ArrayDisplay($ret)
Local $ret = _GetIntersection($1, $2, 1, ',')
If IsArray($ret) Then _ArrayDisplay($ret)
;==================================================================================================
; Function Name: _GetIntersection($Set1, $Set2 [, $GetAll=0 [, $Delim=Default]])
; Description:: Aus 2 gegebenen Mengen werden ermittelt
; - die Schnittmenge (Elemente, die in beiden Mengen enthalten sind)
; - die Differenzmenge 1 (Elemente, die nur in Menge 1 vorkommen)
; - die Differenzmenge 2 (Elemente, die nur in Menge 2 vorkommen)
; Parameter(s): $Set1 Menge 1 (1D-Array od. Trennzeichenbasierter String)
; $Set2 Menge 2 (1D-Array od. Trennzeichenbasierter String)
; optional: $GetAll 0 - mehrfach vorhandenen Elemente der Differenzmengen werden einmalig ausgegeben (Standard)
; 1 - mehrfach vorhandenen Elemente der Differenzmengen werden komplett ausgegeben
; optional: $Delim Trennzeichen für String (Standard 'Default' nutzt Zeichen aus Opt("GUIDataSeparatorChar"))
; Return Value(s): Erfolg 2D-Array [i][0]=Schnittmenge
; [i][1]=Differenzmenge 1
; [i][2]=Differenzmenge 2
; Fehler -1 @error als Array übergebene Menge ist kein 1D-Array
; Note: Der Vergleich ist Case-Sensitiv! - Ein Array-Element [9] ist also <> String '9'!!
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _GetIntersection(ByRef $Set1, ByRef $Set2, $GetAll=0, $Delim=Default)
Local $o1 = ObjCreate("System.Collections.ArrayList")
Local $o2 = ObjCreate("System.Collections.ArrayList")
Local $oUnion = ObjCreate("System.Collections.ArrayList")
Local $oDiff1 = ObjCreate("System.Collections.ArrayList")
Local $oDiff2 = ObjCreate("System.Collections.ArrayList")
Local $tmp, $i
If $GetAll <> 1 Then $GetAll = 0
If $Delim = Default Then $Delim = Opt("GUIDataSeparatorChar")
If Not IsArray($Set1) Then
If Not StringInStr($Set1, $Delim) Then
$o1.Add($Set1)
Else
$tmp = StringSplit($Set1, $Delim, 1)
For $i = 1 To UBound($tmp) -1
$o1.Add($tmp[$i])
Next
EndIf
Else
If UBound($Set1, 0) > 1 Then Return SetError(1,0,-1)
For $i = 0 To UBound($Set1) -1
$o1.Add($Set1[$i])
Next
EndIf
If Not IsArray($Set2) Then
If Not StringInStr($Set2, $Delim) Then
$o2.Add($Set2)
Else
$tmp = StringSplit($Set2, $Delim, 1)
For $i = 1 To UBound($tmp) -1
$o2.Add($tmp[$i])
Next
EndIf
Else
If UBound($Set2, 0) > 1 Then Return SetError(1,0,-1)
For $i = 0 To UBound($Set2) -1
$o2.Add($Set2[$i])
Next
EndIf
For $tmp In $o1
If $o2.Contains($tmp) And (Not $oUnion.Contains($tmp)) Then $oUnion.Add($tmp)
Next
For $tmp In $o2
If $o1.Contains($tmp) And (Not $oUnion.Contains($tmp)) Then $oUnion.Add($tmp)
Next
For $tmp In $o1
If $GetAll Then
If Not $oUnion.Contains($tmp) Then $oDiff1.Add($tmp)
Else
If Not $oUnion.Contains($tmp) And Not $oDiff1.Contains($tmp) Then $oDiff1.Add($tmp)
EndIf
Next
For $tmp In $o2
If $GetAll Then
If Not $oUnion.Contains($tmp) Then $oDiff2.Add($tmp)
Else
If Not $oUnion.Contains($tmp) And Not $oDiff2.Contains($tmp) Then $oDiff2.Add($tmp)
EndIf
Next
Local $UBound[3] = [$oDiff1.Count,$oDiff2.Count,$oUnion.Count], $max = 1
For $i = 0 To UBound($UBound) -1
If $UBound[$i] > $max Then $max = $UBound[$i]
Next
Local $aOut[$max][3]
If $oUnion.Count > 0 Then
$i = 0
For $tmp In $oUnion
$aOut[$i][0] = $tmp
$i += 1
Next
EndIf
If $oDiff1.Count > 0 Then
$i = 0
For $tmp In $oDiff1
$aOut[$i][1] = $tmp
$i += 1
Next
EndIf
If $oDiff2.Count > 0 Then
$i = 0
For $tmp In $oDiff2
$aOut[$i][2] = $tmp
$i += 1
Next
EndIf
Return $aOut
EndFunc ;==>_GetIntersection
Zu deiner Frage ein klares Jein. ![]()
Also eigentlich Nein, aber wenn du sicherstellen möchtest, dass z.B. nur mit numerischen Werten gearbeitet wird kannst du definitiv festlegen: $var = Number($var), oder auch mit IsNUmber($var) prüfen. (analog bei den anderen Typen - s. Funktionen in der Hilfe)
In AutoIt gibt es nur den Variablentyp Variant.
Somit wird durch die Operation die entsprechende Variablenform automatisch gewählt.
Wenn du eine Verkettung willst, einfach den & - Operator verwenden.
Aichi, Aichi...
du machst es uns nicht leicht.
Eine Variable ist ein Container, die hat immer denselben Namen - aber den Inhalt kannst du tauschen.
$Variable = 1000 ;<== jetzt enthält der Container mit dem Namen $Variable die Zahl "1000"
MsgBox(0,'', $Variable) ;<== und hier fragst du den Inhalt des Containers mit Namen $Variable ab
$Variable = "Das ist doch easy!" ;<== nun enthält der Container den String "Das ist doch easy!"
; Durch Zuweisung eines neuen Inhaltes wird der alte Inhalt aus der Variablen entfernt.
Lies mal Grundlagenliteratur zur allgemeinen Programmierung. ![]()
ohh ha, naja also eher nich zu öffnen, danke für die infos
aber wenn ich nen programm habe was da was macht, kann man ja das erklären und dann kann man ja die ganzen befefehle rausbekommen denk ich mal oder?
also danke für die infos
Ich dachte, dass dir aus pee's Äußerungen klargeworden ist, welchen Standpunkt wir in Bezug auf RE vertreten. Insofern sind weitere Erörterungen über das Ob und Wie der eventuellen Möglichkeiten auch nicht erwünscht.
[Topic Closed]
Okay, ich zeige hiermit Reue...
Eine letzte Frage: Wie kann man so Dateien übertragen?
Die Datei "zerhackstückeln"
in überschaubare Pakete (so 8.192 Byte groß) und diese senden.
Also, wenn ich das jetzt richtig verstanden hab, suchst du sowas:
[autoit]#include <array.au3>
Local $arAD[6] = [ _
'CN=UVW_GROUP,CN=Users,DC=d,DC=d,DC=d,DC=d', _
'CN=ITSC_Helpdesk,OU=Groups,OU=ITSC,OU=_OE,DC=d,DC=d,DC=d,DC=d', _
'CN=SophosAdministrator,OU=Users,OU=_Admins,DC=d,DC=d,DC=d,DC=d', _
'CN=Account Operators,CN=Builtin,DC=d,DC=d,DC=d,DC=d', _
'CN=BANKING_GROUP,CN=Builtin,DC=d,DC=d,DC=d,DC=d', _
'CN=Administrators,CN=Builtin,DC=d,DC=d,DC=d,DC=d']
Local $arGroupUser[4][2] = [ _ ; Auslesen INI
[3], _
['UVW_GROUP','\YD$\'], _
['ALG_GROUP','\Daten$'], _
['BANKING_GROUP','\elba5']]
Local $arMap[1]
For $i = 0 To UBound($arAD) -1
$arTmp = StringSplit($arAD[$i], ',')
$search = StringTrimLeft($arTmp[1], 3)
$indx = _ArraySearch($arGroupUser, $search)
If Not @error Then _ArrayAdd($arMap, $arGroupUser[$indx][1])
Next
_ArrayDisplay($arMap) ; mit dem Array kannst du dann das Mapping ausführen
Wichtige Kommandos?
Welche Funktionen du verwendest hängt ganz von deinem Weg zum Ziel ab. Z.B. kannst du aus einem String Daten mit _StringBetween oder aber auch mit StringRegExp filtern. Unterschiedliche Wege, die zum selben Ziel führen können.
Man kann nicht einfach 'losprogrammieren'. Du brauchst erst mal ein Konzept, mußt dir über den logischen Ablauf im Klaren sein. Wenn das steht, setzt du es um in Programmcode. ![]()
Bei so nettem Dankeschön, helfen wir doch immer wieder gern. ![]()
Prozentrechnung ![]()
#include <GUIConstants.au3>
#include <ProgressConstants.au3>
Local $SleepDiff, $SleepTime = 10 *1000
[/autoit][autoit][/autoit][autoit]$gui = GUICreate('')
$Progress = GUICtrlCreateProgress(10,10,200,20,$PBS_SMOOTH)
$label = GUICtrlCreateLabel('', 220, 13, 40, 17)
GUISetState()
$SleepTimer = TimerInit()
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Or $SleepDiff = 100 Then Exit
$SleepDiff = TimerDiff($SleepTimer)/$SleepTime*100 ; Prozentrechnung ![]()
If $SleepDiff > 100 Then $SleepDiff = 100
GUICtrlSetData($label, StringFormat("%0.2f %%", $SleepDiff) )
GUICtrlSetData($Progress, $SleepDiff)
WEnd
da die Pfade von Computerprofis angelegt wurden sehen sie ca so aus: /Kunde Berater 34/Daten des Kunden, Beratung offen!/
Das ist doch schon ein Widerspruch in sich. Wenn jemand solche Pfade erstellt, hat er das Recht verwirkt sich Profi zu nennen. ![]()
Nur, weil man etwas machen kann, heißt es noch lange nicht, dass man es auch tun muss.
Und Sonderzeichen in Ordner- oder Dateinamen sind einfach krank. :wacko:
Hi,
ist nicht sehr kompliziert:
$INI = 'Dateipfad_Deiner.INI'
$arSections = IniReadSectionNames($INI)
$Free = ''
For $i = 1 To UBound($arSections) -1
If IniRead($INI, $arSections[$i], 'Available', -1) = 0 Then $Free &= $arSections[$i] & ','
Next
If StringLen($Free) > 0 Then
$Free = StringTrimRight($Free, 1)
Else
$Free = 'Keine'
EndIf
MsgBox(0, '', 'Freie Speicherplätze: ' & $Free)
Es gibt kein "altes" oder "neues" Listview-Control. Es wird nur unterschiedlich generiert.
Die LV-Form in der UDF gibt ein Handle zurück - alle weiteren Funktionen der UDF erfordern dieses.
Um alle UDF-Funktionen mit dem "alten" LV nutzen zu können:
$ListView = GUICtrlCreateListView(....) ; gibt ID zurück
$hListView = GUICtrlGetHandle($ListView) ; gibt das Handle zurück
Ich handhabe das grundsätzlich so, und hatte bisher keinerlei LV-Probleme.
Du hast ja soooo recht
- an die Negation durch Großbuchstaben denke ich nie, bin irgendwie auf die Kleinen orientiert. ![]()