[HILFE] durch String auf Variable hinweisen

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

Moderator: Moderatoren

drbrode
**
Beiträge: 20
Registriert: Di, 29.11.2016 14:10

[HILFE] durch String auf Variable hinweisen

Beitrag von drbrode » Do, 19.07.2018 11:08

Hallo,

ich stehe gerade voll auf dem Schlauch. Vielleicht ist es ganz einfach aber ich komm nicht drauf.

Hoffentlich kann ich mich verständlich ausdrücken.

Hier mein Code (nur ein Auszug, wurde stark vereinfacht):

Code: Alles auswählen

sub test

Dim myArray(1)

myArray(0) = "A"
myArray(1) = "B"

mySource = "myArray"

myParameter = ??? 'hier soll auf den Inhalt des Arrays [myArray] verwiesen werden

end sub
An der Stelle

Code: Alles auswählen

myParameter = 
weiß ich nur den Inhalt der Variablen "mySource". Dieser Inhalt (string) heißt genauso wie das Array, welches ich der Variablen "myParameter" zuweisen möchte. Mein Problem ist nun, wie kann ich den Inhalt einer string-Variablen dazu verwenden um eine Variable mit identischem Namen anzusprechen (verständlich?).

Ich denke die Lösung wäre ähnlich der Funktion INDIREKT() in calc selber. Hier kann man ja durch INDIREKT("A1") den Inhalt der Zelle A1 ansprechen. Gibt es einen ähnlichen Befehl auf zur Verwendung im Makro?

Danke für jede Hilfe!!!

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

Re: [HILFE] durch String auf Variable hinweisen

Beitrag von Stephan » Do, 19.07.2018 11:25

meiner Meinung nach geht nur ein Abprüfen einer begrenzten Menge von Variablennamen, z.B.:

Code: Alles auswählen

Select Case mySource
  Case "myArray"
    myParameter = myArray
  Case "BlaBla"
    myParameter = blabla
  'Case ...

End Select
Vielleicht kennt jemand doch eine bessere Lösung?


Gruß
Stephan

drbrode
**
Beiträge: 20
Registriert: Di, 29.11.2016 14:10

Re: [HILFE] durch String auf Variable hinweisen

Beitrag von drbrode » Do, 19.07.2018 11:30

Ja, das ginge.

Nur dann müsste ich ja an der Stelle bereits alle möglichen Inhalte von "mySource" kennen und unterscheiden.

Ich möchte das Ganze aber möglichst flexibel gestalten und ohne Code-Änderungen auf andere Inhalte reagieren können.

Trotzdem vielen Dank für deine Rückmeldung!

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

Re: [HILFE] durch String auf Variable hinweisen

Beitrag von Stephan » Do, 19.07.2018 19:37

drbrode hat geschrieben:
Do, 19.07.2018 11:30
Ja, das ginge.

Nur dann müsste ich ja an der Stelle bereits alle möglichen Inhalte von "mySource" kennen und unterscheiden.

Ich möchte das Ganze aber möglichst flexibel gestalten und ohne Code-Änderungen auf andere Inhalte reagieren können.

Trotzdem vielen Dank für deine Rückmeldung!
OK. Darf ich dann trotzdem einmal fragen was ich schon heute früh fragen wollte:

Welchen praktischen Anwendungsfall gibt es denn?

Interessant finde ich das Thema durchaus, nur ich verstehe nicht wie das Ganze in der Praxis zum Einsatz kommen soll, weil doch bei Änderungen zumindest an einer Stelle der Name geändert werden muss (zumindest fällt mir kein Gegenbeispiel ein), dann jedoch wäre eigentlich folgende Vorgehensweise besser:

Code: Alles auswählen

Dim myArray(1)

myArray(0) = "A"
myArray(1) = "B"

myParameter =  myArray
Ich frage auch nach einem Beispiel weil Dein Problem vielleicht ist nicht zu wissen das Du auch das Array als Parameter an eine Funktion oder Sub übergeben kannst und nicht nur Strings, also z.B.:

