[gelöst] Array mit Array befüllen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [gelöst] Array mit Array befüllen

Re: [gelöst] Array mit Array befüllen

von Karolus » Do, 14.09.2023 09:29

Hallo
Ich versuchs nochmal :

Code: Alles auswählen

some_list = array(1, 2, 3, 4)
msgbox( join(some_list, chr(9))) '-> 1	2	3	4
some_list(0) = 42
msgbox( join(some_list, chr(9))) '-> 42	2	3	4
hier erwartest du doch auch das »some_list« geändert wird, und in deinem Ausgangspost tust du sinngemäss das gleiche, (es macht halt keinen Unterschied ob du »tmplist« zwischendrin in einen anderen Koffer steckst oder nicht!

Re: [HILFE] Array mit Array befüllen

von drbrode » Mi, 13.09.2023 17:11

OK... ich habe den entsprechenden Eintrag jetzt bei Pitonyak (Kapitel 3.5.2) gefunden.

Dort wird das Verhalten mit Beispielen beschrieben. Ich habe schon so einiges programmiert aber das war mir komplett neu. Jetzt habe ich es aber kapiert.

Ich danke dir vielmals für deine Geduld und den Crashkurs!

Re: [HILFE] Array mit Array befüllen

von Karolus » Mi, 13.09.2023 16:36

Hallo
übertrage ich doch den Inhalt von "tmpList" auf "List(n)".
nein du steckst die komplette tmplist in die Position n von List, im nächsten Durchlauf überschreibst du nicht tmplist als ganzes sondern nur deren Inhalte.
Ich hab dir mal ne msgbox eingebaut die am Ende der Schleife den Inhalt von List(0) ausgibt.

Code: Alles auswählen

sub test7
	dim List(3)
	dim tmpList(2)
	for n = 0 to 3
		tmpList(0) = n
		tmpList(1) = n
		tmpList(2) = n
		List(n) = tmpList
		if n=0 then
		    msgbox( "ich bin tmplist mit dem Inhalt" &chr(10) & join(List(0), chr(10)))
		else
		    msgbox( "ich bin immernoch tmplist aber mit neuem Inhalt" &chr(10) & join(List(0), chr(10)))
		end if
	next n
end sub

Re: [HILFE] Array mit Array befüllen

von drbrode » Mi, 13.09.2023 15:45

Karolus hat geschrieben: Mi, 13.09.2023 13:11 Hallo
»a« wird in jedem Durchlauf neu definiert, das ist bei tmpList nicht geschehen, da hast du lediglich den Inhalt der bestehenden tmpList geändert!
Fällt der Groschen?
Da fehlen mir anscheinend ein paar Grundkenntnisse. Ich checks auch nicht wirklich...

Durch

Code: Alles auswählen

List(n) = tmpList
übertrage ich doch den Inhalt von "tmpList" auf "List(n)". "List(n)" enthält danach doch ein Array mit dem Inhalt (1, 1, 1) (zum Beispiel). Was hat denn dieser Inhalt danach dann noch mit dem Array "tmpList" zu tun?

Re: [HILFE] Array mit Array befüllen

von Karolus » Mi, 13.09.2023 13:11

Hallo
»a« wird in jedem Durchlauf neu definiert, das ist bei tmpList nicht geschehen, da hast du lediglich den Inhalt der bestehenden tmpList geändert!
Fällt der Groschen?

Re: [HILFE] Array mit Array befüllen

von drbrode » Mi, 13.09.2023 12:54

Karolus hat geschrieben: Mi, 13.09.2023 12:38 Nein, du füllst in jedem Durchlauf »tmpList« mit neuen Werten, das ändert aber global »tmpList« und deshalb hast du am Ende alles mit Werten aus dem letzten Schleifendurchlauf. (python würde sich da genauso verhalten, wenn ich das so kompliziert hinschreibe)
Will dich nicht nerven aber da muss ich jetzt nochmal nachhaken. Folgender Code (ich weiß das macht so keinen wirklichen Sinn, es geht mir aber ums Prinzip)

Code: Alles auswählen

sub test
	dim List(3)
	for n = 0 to 3
		a = n
		List(n) = a
	next n
end sub
liefert als Ergebnis ein Array mit

0
1
2
3

Hier wird doch genauso den Elementen des Arrays "List" eine Variable "a" zugewiesen, die sich mit jedem Durchlauf ändert. Trotzdem wirkt sich die nachträgliche Änderung von "a" in diesem Fall nicht auf die vorherigen Elemente des Arrays aus. Der einzige Unterschied ist, dass diesemal nicht ein Array sondern eine einzelne Variable zugewiesen wird.

Re: [HILFE] Array mit Array befüllen

von Karolus » Mi, 13.09.2023 12:45

drbrode hat geschrieben: Mi, 13.09.2023 12:28

Das ist jetzt ein wenig "off-topic" aber Oo verlangt bei der Erstellung von javascript- und auch python-Makros eine JAVA-Laufzeitumgebung (JRE). Die gibts bei mir anscheinend nicht.
Nein … das ist eine falsche Fehlermeldung die seit langem in OO|AOO auftaucht. Die JRE wird nur noch für Datenbankanbindungen gebraucht.
Arbeitet deine Firma tatsächlich noch mit AOO? Wirds da nicht mal Zeit auf LibreOffice zu wechseln?
Das wäre sicherlich ein workaround, wenn auch ein wenig komplizierter.
Warum ist das ein »workaround« und was zum Geier ist da jetzt komplizierter ( so allgemein im Vergleich zu deiner offenbar nicht funktionierenden Lösung) ??

Re: [HILFE] Array mit Array befüllen

von Karolus » Mi, 13.09.2023 12:38

Nein, du füllst in jedem Durchlauf »tmpList« mit neuen Werten, das ändert aber global »tmpList« und deshalb hast du am Ende alles mit Werten aus dem letzten Schleifendurchlauf. (python würde sich da genauso verhalten, wenn ich das so kompliziert hinschreibe)

Re: [HILFE] Array mit Array befüllen

von drbrode » Mi, 13.09.2023 12:28

python ist seit mindestens 20 Jahren »ein Bordmittel« in OpenOffice … AOO…Libreoffice, im Idealfall (also bei Linux-distributionen) dann direkt gegen den python-interpreter des Systems gelinkt.
Das ist jetzt ein wenig "off-topic" aber Oo verlangt bei der Erstellung von javascript- und auch python-Makros eine JAVA-Laufzeitumgebung (JRE). Die gibts bei mir anscheinend nicht.

Re: [HILFE] Array mit Array befüllen

von drbrode » Mi, 13.09.2023 12:24

Karolus hat geschrieben: Mi, 13.09.2023 12:05 Hallo

Code: Alles auswählen

sub test6
	dim List(3)
	for n = 0 to 3
		List(n) = array(n, n, n)
	next n
end sub
Das wäre sicherlich ein workaround, wenn auch ein wenig komplizierter.

Was mich aber eigentlich wurmt, ist das Verhalten des Codes an sich. Ich weise doch in jeder Schleife den Elementen meines Arrays "List" das Array "tmpList" zu. Meines Wissens sollten im Array "List" dabei doch nur die Inhalte von tmpList gespeichert werden. Stattdessen wird aber anscheinend die Variable "tmpList" selbst zugewiesen, was zur Folge hat, dass eine nachträgliche Änderung von "tmpList" Einfluss auf die Werte des Arrays "List" hat. Das dürfte doch so eigentlich nicht sein...

Re: [HILFE] Array mit Array befüllen

von Karolus » Mi, 13.09.2023 12:13

drbrode hat geschrieben: Mi, 13.09.2023 12:04
Karolus hat geschrieben: Mi, 13.09.2023 11:46 Hallo
Mit python ein Einzeiler:

Code: Alles auswählen

out = [ [n] * 3 for n in range(4)]
so einfach … und trotzdem kleben die Helden am Basic!
Ist leider nicht meine Entscheidung. Für meine Firma erstelle ich Tabellen mit Makrofunktionen zur Datenverarbeitung. Das Ganze so nebenbei, weil es niemand anders kann und kein Geld für "richtige" Software ausgegeben wird. Dazu kommt noch, dass unsere IT besessen ist vom Sicherheitsgedanken und so gut wie keine zusätzliche Software auf den Arbeitsplatzrechnern zulässt. Ich muss also mit Bordmitteln auskommen.
Mir ist bewusst, dass meine Erklärung voller Widersprüche ist. Aber es ist nunmal die Realität... :(
python ist seit mindestens 20 Jahren »ein Bordmittel« in OpenOffice … AOO…Libreoffice, im Idealfall (also bei Linux-distributionen) dann direkt gegen den python-interpreter des Systems gelinkt.

Re: [HILFE] Array mit Array befüllen

von Karolus » Mi, 13.09.2023 12:05

Hallo

Code: Alles auswählen

sub test6
	dim List(3)
	for n = 0 to 3
		List(n) = array(n, n, n)
	next n
end sub

Re: [HILFE] Array mit Array befüllen

von drbrode » Mi, 13.09.2023 12:04

Karolus hat geschrieben: Mi, 13.09.2023 11:46 Hallo
Mit python ein Einzeiler:

Code: Alles auswählen

out = [ [n] * 3 for n in range(4)]
so einfach … und trotzdem kleben die Helden am Basic!
Ist leider nicht meine Entscheidung. Für meine Firma erstelle ich Tabellen mit Makrofunktionen zur Datenverarbeitung. Das Ganze so nebenbei, weil es niemand anders kann und kein Geld für "richtige" Software ausgegeben wird. Dazu kommt noch, dass unsere IT besessen ist vom Sicherheitsgedanken und so gut wie keine zusätzliche Software auf den Arbeitsplatzrechnern zulässt. Ich muss also mit Bordmitteln auskommen.
Mir ist bewusst, dass meine Erklärung voller Widersprüche ist. Aber es ist nunmal die Realität... :(

Re: [HILFE] Array mit Array befüllen

von Karolus » Mi, 13.09.2023 11:46

Hallo
Mit python ein Einzeiler:

Code: Alles auswählen

out = [ [n] * 3 for n in range(4)]
so einfach … und trotzdem kleben die Helden am Basic!

[gelöst] Array mit Array befüllen

von drbrode » Mi, 13.09.2023 10:36

Hallo zusammen,

ich habe heute ein sehr seltsames Verhalten eines Makros festgestellt, welches ich so nicht erwartet habe. Konkret geht es um dieses Script

Code: Alles auswählen

sub test6
	dim List(3)
	dim tmpList(2)
	for n = 0 to 3
		tmpList(0) = n
		tmpList(1) = n
		tmpList(2) = n
		List(n) = tmpList
	next n
end sub
Meine Erwartung war, dass sich im Array "List" am Ende vier "Unterarrays" befinden, die mit unterschiedlichen Werten gefüllt sind. Also

(0, 0, 0)
(1, 1, 1)
(2, 2, 2)
(3, 3, 3)

Stattdessen ergalte ich

(3, 3, 3)
(3, 3, 3)
(3, 3, 3)
(3, 3, 3)

Ist das normal und so gewollt? Kann ich mir irgendwie nicht vorstellen.
Ich habe jetzt schon eine längere Zeit nichts mehr programmiert, bin mir aber relativ sicher, dass das vor einiger Zeit noch nicht so war. Oder stehe ich hier gerade komplett auf dem Schlauch...?

Bin dankbar für eure Kommentare!

Nach oben