Hallöchen,
Ich habe ein Array (aus einer Excel Tabelle) und möchte wissen, wie oft ein bestimmter Wert darin vorkommt. Also zum Beispiel bei einer Tabelle von 10000 Daten wie oft die Zahl 55 vorkommt. Kann mir jemand helfen?
TheLuBu
Hallöchen,
Ich habe ein Array (aus einer Excel Tabelle) und möchte wissen, wie oft ein bestimmter Wert darin vorkommt. Also zum Beispiel bei einer Tabelle von 10000 Daten wie oft die Zahl 55 vorkommt. Kann mir jemand helfen?
TheLuBu
$array[99999]
$array[0] = 0
$array[1] = 55
$array[2] = 55
$array[3] = 0
$test = _Arraygetvalnum($array,2)
msgbox(0,"",$test)
Func _Arraygetvalnum($urar,$Pos)
$arrvalnum = 0
For $i = 0 to Ubound($urar)-1
if $urar[$Pos] = $array[$i] Then $arrvalnum = $arrvalnum +1
Next
return $arrvalnum
Endfunc
oke gleiche wie schnitzel habs jetzt verbessert war nur unsicher kein autoit hier zum testen gehabt ._. sowas sollte ich eig wissen nja schadööö
$vergleich = 55
$count = 0
For $i = 0 To UBound($array) -1
If $array[$i] = $vergleich Then $count += 1
Next
ConsoleWrite('Treffer: ' & $count & @CRLF)
bugfix weißt du wie ichs als func richtig machen kann? dann hätte man das sozusagen als udf func :O
weil bei meiner müsste man ja das eine array reinsetzen ._.
sowas ist doch schnell selbst gebastelt
[autoit]Func _ArrayCount($array, $search, $index = 0)
$count = 0
For $i = $index To UBound($array) - 1
If $array[$i] = $search Then $count += 1
Next
Return $count
EndFunc
In der Funktion aber statt:
[autoit]Func _ArrayCount($array, $search, $index = 0)
[/autoit]besser:
[autoit]Func _ArrayCount(ByRef $array, $search, $index = 0)
[/autoit]
Das hat den Effekt, dass das Array nicht nochmal kopiert werden muss beim Funktionsaufruf, spart somit Speicher und Zeit. ByRef verwendet man i.A. um einen übergebenen Wert auch in der Quellvariablen verändern zu können aber der Effekt des Speicher-/Zeitsparens ist doch ganz angenehm.
Hallo TheLuBu,
schau dir doch mal _Array2DSearch von BugFix an. Gibt eine Array mit allen Fundstellen zurück, "- Array[0] enthält die Anzahl der Treffer" -> _Array2DSearch
Gruß
Steffen
Das hat den Effekt, dass das Array nicht nochmal kopiert werden muss beim Funktionsaufruf, spart somit Speicher und Zeit. ByRef verwendet man i.A. um einen übergebenen Wert auch in der Quellvariablen verändern zu können aber der Effekt des Speicher-/Zeitsparens ist doch ganz angenehm.
jup da haste Recht. Verwende ich leider viel zu selten...
Da war meine Lösung wiedermal Quick 'n Dirty
Ich hab jetzt mal das kleine Snippet von BugFix eingebaut, aber leider kriege ich da einen Fehler
Hier der Teil des Scripts:
[autoit]$Agentennamen = _ExcelReadSheetToArray($oExcel2,2, 5, 0, 1)
$Agentennameneinzeln = _ArrayUnique($Agentennamen, 2)
$AnzahlAgenten = UBound($Agentennameneinzeln)
$Anzahlgesamt = $Agentennameneinzeln[0]
While $Anzahlgesamt <> 1
_ExcelWriteCell($oExcel2, $Agentennameneinzeln[$Anzahlgesamt], $Anzahlgesamt, 1)
$vergleich = $Agentennameneinzeln[$Anzahlgesamt]
$count = 0
For $i = 0 To UBound($Agentennamen) -1
If $Agentennamen[$i] = $vergleich Then
$count = $count + 1
EndIf
Next
_ExcelWriteCell($oExcel2, $count,$Anzahlgesamt, 2)
$Anzahlgesamt = $Anzahlgesamt -1
WEnd
Den Fehler kriege ich:
[autoit]==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
If $Agentennamen[$i] = $vergleich Then
If ^ ERROR
Wo liegt der Fehler? oder klappt das Snippet nicht mit _ExcelReadSheetToArray?
TheLuBu
Zeile 7 noch ein -1 ein dran
uff oder warte gerade nochmal drüber gescahut und weiß nicht mehr wie ich drauf komme xD
doch sollte dann gehen
da dein script hier eine zahl zu weit geht array fängt ja bei 0 an
$AnzahlAgenten = UBound($Agentennameneinzeln)
$Anzahlgesamt = $Agentennameneinzeln[0]
Leider nein, immernoch der selbe Fehler.
Habe grade drüber nachgedacht, _ExcelReadSheetToArray liefert ein 2-dimensionales Array zurück. Kann es daran liegen? Wenn ja, kriegt man ein 2-dimensionales Array umgewandelt?
_ExcelReadSheetToArray gibt ein 2D array zurück
ah warum bei $Anzahlgesamt = $Agentennameneinzeln[0] das []? mach das mal weg und halt bei zeile 7 das
$vergleich = $Agentennameneinzeln[$Anzahlgesamt-1]
kann auch sein das der error am ende kommt mach kann sein das du die-1 früher setzen musst...
am besten wäre du würdest msg boxen oder _arraydisplays machen um den fehler zu finden
Bei $Anzahlgesamt = $Agentennameneinzeln[0] erhalte ich ja die Anzahl aller Namen, durch _arrayUnique wurden die ja gekürzt.
Ich versuchs grade mal mit dem _Array2DSearch von BugFix
Danke an allle, mit der Suche von Bugfix funktionierts!