Code: Alles auswählen

Sub main()
Dim myArray(1) 

myArray(0) = "A"
myArray(1) = "B"

myParameter =  myFunction(myArray)
Msgbox myParameter
End Sub

Function myFunction(par) As String
myFunction = par(0)
End Function



Gruß
Stephan

drbrode
**
Beiträge: 20
Registriert: Di, 29.11.2016 14:10

Re: [HILFE] durch String auf Variable hinweisen

Beitrag von drbrode » Fr, 20.07.2018 11:37

Welchen praktischen Anwendungsfall gibt es denn?
Mein Ansatz und Gedankengang, der mich letztendlich vor dieses Problem gestellt hat ist recht kompliziert. Ich will aber mal versuchen ihn zu erklären.

Letztendlich möchte ich mit einem sehr flexiblen Code verschiedene Eingabefelder in einem Dialog aktualisieren, auslesen und bearbeiten. Ich lasse bei Änderungen an einem Feld ein Makro laufen und verwende "action.source.model.name" um zu erkennen um was für eine Art Feld es sich handelt (z.B. "TF_..." im Namen steht für Textfeld). Um jetzt z.B. Daten für ein Listenfeld einzulesen, habe ich dem Datensatz denselben Variablennamen gegeben, den das Listenfeld als Namen trägt. So komme ich zu meiner Frage. (Ist jetzt sehr vereinfacht beschrieben.)

Wahrscheinlich gibt es auch andere Wege das zu realisieren. Vielleicht denke ich auch viel zu kompliziert. Ggf. wirst du jetzt auch auf den "Listener" verweisen. Dazu muss ich jedoch sagen, dass ich mir bisher nahezu alles selbst angelesen und beigebracht habe. Ich denke ich habe auch schon recht viel gelernt aber bei der Verwendung von "Listenern" hört es bei mir auf. Da steige ich leider nicht mehr durch.

Beste Grüße!

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

Re: [HILFE] durch String auf Variable hinweisen

Beitrag von Stephan » Fr, 20.07.2018 12:08

Letztendlich möchte ich mit einem sehr flexiblen Code verschiedene Eingabefelder in einem Dialog aktualisieren, auslesen und bearbeiten. Ich lasse bei Änderungen an einem Feld ein Makro laufen und verwende "action.source.model.name" um zu erkennen um was für eine Art Feld es sich handelt (z.B. "TF_..." im Namen steht für Textfeld). Um jetzt z.B. Daten für ein Listenfeld einzulesen, habe ich dem Datensatz denselben Variablennamen gegeben, den das Listenfeld als Namen trägt. So komme ich zu meiner Frage. (Ist jetzt sehr vereinfacht beschrieben.)
Ich weiß nicht wo die Inhalte der Variablen herkommen und wie sie ggf. vorher aufbereitet werden (müssen), aber man könnte statt der letztendlichen Zuweisungen der Form:

Code: Alles auswählen

mein_sprechender_Variablenname_1 = "blabla"
mein_sprechender_Variablenname_2 = 789
mein_sprechender_Variablenname_3 = Array("A","B")
auch ein Array verwenden in der Form:

Code: Alles auswählen

Dim mA(2,1) As Variant

mA(0,0) = "mein_sprechender_Variablenname_1"
mA(1,0) = "mein_sprechender_Variablenname_2"
mA(2,0) = "mein_sprechender_Variablenname_3"
mA(0,1) = "blabla"
mA(1,1) = 789
mA(2,1) = Array("A","B")
dann könnte man so auswerten:

Code: Alles auswählen

Sub work(rueck)
	akt = rueck.Source.Model.Name
	For i = 0 To 2
		If mA(i,0) = akt Then
			'tue was mit mA(i,1)
		End If
	Next i
End Sub
Gruß
Stephan

drbrode
**
Beiträge: 20
Registriert: Di, 29.11.2016 14:10

Re: [HILFE] durch String auf Variable hinweisen

Beitrag von drbrode » Mo, 23.07.2018 09:02

