Zwei Arrays mittels StarBasic einfach vergleichen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Zwei Arrays mittels StarBasic einfach vergleichen

Beitrag 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
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Zwei Arrays mittels StarBasic einfach vergleichen

Beitrag 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
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Zwei Arrays mittels StarBasic einfach vergleichen

Beitrag 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
Karolus
********
Beiträge: 7438
Registriert: Mo, 02.01.2006 19:48

Re: Zwei Arrays mittels StarBasic einfach vergleichen

Beitrag 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…
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Antworten