Seite 1 von 1

Zwei Arrays mittels StarBasic einfach vergleichen

Verfasst: So, 12.03.2017 13:11
von Stephan
Hallo,

ich möchte gerne zwei Arrays mittels StarBasic vergleichen, also im Prinzip Folgendes tun:

Code: Alles auswählen

Sub test()
	arr1 = ARRAY(1,2,3)
	arr2 = ARRAY(1,2,4)
	Msgbox arr1=arr2
End Sub
Das Makro bringt in dieser Form einen Laufzeitfehler.


Gibt es eine andere Möglichkeit das mittels StarBasic zu tun außer alle einzelnen Felder der Arrays zu vergleichen? Gesucht ist nur die Aussage das die Array-Inhalte völlig gleich oder nicht völlig gleich sind, nicht welche Unterschiede wo vorliegen.


Hintergrund:
ich möchte letztendlich zwei Arrays vergleichen die aus einem Tabellenblatt wie folgt gelesen wurden (Beispiel):

Code: Alles auswählen

arr = ThisComponent.Sheets(0).getCellRangeByName("A1:E10").getDataArray()
meiner Sorge ist das WENN ich einzelne Felder solcher Arrays vergleichen muss das das merklich zeitaufwändig wird wenn die Arrays zu groß werden (zumal ja die Inhalte der Felder von arr(), hier im Konkreten, selbst Arrays sind).


Gruß
Stephan

Re: Zwei Arrays mittels StarBasic einfach vergleichen

Verfasst: So, 12.03.2017 13:53
von Stephan
Nachtrag:

zu meiner Verwunderung läuft das folgende Makro nur ca. 2 Sekunden, trotzdem freue ich mich auf eine Antwort auf meine ursprüngliche Frage.

Code: Alles auswählen

Sub vergleich()
	fehler = 0
	gesamt = 0
	
	arr1 = ThisComponent.Sheets(0).getCellRangeByName("A1:GR200").getDataArray()
	arr2 = ThisComponent.Sheets(1).getCellRangeByName("A1:GR200").getDataArray()
	For i = 0 To 199
		arr1_tmp = arr1(i)
		arr2_tmp = arr2(i)
		For j = 0 To UBOUND(arr1_tmp())
			gesamt = gesamt + 1
			If arr1_tmp(j) <> arr2_tmp(j) Then
				fehler = fehler + 1
			End If
		Next j
	Next i
	Msgbox fehler & " | " & gesamt
End Sub

Re: Zwei Arrays mittels StarBasic einfach vergleichen

Verfasst: So, 12.03.2017 14:03
von F3K Total
Hi,
leider weiß ich keine Lösung, geht bestimmt mit Python, habe aber einen Test gemacht:
Um zwei Arrays à 26000 ganzen Zahlen miteinander zu vergleichen, braucht mein betagter 32-Bit Rechner Dual Core, 2,2 GHz maximal 0,49 Sekunden, wenn die Schleifen komplett durchlaufen, wird vorher ein Unterschied gefunden entsprechend schneller.
Hier mein Code:

Code: Alles auswählen

Sub Main
oSheet1 = ThisComponent.Sheets(0)
oSheet2 = ThisComponent.Sheets(1)
A1 = oSheet1.getCellrangeByName("A1:M2000").dataarray
A2 = oSheet2.getCellrangeByName("A1:M2000").dataarray

t1 = getsystemticks()
for i = 0 to uBound(A1)
 R1 = A1(i)
 R2 = A2(i)
 for k = 0 to uBound(R1)
 if R1(k)<>R2(k) then
     t2 = getsystemticks()
     msgbox "nicht gleich " & (t2-t1)/1000 & " s für " & (i+1)*(Ubound(R1)+1) & " Werte"
     exit sub
 endif
 next k
next i
t2 = getsystemticks()
msgbox "Gleich " & (t2-t1)/1000 & " s für " & (Ubound(A1)+1)*(Ubound(R1)+1) & " Werte"

End Sub
Gruß R

Re: Zwei Arrays mittels StarBasic einfach vergleichen

Verfasst: So, 12.03.2017 15:19
von Karolus
Hallo

Ja, in python wäre das mit einem schlichten:
print( A1==A2 )
getan.
Wenn dann noch ermittelt werden soll wo|welche Unterschiede bestehen, brauchts dann aber auch 3 bis 5 Zeilen…