Function mit Array- Rückgabe
Moderator: Moderatoren
Function mit Array- Rückgabe
Hakllo und guten Abend,
ich möchte versuchen. ein Excel-Makro zu übersetzen.
Gibt es in Starbasic eine einfache Möglichkeit, dass eine Funktion ein Array zurückgibt.
In Excel >=2003 gibt es diese Konstruktion:
Public Function GetAbstaende(dJahre As Double) As Double()
Wie ist das in Starbasic möglich?
Vielen Dank
Moritz
ich möchte versuchen. ein Excel-Makro zu übersetzen.
Gibt es in Starbasic eine einfache Möglichkeit, dass eine Funktion ein Array zurückgibt.
In Excel >=2003 gibt es diese Konstruktion:
Public Function GetAbstaende(dJahre As Double) As Double()
Wie ist das in Starbasic möglich?
Vielen Dank
Moritz
Re: Function mit Array- Rückgabe
Hallo
Deine vielsagende Funktionssignatur berichtet lediglich das sie einen 64-bit-Fliesskommawert als Argument erwartet und einen ebensolchen zurückgibt.
Was kann deine VBA-function was Calc nicht kann ?
Karolus
Deine vielsagende Funktionssignatur berichtet lediglich das sie einen 64-bit-Fliesskommawert als Argument erwartet und einen ebensolchen zurückgibt.
Was kann deine VBA-function was Calc nicht kann ?
Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Re: Function mit Array- Rückgabe
Ich weiß jetzt nicht was uns hierbrei der Ausdruck:Gibt es in Starbasic eine einfache Möglichkeit, dass eine Funktion ein Array zurückgibt.
Code: Alles auswählen
Public Function GetAbstaende(dJahre As Double) As Double()
Code: Alles auswählen
Function GetAbstaende(dJahre As Double)
'rechne irgenwas
GetAbstaende = DeinArray()
End Function
oder, um ein Beispiel zu geben:
Code: Alles auswählen
Function GetAbstaende(x)
DeinArray = ARRAY(x, 2*x, 3*x)
GetAbstaende = DeinArray()
End Function
Gruß
Stephan
Re: Function mit Array- Rückgabe
Guten Abend,
Euren Antworten entnehme ich, dass das offensichtlich kein Problem ist.
also
[quote
Deine vielsagende Funktionssignatur berichtet lediglich das sie einen 64-bit-Fliesskommawert als Argument erwartet und einen ebensolchen zurückgibt.[/quote]
Das ist nicht ganz richtig. Es wird ein eindimensionales Array zurückgegeben, deshalb die Klammern. Und diese Funktionssignatur führt in Excel 97 zu einer Fehlermeldung, weil die Klammern nach der Funktionsdeklaration nicht zulässig sind. Excel >97 hab ich nicht, weil ich schon vor über 15 Jahren auf OO und LO (jetzt AOO) umgestiegen bin.
In Starbasic führt das ebenfalls zu einer Fehlermeldung, deshalb meine Frage.
[code]Public Function GetAbstaende(dJahre As Double) As Double()[/code]
Ist diese Funktionsdeklaration mit der Rückgabe eines Datenfeldes zulässig oder wie müsste sie in Starbasic geschrieben werden?
Die Funktion liest aus einer XML- Datei eine Zahlenreihe aus, die dann in der Tabelle in eine Spalte eingetragen werden.
Der Funktion wird eine Zahl übergeben, der Rückgabewert ist ein Datenfeld. Wie muss dafür die Funktionsdeklaration in OO lauten, oder ist das hier wirklich egal?
Irgendwo muss doch der Rückgabewert als Datenfeld deklariert werden, oder?
Vielen Dank
Moritz
Euren Antworten entnehme ich, dass das offensichtlich kein Problem ist.
also
[quote
Deine vielsagende Funktionssignatur berichtet lediglich das sie einen 64-bit-Fliesskommawert als Argument erwartet und einen ebensolchen zurückgibt.[/quote]
Das ist nicht ganz richtig. Es wird ein eindimensionales Array zurückgegeben, deshalb die Klammern. Und diese Funktionssignatur führt in Excel 97 zu einer Fehlermeldung, weil die Klammern nach der Funktionsdeklaration nicht zulässig sind. Excel >97 hab ich nicht, weil ich schon vor über 15 Jahren auf OO und LO (jetzt AOO) umgestiegen bin.
In Starbasic führt das ebenfalls zu einer Fehlermeldung, deshalb meine Frage.
[code]Public Function GetAbstaende(dJahre As Double) As Double()[/code]
Ist diese Funktionsdeklaration mit der Rückgabe eines Datenfeldes zulässig oder wie müsste sie in Starbasic geschrieben werden?
Die Funktion liest aus einer XML- Datei eine Zahlenreihe aus, die dann in der Tabelle in eine Spalte eingetragen werden.
Der Funktion wird eine Zahl übergeben, der Rückgabewert ist ein Datenfeld. Wie muss dafür die Funktionsdeklaration in OO lauten, oder ist das hier wirklich egal?
Irgendwo muss doch der Rückgabewert als Datenfeld deklariert werden, oder?
Vielen Dank
Moritz
Re: Function mit Array- Rückgabe
Das OOo-Projekt wurde am 13.10.2000 gegründet, die erste OOo-Version erschien am 1. Mai 2002.weil ich schon vor über 15 Jahren auf OO und LO (jetzt AOO) umgestiegen bin
Nein, mit Sicherheit nicht, denn dann wäre es mir bereits aufgefallen, da ich nahezu täglich StarBasic programmiere ("muss" hieße ja hier das "Option Explicit" die Deklaration erzwingen würde, was aber nicht der Fall ist).Irgendwo muss doch der Rückgabewert als Datenfeld deklariert werden, oder?
Ob der Rückgabewert hingegen überhaupt als Array deklariert werden kann, da muss ich leider passen, ich weiß es nicht.
Im Übrigen halte ich Deine Frage für vollends berechtigt, nicht das hier der falsche Eindruck entsteht ich fände die Frage unwichtig/überflüssig.
Gruß
Stephan
Re: Function mit Array- Rückgabe
Hallo, Stephan,
na gut, also bin ich vor über 10 Jahren auf OO umgestiegen. Staroffice gefiel mir wegen dem eigenen Desktop nicht.
Danke für deine Antwort. Option Explicit hat OO aus dem Excel-Programm automatisch übernommen. Mit StarBasic habe ich lange nichts gemacht. Deshalb bin ich dir für diesen kleinen Hinweis sehr dankbar. Da wär ich vielleicht gar nicht selbst drauf gekommen, zumindest nicht so schnell. Ich nehms raus, mal sehen, was dann passiert.
Vielen Dank
Moritz
na gut, also bin ich vor über 10 Jahren auf OO umgestiegen. Staroffice gefiel mir wegen dem eigenen Desktop nicht.
Danke für deine Antwort. Option Explicit hat OO aus dem Excel-Programm automatisch übernommen. Mit StarBasic habe ich lange nichts gemacht. Deshalb bin ich dir für diesen kleinen Hinweis sehr dankbar. Da wär ich vielleicht gar nicht selbst drauf gekommen, zumindest nicht so schnell. Ich nehms raus, mal sehen, was dann passiert.
Vielen Dank
Moritz
Re: Function mit Array- Rückgabe
ich fürchte Du mißverstehst mich. Ich meinte nicht das das Herausnehmen von "Option Explicit" das Problem beseitigen könnte.Ich nehms raus, mal sehen, was dann passiert.
Ich meinte nur das es trotz verwendeten "Option Explicit" bei mir noch nie zu einer Meldung gekommen ist weil für eine Funktion der Typ des Rückgabewertes nicht deklariert gewesen wäre, was umgekehrt die Schlussfolgerung erlaubt das nicht deklarieret werden muss, denn sonst müsste es ja eine Fehlermeldung geben wenn nicht deklariert wurde.
Gruß
Stephan
-
- ****
- Beiträge: 159
- Registriert: So, 17.10.2010 16:54
Re: Function mit Array- Rückgabe
Hallo zusammen,
wenn per DIM eine Variable deklariert wird und es wird kein Datentyp angegeben, dann wird der Datentyp Variant deklariert.
Folgender Code läuft deckungsgleich in VBA und StarBasic:
viele Grüße
Axel
wenn per DIM eine Variable deklariert wird und es wird kein Datentyp angegeben, dann wird der Datentyp Variant deklariert.
Folgender Code läuft deckungsgleich in VBA und StarBasic:
Code: Alles auswählen
Option Explicit
Sub test()
Dim AufnehmendesArray() As Double
AufnehmendesArray = GetAbstaende(1.25)
End Sub
Function GetAbstaende(dJahre As Double) As Variant
Dim DeinArray(2) As Double
DeinArray(0) = dJahre * 0.5
DeinArray(1) = dJahre * 0.6
DeinArray(2) = dJahre * 0.7
GetAbstaende = DeinArray()
End Function
Axel
Re: Function mit Array- Rückgabe
wenn per DIM eine Variable deklariert wird und es wird kein Datentyp angegeben, dann wird der Datentyp Variant deklariert.
Folgender Code läuft deckungsgleich in VBA und StarBasic:
so weit so richtig, die Frage war nur wie/ob man in:
Code: Alles auswählen
Function GetAbstaende(dJahre As Double) As Variant
Das die Rückgabe eines Array durch eine Funktion auch ohne Deklaration funktioniert bzw. auch bei nur DEklaration des Typs steht hierbei außer Frage, gesucht ist jedoch eine LÖsung für die explizite Rückgabe eines Array, die also in folgendem beispielhaften Code einen Fehler liefern müsste:
Code: Alles auswählen
Function GetAbstaende(dJahre As Double) [...?]
GetAbstaende = DJahre * 0.5
End Function
Gruß
Stephan
-
- ****
- Beiträge: 159
- Registriert: So, 17.10.2010 16:54
Re: Function mit Array- Rückgabe
Hallo Stephan,
viele Grüße
Axel
Nein, das ist meines Wissens nach in StarBasic nicht explizit möglich. Man muss den Datentyp Variant nehmen, der ein Array einschließt aber natürlich auch weitere Typen.Stephan hat geschrieben:die Frage war nur wie/ob man
...
deklarieren kann das die Rückgabe der Funktion ein Array ist.
viele Grüße
Axel
Re: Function mit Array- Rückgabe
Danke für diesen nochmaligen Hinweis, weil er mich dazu gebracht hat es auszuprobieren und es stimmt, was mich überrascht hat, denn ich persönlich deklariere an dieser Stelle praktisch nie und weiß das das das Gleiche ist als wenn ich als Variant deklarierte, war mir nur nie bewusst das Variant für Array-Rückgabe wirklich notwendig ist.Man muss den Datentyp Variant nehmen, der ein Array einschließt
auch wenn es OO offensichtlich so handhabt, ist es doch kurios, denn an anderer Stelle sind 'normale' Typen und Arrays getrennt deklarierbar, z.B.:aber natürlich auch weitere Typen
Code: Alles auswählen
Dim x As Integer
Dim x(3) As Integer
Gruß
Stephan
-
- ****
- Beiträge: 159
- Registriert: So, 17.10.2010 16:54
Re: Function mit Array- Rückgabe
Hallo Stephan,
die Funktion in meinem Beispiel gibt ein Variant zurück, welches ein Datenfeld, hier ein Double-Array, enthält. Die Funktion Array z.B. macht das auch. Sie gibt einen Wert vom Typ Variant zurück, der ein Datenfeld enthält.
Wie soll das bei Funktionen aussehen?
Deshalb hat Microsoft da - auch als Sondersyntax - die Klammern nach dem Typnamen eingeführt:
Diese Sondersyntax hat OO nicht übernommen. Sie ist , meiner Meinung nach, aber auch nicht zwingend notwendig, weil man sich auch in einem Variant, welches ein Datenfeld enthält, explizit um den Typ der Daten im Datenfeld kümmern kann, wie mein Beispiel ja zeigt.
viele Grüße
Axel
die Funktion
Code: Alles auswählen
GetAbstaende(dJahre As Double) As Variant
Ja, aber da gibt es bei Funktionsdeklarationen ein Syntax-Problem.Stephan hat geschrieben:denn an anderer Stelle sind 'normale' Typen und Arrays getrennt deklarierbar
Code: Alles auswählen
Dim x(3) As Integer
Code: Alles auswählen
Function f(x As Integer)(3) As Integer
Code: Alles auswählen
Function f(x As Integer) As Integer()
viele Grüße
Axel
Re: Function mit Array- Rückgabe
Um meinetwillen völlig beliebig. Meine Anmerkung meinte doch nicht das es bei Funktionen gleich aussehen müsse sondern das es dort die gleiche Funktionalität geben sollte.Wie soll das bei Funktionen aussehen?
Sie ist , meiner Meinung nach, aber auch nicht zwingend notwendig,
Es wäre sinnvoll wäre so deklarieren zu können. "Zwingend nötig" ist hingegen eine Frage der Auslegung denn natürlich ist es auch nicht zwingend nötig 'normale' Variablen explizit als Integer, Double, String, usw. deklarieren zu können, sondern das alles wäre ja mit Variant auch alles abgedeckt.
Warum also für normale Variablen die Möglichkeit der Unterscheidung, ebenso für Arrays ansich, nur nicht für Array-Rückgaben einer Funktion(?)
Mmm... DEin Beispiel zeigt das es nicht möglich ist explizit den Zahlentyp (wenn ich das als Begriff hier mal so nennen darf, um es vom Typ Array zu unterscheiden) zu deklarieren, sondern wenn ich die Rückgabe einer Funktion als Array deklarieren will geht nur 'Alles oder Nichts'.weil man sich auch in einem Variant, welches ein Datenfeld enthält, explizit um den Typ der Daten im Datenfeld kümmern kann, wie mein Beispiel ja zeigt.
Gruß
Stephan