Seite 1 von 1
Function mit Array- Rückgabe
Verfasst: So, 08.06.2014 20:37
von moritz
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
Re: Function mit Array- Rückgabe
Verfasst: So, 08.06.2014 22:37
von Karolus
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
Re: Function mit Array- Rückgabe
Verfasst: Mo, 09.06.2014 12:25
von Stephan
Gibt es in Starbasic eine einfache Möglichkeit, dass eine Funktion ein Array zurückgibt.
Ich weiß jetzt nicht was uns hierbrei der Ausdruck:
Code: Alles auswählen
Public Function GetAbstaende(dJahre As Double) As Double()
weiterhilft (siehe auch das von Karolus Gesagte), aber damit eine Funktion ein Array zurückgibt musst Du nur das Array innerhalkb der Funktion zuweisen (wie in VBA auch), meinethalben:
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
Verfasst: Mo, 09.06.2014 22:50
von moritz
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
Re: Function mit Array- Rückgabe
Verfasst: Mo, 09.06.2014 23:30
von Stephan
weil ich schon vor über 15 Jahren auf OO und LO (jetzt AOO) umgestiegen bin
Das OOo-Projekt wurde am 13.10.2000 gegründet, die erste OOo-Version erschien am 1. Mai 2002.
Irgendwo muss doch der Rückgabewert als Datenfeld deklariert werden, oder?
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).
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
Verfasst: Mo, 09.06.2014 23:51
von moritz
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
Re: Function mit Array- Rückgabe
Verfasst: Di, 10.06.2014 01:12
von Stephan
Ich nehms raus, mal sehen, was dann passiert.
ich fürchte Du mißverstehst mich. Ich meinte
nicht das das Herausnehmen von "Option Explicit" das Problem beseitigen könnte.
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
Re: Function mit Array- Rückgabe
Verfasst: Di, 10.06.2014 08:17
von Axel Richter
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:
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
viele Grüße
Axel
Re: Function mit Array- Rückgabe
Verfasst: Di, 10.06.2014 09:12
von Stephan
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:
deklarieren kann das die Rückgabe der Funktion ein Array ist.
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
Re: Function mit Array- Rückgabe
Verfasst: Di, 10.06.2014 09:33
von Axel Richter
Hallo Stephan,
Stephan hat geschrieben:die Frage war nur wie/ob man
...
deklarieren kann das die Rückgabe der Funktion ein Array ist.
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.
viele Grüße
Axel
Re: Function mit Array- Rückgabe
Verfasst: Di, 10.06.2014 09:53
von Stephan
Man muss den Datentyp Variant nehmen, der ein Array einschließt
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.
aber natürlich auch weitere Typen
auch wenn es OO offensichtlich so handhabt, ist es doch kurios, denn an anderer Stelle sind 'normale' Typen und Arrays getrennt deklarierbar, z.B.:
Gruß
Stephan
Re: Function mit Array- Rückgabe
Verfasst: Di, 10.06.2014 10:47
von Axel Richter
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.
Stephan hat geschrieben:denn an anderer Stelle sind 'normale' Typen und Arrays getrennt deklarierbar
Ja, aber da gibt es bei Funktionsdeklarationen ein Syntax-Problem.
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
Re: Function mit Array- Rückgabe
Verfasst: Di, 10.06.2014 17:57
von Stephan
Wie soll das bei Funktionen aussehen?
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.
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(?)
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.
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'.
Gruß
Stephan