auch ein Array verwenden in der Form:

Code: Alles auswählen

Dim mA(2,1) As Variant

mA(0,0) = "mein_sprechender_Variablenname_1"
mA(1,0) = "mein_sprechender_Variablenname_2"
mA(2,0) = "mein_sprechender_Variablenname_3"
mA(0,1) = "blabla"
mA(1,1) = 789
mA(2,1) = Array("A","B")
Hallo Stephan,

diesen Ansatz hatte ich auch schon im Kopf. Das würde auch gehen. Da das Array ggf. jedoch sehr groß werden wird würde ich das Ganze etwas übersichtlicher aufziehen wollen. Hierzu würde ich zunächst einzelne eindimensionale Arrays erstellen wollen und diese dann zu einem mehrdimensionalen zusammenfassen. Jedoch weiß ich auch nicht wie ich das hinkriege. :(

Angenommen ich habe drei Arrays mit unterschiedlicher Anzahl an Einträgen:

Code: Alles auswählen

A(0) = "A0"
A(1) = "A1"
A(2) = "A2"
B(0) = "B0"
C(0) = "C0"
C(1) = "C1"
Kann ich diese jetzt mit einem einfachen Befehl zusammenfassen, wobei die fehlenden Bereiche des resultierenden Arrays einfach mit leeren Inhalten gefüllt werden? Das Problem dabei ist, dass ich am Anfang nicht unbedingt weiß wie groß die einzelnen Arrays sind und ich deswegen nicht die Größe des mehrdimensionalen Arrays vorher festlegen kann...

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

Re: [HILFE] durch String auf Variable hinweisen

Beitrag von Stephan » Mo, 23.07.2018 10:17

Hallo "drbrode",
Kann ich diese jetzt mit einem einfachen Befehl zusammenfassen, wobei die fehlenden Bereiche des resultierenden Arrays einfach mit leeren Inhalten gefüllt werden?
Ich glaube nein, aber ich bin nicht völlig restlos sicher.

Vielleicht liegt die Lösung auch in einer ganz anderen Richtung, denn ich verstehe das Du Übersichtlichkeit willst, und doch sehen wir doch eigentlich Beide das diese Übersichtlichkeit 'teuer erkauft' wird durch die Einzelarrays, weil das im Änderungsfalle viele Änderungen nötig machen kann. Oder wäre zumindest die Anzahl der Einzelarrays feststehend?

Wie auch immmer ... bezüglich Übersichtlichkeit könntest Du überlegen nicht alles im Code regeln zu wollen, sondern Du könntest die Code-Ausdrücke auch in Calc zusammenbasteln mittels Textfunktionen.
Ich habe eine solche pragmatische Lösung schon gesehen bei BasicAddon-Builder (https://wiki.openoffice.org/wiki/Extens ... donBuilder), dessen Autor ursprünglich (ich kann sie jetzt nicht mehr finden, weil der Link tot ist) seine ganzen 'Hilfstools' veröffentlich hatte und da war auch eine Calc-Datei dabei die, meiner Erinnerung nach, all die vielen Code-Zeilen zusammenbastelte, die die GUI-Übersetzung der Extension betrafen. Kurz gesagt da waren entliche Spalten mit dedn Begriffen für die GUI, pro Sprache eine Spalte, und per Textfunktionen wurden dann viele, untereinanderstehende Codezeilen der Form:

cmd1_de = "mein Text für Button 1"

in Calc erzeugt und mussten nur in den Basic-Code hinüberkopiert werden.


Keine Ahnung ob das ein Für Dich passender Vorschlag sein könnte.



Gruß
Stephan

drbrode
**
Beiträge: 20
Registriert: Di, 29.11.2016 14:10

Re: [HILFE] durch String auf Variable hinweisen

Beitrag von drbrode » Di, 24.07.2018 14:27

Ok, danke dir!

Ich werde mich da mal einlesen. Mal sehen ob das was für mich ist.

Viele Grüße, Bastian

Antworten