Indirekter Zugriff auf Variablen [GELÖST]
-
- Foriker
- Beiträge: 21
- Registriert: Do 30. Mai 2024, 18:02
- Kontaktdaten:
Indirekter Zugriff auf Variablen [GELÖST]
Hi,
bin gerade dabei mein erstes Projekt in Gambas zu erstellen.
Vieles geht super, aber manches (was eigentlich einfach sein sollte) krieg' ich einfach nicht hin.
So auch die indirekte Variablenzuweisung:
bezeichner = _003_name.Value
print bezeichner
zeigt mir den korrekten Inhalt von '_003_name.Value' an.
tnumber = 3
bezeichner = "_00" & tnumber & "_name.Value"
print bezeichner
Zeigt mir immer '_003_name.Value', aber nicht den Inhalt dieses Feldes an.
Bin für jeden Tip dankbar, habe jetzt den ganzen Nachmittag verschiedene Varianten durchprobiert
und recherchiert, aber nichts gefunden.
bin gerade dabei mein erstes Projekt in Gambas zu erstellen.
Vieles geht super, aber manches (was eigentlich einfach sein sollte) krieg' ich einfach nicht hin.
So auch die indirekte Variablenzuweisung:
bezeichner = _003_name.Value
print bezeichner
zeigt mir den korrekten Inhalt von '_003_name.Value' an.
tnumber = 3
bezeichner = "_00" & tnumber & "_name.Value"
print bezeichner
Zeigt mir immer '_003_name.Value', aber nicht den Inhalt dieses Feldes an.
Bin für jeden Tip dankbar, habe jetzt den ganzen Nachmittag verschiedene Varianten durchprobiert
und recherchiert, aber nichts gefunden.
Zuletzt geändert von hansheiser am Mi 5. Jun 2024, 11:57, insgesamt 1-mal geändert.
Re: Indirekter Zugriff auf Variablen
Hallo hansheiser,
die Arbeit mit Variablen beginnt immer damit, zuerst den Datentyp festzulegen und dann die Wertzuweisungen vorzunehmen. Im gezeigten Beispiel ist nicht ersichtlich, welche Datentypen benutzt werden. Was bedeutet 'indirekter Zugriff auf Variablen'?
Mit dem Satz 'Zeigt mir immer '_003_name.Value', aber nicht den Inhalt dieses Feldes an.' kann ich nicht viel anfangen. Es ist nicht erkennbar, welches Feld gemeint ist? Von welchem Datentyp ist '_003_name' ?
Ausgegeben wird der korrekt zusammengesetzte String: _003_name.Value, der aber nicht als Variablenname verwendet werden kann!
Mit freundlichem Gruß
Honsek
die Arbeit mit Variablen beginnt immer damit, zuerst den Datentyp festzulegen und dann die Wertzuweisungen vorzunehmen. Im gezeigten Beispiel ist nicht ersichtlich, welche Datentypen benutzt werden. Was bedeutet 'indirekter Zugriff auf Variablen'?
Mit dem Satz 'Zeigt mir immer '_003_name.Value', aber nicht den Inhalt dieses Feldes an.' kann ich nicht viel anfangen. Es ist nicht erkennbar, welches Feld gemeint ist? Von welchem Datentyp ist '_003_name' ?
Code: Alles auswählen
Dim sBezeichner As String
Dim iNumber As Integer
iNumber = 3
sBezeichner = "_00" & CInteger(iNumber) & "_name.Value"
Print sBezeichner
Mit freundlichem Gruß
Honsek
Honsek (https://www.gambas-buch.de)
---> Wenn Du eine gute Antwort erwartest, musst Du sehr gut fragen!
---> Wenn Du eine gute Antwort erwartest, musst Du sehr gut fragen!
-
- Foriker
- Beiträge: 21
- Registriert: Do 30. Mai 2024, 18:02
- Kontaktdaten:
Re: Indirekter Zugriff auf Variablen
Ok, war vielleicht nicht verständlich genug erläutert, sorry.
Beispielsweise habe ich mehrere Variablen, deren Name folgendermassen aufgebaut ist:
Name1
Name2
Name3
usw.
Die Variablennamen wurden als String deklariert, also
dim Name1 as String
dim Name2 as String
usw.
In diesen Variablen werden zugehörige Namen gespeichert.
Beispielsweise
Name1=Hans
Name2=Peter
usw.
Wenn ich jetzt alle Variablen ausgeben möchte, könnte ich z.B. folgendes schreiben:
Print Name1 -> gibt aus: Hans
Print Name2 -> gibt aus: Peter
Print Name3
usw.
Wenn das allerdings z.B. 100 oder mehr Namen sind wird das
sehr umfangreich.
Das soll also durch eine Routine erledigt werden, die eine
Zahl übergeben bekommt, also in etwas so:
Public Sub PrintName (number as Integer)
dim NameToPrint as String
NameToPrint = "Name"&number
Print NameToPrint
End
Diese Routine würde in diesem Beispiel von einer Schleife angesprungen werden,
z.B. so (oder so ähnlich):
dim i as Integer
for i = 1 to 20
Sub PrintName(i)
next i
Ausgeben werden soll dann
Hans
Peter
usw.
Meine Versuche mit Gambas ergaben jedoch nur folgende Ausgabe:
Name1
Name2
usw.
Das mit der Routine ist jetzt nur schnell für diesen Beitrag dahergeschrieben,
letztendlich aber soll die Routine anhand einer mitgelieferen Nummer den unter
dieser Variable gespeicherten Namen anzeigen/ausgeben.
Dieses Beispiel ist wohlgemerkt nur für diese Anfrage erstellt worden,
letztendlich sollen hiermit andere Variablen verarbeitet werden.
-------------------------------------------------------------------------------------------------------
Zum Verständniss, falls ich mich immer noch nicht klar genug ausgedrückt habe:
Indirekte Variablenadressierung für die Bash (mal auf die Schnelle gegoogelt):
https://stackoverflow.com/questions/392 ... eferencing
Beispielsweise habe ich mehrere Variablen, deren Name folgendermassen aufgebaut ist:
Name1
Name2
Name3
usw.
Die Variablennamen wurden als String deklariert, also
dim Name1 as String
dim Name2 as String
usw.
In diesen Variablen werden zugehörige Namen gespeichert.
Beispielsweise
Name1=Hans
Name2=Peter
usw.
Wenn ich jetzt alle Variablen ausgeben möchte, könnte ich z.B. folgendes schreiben:
Print Name1 -> gibt aus: Hans
Print Name2 -> gibt aus: Peter
Print Name3
usw.
Wenn das allerdings z.B. 100 oder mehr Namen sind wird das
sehr umfangreich.
Das soll also durch eine Routine erledigt werden, die eine
Zahl übergeben bekommt, also in etwas so:
Public Sub PrintName (number as Integer)
dim NameToPrint as String
NameToPrint = "Name"&number
Print NameToPrint
End
Diese Routine würde in diesem Beispiel von einer Schleife angesprungen werden,
z.B. so (oder so ähnlich):
dim i as Integer
for i = 1 to 20
Sub PrintName(i)
next i
Ausgeben werden soll dann
Hans
Peter
usw.
Meine Versuche mit Gambas ergaben jedoch nur folgende Ausgabe:
Name1
Name2
usw.
Das mit der Routine ist jetzt nur schnell für diesen Beitrag dahergeschrieben,
letztendlich aber soll die Routine anhand einer mitgelieferen Nummer den unter
dieser Variable gespeicherten Namen anzeigen/ausgeben.
Dieses Beispiel ist wohlgemerkt nur für diese Anfrage erstellt worden,
letztendlich sollen hiermit andere Variablen verarbeitet werden.
-------------------------------------------------------------------------------------------------------
Zum Verständniss, falls ich mich immer noch nicht klar genug ausgedrückt habe:
Indirekte Variablenadressierung für die Bash (mal auf die Schnelle gegoogelt):
https://stackoverflow.com/questions/392 ... eferencing
Re: Indirekter Zugriff auf Variablen
hallo,
die Namen müssen ja irgendwie in die Variablen reinkommen. Wo holst Du diese her?
die Namen müssen ja irgendwie in die Variablen reinkommen. Wo holst Du diese her?
Gruss
-
- Foriker
- Beiträge: 21
- Registriert: Do 30. Mai 2024, 18:02
- Kontaktdaten:
Re: Indirekter Zugriff auf Variablen
Wie meinst Du das?
In dem o.g. Beispiel z.B. werden die direkt zugewiesen:
Name1=Hans
Name2=Peter
usw.
Das ist aber für dieses Beispiel auch belanglos.
In dem o.g. Beispiel z.B. werden die direkt zugewiesen:
Name1=Hans
Name2=Peter
usw.
Das ist aber für dieses Beispiel auch belanglos.
Re: Indirekter Zugriff auf Variablen
Gambas Dolmetscher sieht die Namen nicht wirklich so wie wir. Aus Sicht des Interpreters sind die Variablennamen keine Strings, die Stringnamen sind für den Compiler und den Programmierer, aber im laufenden Code ist es etwas mehr, ähm, Digitales.
Hier sind einige Möglichkeiten, Objekte abzurufen und Eigenschaften anhand ihrer Zeichenfolgennamen festzulegen.
Eval?
https://gambaswiki.org/wiki/lang/eval gambas code
https://gambaswiki.org/wiki/comp/gb.qt4/window/_get gambas code
https://gambaswiki.org/wiki/comp/gb/object/getproperty gambas code
Hier sind einige Möglichkeiten, Objekte abzurufen und Eigenschaften anhand ihrer Zeichenfolgennamen festzulegen.
Eval?
https://gambaswiki.org/wiki/lang/eval gambas code
tnumber = 3 identifier = "Form1._00" & tnumber & "_name.Value" Print Eval(identifier)Window._get() ?
https://gambaswiki.org/wiki/comp/gb.qt4/window/_get gambas code
Dim o As Object = Form1["_003_name"] Print o.ValueObject.GetProperty() ?
https://gambaswiki.org/wiki/comp/gb/object/getproperty gambas code
tnumber = 3 identifier = "_00" & tnumber & "_name" prop = "Value" Print Object.GetProperty(Form1[identifier], prop)
Zuletzt geändert von Bonus am Mo 3. Jun 2024, 13:04, insgesamt 2-mal geändert.
Ich bin Engländer und verwende Google Übersetzer. (Das tut mir leid)
Re: Indirekter Zugriff auf Variablen
Hallo.
Gut zu wissen: Ein Array ist eine Menge von Elementen, die über einen Schlüssel vom Typ Integer indiziert werden und in einem Speicher-Block gespeichert sind. Alle Elemente in einem Array haben den gleichen Datentyp und es gibt eine Array-Klasse für jeden nativen Datentyp.
Beispiel-Quelltext:
Das sind die korrekten Ausgaben:
Merkur
Venus
Erde
Mars
Jupiter
Saturn
Uranus
Neptun
Pluto
------------------
Merkur
Venus
Erde
Mars
Jupiter
Saturn
Uranus
Neptun
Pluto
Mit freundlichem Gruß
Honsek
Gut zu wissen: Ein Array ist eine Menge von Elementen, die über einen Schlüssel vom Typ Integer indiziert werden und in einem Speicher-Block gespeichert sind. Alle Elemente in einem Array haben den gleichen Datentyp und es gibt eine Array-Klasse für jeden nativen Datentyp.
Beispiel-Quelltext:
Code: Alles auswählen
Public Sub ButtonDoPrint_Click()
Dim sElement As String
Dim aPlaneten As String[]
Dim i As Integer
aPlaneten = New String[]
'-- Inline-Zuweisung mit 4 Elementen (Index 0 bis Index 3)
aPlaneten = ["Merkur", "Venus", "Erde", "Mars"]
'-- Zuweisungen mit Add()-Methode
'-- aPlaneten.Add("Jupiter")
aPlaneten.Add("Saturn")
aPlaneten.Add("Uranus")
aPlaneten.Add("Neptun")
aPlaneten.Add("Pluto")
'-- Zuweisung mit Add()-Methode und bestimmtem Index
aPlaneten.Add("Jupiter", 4)
'-- Ausgabe 1
For Each sElement In aPlaneten
Print sElement
Next
Print "------------------"
'-- Ausgabe 2
For i = 0 To aPlaneten.Max
Print aPlaneten[i]
Next
End
Merkur
Venus
Erde
Mars
Jupiter
Saturn
Uranus
Neptun
Pluto
------------------
Merkur
Venus
Erde
Mars
Jupiter
Saturn
Uranus
Neptun
Pluto
Mit freundlichem Gruß
Honsek
Honsek (https://www.gambas-buch.de)
---> Wenn Du eine gute Antwort erwartest, musst Du sehr gut fragen!
---> Wenn Du eine gute Antwort erwartest, musst Du sehr gut fragen!
-
- Foriker
- Beiträge: 21
- Registriert: Do 30. Mai 2024, 18:02
- Kontaktdaten:
Re: Indirekter Zugriff auf Variablen
Hi,
erstmal vorab vielen Dank für die raschen und kompetenten Antworten.
Die Lösung für _dieses_ Problem kam mit einem Hinweis von Bonus
-> Object.GetProperty()
Da ist mein Feldinhalt von '_00X_name':
Diese ganze Aktion wird wahrscheinlich _letztendlich_ überflüssig sein,
aber ich will mich ja in Gambas einarbeiten.
Ich will/wollte hiermit alle Datenfelder mangels direkter Formatmöglichkeit
in Labels übertragen, so das ich die Felder dann meinen Wünschen entsprechend
formatieren kann (Hintergrundfarbe, Ausrichtung usw.).
Das sollte auch direkt funktionieren, aber ich habe unter den Datenfeldeigenschaften
keine Parameter gefunden (Kann also ein Datenfeld z.B. nicht rechtsbündig ausrichten).
Diese Problematik werde ich aber wohl besser in einem neuen Thread angehen damit's
hier nicht zu unübersichtlich wird.
erstmal vorab vielen Dank für die raschen und kompetenten Antworten.
Die Lösung für _dieses_ Problem kam mit einem Hinweis von Bonus
-> Object.GetProperty()
Da ist mein Feldinhalt von '_00X_name':
Code: Alles auswählen
Dim attr_field As String
Dim prop As String = "Value"
attr_field = "_00" & tnumber & "_name"
Print Object.GetProperty(FMain[attr_field], prop)
aber ich will mich ja in Gambas einarbeiten.
Ich will/wollte hiermit alle Datenfelder mangels direkter Formatmöglichkeit
in Labels übertragen, so das ich die Felder dann meinen Wünschen entsprechend
formatieren kann (Hintergrundfarbe, Ausrichtung usw.).
Das sollte auch direkt funktionieren, aber ich habe unter den Datenfeldeigenschaften
keine Parameter gefunden (Kann also ein Datenfeld z.B. nicht rechtsbündig ausrichten).
Diese Problematik werde ich aber wohl besser in einem neuen Thread angehen damit's
hier nicht zu unübersichtlich wird.
Re: Indirekter Zugriff auf Variablen
Moin
Variablen indirekt anzusprechen ist eine praxisfremde und aufwendige Art zu programmieren. Die von Honsek vorgeschlagene Verwendung von Arrays wäre für die vermutlich beabsichtigten Zwecke das Richtige.
"Datenfelder" und "Labels" und deren Formatierung in diesem Zusammenhang zu nennen, macht die Absicht leider völlig undurchsichtig. Der Begriff "Datenfeld" kommt aus der Datenbank-Programmierung und Labels sind GUI-Steuerelemente. Beide haben nichts mit Variablen zu tun. Die bisher verwendeten Namen der Variablen sind zudem ungewöhnlich. Außerdem wurde hier wahrscheinlich ein Thema aus einem anderen Thread eingeflochten, was die Sache noch unübersichtlicher macht. Zudem wurden in diesem anderen Thread offenbar Begrifflichkeiten verwendet, die auf die falsche Fährte führten.
Um unter Vermeidung vom Misverständnissen gezielt und effektiv helfen zu können und eine Empfehlung für die Einarbeitung in Gambas abgeben zu können, wäre die Kenntnis über Deine bestehenden Erfahrungen im Bereich Objekt-orientierter-Programmierung, der Sprache Basic oder anderer Sprachen, der Verwendung von Arrays und eine Beschreibung des aktuellen Projektes hilfreich.
Viele Grüße
Crabman
Variablen indirekt anzusprechen ist eine praxisfremde und aufwendige Art zu programmieren. Die von Honsek vorgeschlagene Verwendung von Arrays wäre für die vermutlich beabsichtigten Zwecke das Richtige.
"Datenfelder" und "Labels" und deren Formatierung in diesem Zusammenhang zu nennen, macht die Absicht leider völlig undurchsichtig. Der Begriff "Datenfeld" kommt aus der Datenbank-Programmierung und Labels sind GUI-Steuerelemente. Beide haben nichts mit Variablen zu tun. Die bisher verwendeten Namen der Variablen sind zudem ungewöhnlich. Außerdem wurde hier wahrscheinlich ein Thema aus einem anderen Thread eingeflochten, was die Sache noch unübersichtlicher macht. Zudem wurden in diesem anderen Thread offenbar Begrifflichkeiten verwendet, die auf die falsche Fährte führten.
Um unter Vermeidung vom Misverständnissen gezielt und effektiv helfen zu können und eine Empfehlung für die Einarbeitung in Gambas abgeben zu können, wäre die Kenntnis über Deine bestehenden Erfahrungen im Bereich Objekt-orientierter-Programmierung, der Sprache Basic oder anderer Sprachen, der Verwendung von Arrays und eine Beschreibung des aktuellen Projektes hilfreich.
Viele Grüße
Crabman
-
- Foriker
- Beiträge: 21
- Registriert: Do 30. Mai 2024, 18:02
- Kontaktdaten:
Re: Indirekter Zugriff auf Variablen [GELÖST]
Hi,
In diesem Fall leiten sich die Feld-/Variablennamen
allerdings aus Feldnamen bereits bestehender Datenbanken
her. Da das eine ganze Menge Felder mit spezifischen Namen
sind, wäre das logistisch sehr aufwendig diese in Arrays zu
übertragen. So kann ich die mit ihren ursprünglichen Namen
verarbeiten - für mich wesentlich einfacher.
Variblen indirekt anzusprechen -wenn's denn für den
Anwendungsfall passt- hat mir bisher noch nie Probleme bereitet.
Bash-Scripting z.B. hat keinerlei Probleme damit.
Aber das sind meine Erfahrungen, es hat sicher auch Vorteile
Arrays zu verwenden. Kommt halt immer auf den Anwendungsfall an.
Felder, welche ich aus einer SQL-Datenbank in Gambas in einem
Datacontrol-Feld anzeige sind für mich 'Datenfelder'.
Wenn ich diese hier zur besseren Verständlichkeit anders nennen
soll, gerne. Wie wäre die korrekte Bezeichnung?
bereits vorhandener SQL-Datenbanken her, für welche dieses Programm
als Frontend dienen soll.
'Datacontrol-Felder formatieren'. Dort habe ich dieses erläutert.
Objektorientiert Programmierung, Basic, Arrays kenne ich.
Hatte unter Linux probiert dieses Frontend mit OOBase umzusetzen: gruselig.
Eine Weile hatte ich unter Xojo programmiert, leider haben die
den Editor für mich unbenutzbar gemacht.
Programm-/Datenbankmässig habe ich füher auch etwas umfangreichere Sachen
(Mehrbenutzersysteme) u.A. unter Superbase (falls das noch jemand kennt)
erstellt.
Arrays zu benutzen ist sicher nicht verkehrt.Variablen indirekt anzusprechen ist eine praxisfremde und aufwendige Art zu programmieren.
Die von Honsek vorgeschlagene Verwendung von Arrays wäre für die vermutlich beabsichtigten Zwecke das Richtige.
In diesem Fall leiten sich die Feld-/Variablennamen
allerdings aus Feldnamen bereits bestehender Datenbanken
her. Da das eine ganze Menge Felder mit spezifischen Namen
sind, wäre das logistisch sehr aufwendig diese in Arrays zu
übertragen. So kann ich die mit ihren ursprünglichen Namen
verarbeiten - für mich wesentlich einfacher.
Variblen indirekt anzusprechen -wenn's denn für den
Anwendungsfall passt- hat mir bisher noch nie Probleme bereitet.
Bash-Scripting z.B. hat keinerlei Probleme damit.
Aber das sind meine Erfahrungen, es hat sicher auch Vorteile
Arrays zu verwenden. Kommt halt immer auf den Anwendungsfall an.
Tut mir leid wenn ich mich nicht verständlich ausgedrückt habe."Datenfelder" und "Labels" und deren Formatierung in diesem Zusammenhang zu nennen,
macht die Absicht leider völlig undurchsichtig. Der Begriff "Datenfeld" kommt aus der
Datenbank-Programmierung und Labels sind GUI-Steuerelemente. Beide haben nichts mit Variablen zu tun.
Felder, welche ich aus einer SQL-Datenbank in Gambas in einem
Datacontrol-Feld anzeige sind für mich 'Datenfelder'.
Wenn ich diese hier zur besseren Verständlichkeit anders nennen
soll, gerne. Wie wäre die korrekte Bezeichnung?
Die Namen der Variablen leiten sich aus den Datenbank-FeldnamenDie bisher verwendeten Namen der Variablen sind zudem ungewöhnlich.
bereits vorhandener SQL-Datenbanken her, für welche dieses Programm
als Frontend dienen soll.
Nein. Wie kommst Du darauf?Außerdem wurde hier wahrscheinlich ein Thema aus einem anderen Thread eingeflochten,
was die Sache noch unübersichtlicher macht.
Damit das hier nicht ausufert, verweise ich bezüglich meines aktuellen Projekts auf den ThreadUm unter Vermeidung vom Misverständnissen gezielt und effektiv helfen zu können und eine
Empfehlung für die Einarbeitung in Gambas abgeben zu können, wäre die Kenntnis über Deine
bestehenden Erfahrungen im Bereich Objekt-orientierter-Programmierung, der Sprache Basic
oder anderer Sprachen, der Verwendung von Arrays und eine Beschreibung des aktuellen Projektes hilfreich.
'Datacontrol-Felder formatieren'. Dort habe ich dieses erläutert.
Objektorientiert Programmierung, Basic, Arrays kenne ich.
Hatte unter Linux probiert dieses Frontend mit OOBase umzusetzen: gruselig.
Eine Weile hatte ich unter Xojo programmiert, leider haben die
den Editor für mich unbenutzbar gemacht.
Programm-/Datenbankmässig habe ich füher auch etwas umfangreichere Sachen
(Mehrbenutzersysteme) u.A. unter Superbase (falls das noch jemand kennt)
erstellt.
Re: Indirekter Zugriff auf Variablen [GELÖST]
Danke! Das half. Schlage vor, dass wir hier einen Strich drunter ziehen und zum Datenbank-Thread wechseln.
Viele Grüße
Crabman
Viele Grüße
Crabman
Wer ist online?
Mitglieder in diesem Forum: Google [Bot] und 0 Gäste