return (array)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

regaa

Betreff: return (array)

BeitragFr, Jan 30, 2004 23:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist es möglich das eine Function ein Array zurückgibt? Wenn nicht, kann man das mittels einer eigenen Function hinkriegen?

Jolinah

BeitragFr, Jan 30, 2004 23:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Arrays sind immer Global, da brauchst du eigentlich gar nichts zurück zu geben. Wenn du ein Array in einer Funktion abänderst kannst du von aussen ganz normal wieder auf das Array zugreifen.


Was jedoch geht sind Types zurückliefern.
Viele Leute machen es immer so das sie das Handle eines Objekts übergeben.

Code: [AUSKLAPPEN]
Return Handle(objekt)


Man kann aber auch das Objekt selber zurückgeben:

Code: [AUSKLAPPEN]

Type test
Field name$
End Type

Function GetTest.test()
  obj.test = new test
  test\name$ = "Bla"

  Return obj
End Function

regaa

BeitragSa, Jan 31, 2004 0:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo, danke für die superschnelle antwort. Hmm, jetzt fehlt mir nur noch das wissen wie ich diesen Returnten Wert in einer Variable abfangen kann, um das nachher zum beispiel zu printen?

regaa

BeitragSa, Jan 31, 2004 0:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hintergrund ist der, das ich die explode function aus php brauche *unbedingt*, so und dann hab ich folgendes zusammengebastelt:

Function explode(zeichen$, sstring$, limit)
start_var_pos=0
For i3=0 To limit
pos_zeichen_1=Instr(sstring$,zeichen$,1+start_var_pos)
pos_zeichen_2=Instr(sstring$,zeichen$,1+pos_zeichen_1)
anz=pos_zeichen_2-pos_zeichen_1
ergebnis$(i3)=Mid$(sstring$,2+start_var_pos,anz-1)
start_var=anz
start_var_pos=start_var_pos+start_var
Next
;Return (ergebnis$) arrays sind global
End Function

Aufrufen tu ich das so
explode("-", inhalt$, 5)

und später die arrays zuordnen:
ress1_verdienst#=ergebnis$(0)
ress2_verdienst#=ergebnis$(1)
ress3_verdienst#=ergebnis$(2)
ress4_verdienst#=ergebnis$(3)
ress5_verdienst#=ergebnis$(4)
ress6_verdienst#=ergebnis$(5)

Aber ich wollt das halt so haben, das man in der function etwas returned, um das später einfach sauber aus einem array alles auszulesen, halt so wie in php, naja das was ich hier zusammengecodet hab funzt zwar auch, aber ich wollt, das halt so machen wie in php.

PS: Wie rück ich den Code ein in diesem post? Leerzeichen werden getrimt, und tabs zuweit gerückt.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Jan 31, 2004 0:43
Antworten mit Zitat
Benutzer-Profile anzeigen
das geht natürlich aber nur eine Variable obwohl das auch anders geht, gibt da viele Möglichkeiten

Code: [AUSKLAPPEN]
1. variante
x= blablafunction()
Print x
2. variante
Print blablafunction()

function blablafunction()
return Array(Zaehler)
end function


oder so...
Code: [AUSKLAPPEN]
x= blablafunction()
Print Array(x)

function blablafunction()
return Zaehler
end function

oh hab nicht aufgepasst , hast ja in der Zwischenteit was gepostet
[BB2D | BB3D | BB+]

regaa

BeitragSa, Jan 31, 2004 0:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, danke dir!! Ja dann hab ich ne ganz normale zahl returned, ich wollt aber ein ganzes array, oder hätte gern ne antwort auf den 3 post (also den zweiten von mir).

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Jan 31, 2004 0:57
Antworten mit Zitat
Benutzer-Profile anzeigen
es geht nur ein wert mit return zurück!
Ganze arrays ist so.. nicht möglich
eine möglichkeit wäre es nur einen Wert zu berechnen und diesen zurückgeben
das solange wiederholen bis alle werte abgearbeitet sind
aber denke das sich das nur lohnt wenn die function von vielen stellen aufgerufen wird
[BB2D | BB3D | BB+]

regaa

BeitragSa, Jan 31, 2004 1:49
Antworten mit Zitat
Benutzer-Profile anzeigen
naja gut dann komm ich eben mit meiner Lösung aus, danke euch allen.

mfg regaa
 

OJay

BeitragSa, Jan 31, 2004 2:52
Antworten mit Zitat
Benutzer-Profile anzeigen
mit einer kombination aus 2 funktionen bekommt man das eigentlich ganz gut hin:
Code: [AUSKLAPPEN]
Function Parse$( Message$, Item, Sep$ = "," )

   I = 1
   Repeat
      Txt2$ = Mid(Message$,I,1)
      If Txt2$ <> Sep$ Then
         Txt3$ = Txt3$ + Txt2$
      Else
         If Pos = Item Then
            Done = True
         Else
            Pos = Pos + 1
            Txt3$ = ""
         EndIf
      EndIf
      I = I + 1
   Until Done = True Or I > Len(Message$)
   Return Txt3$
   
End Function

Function CountItems( Message$, Sep$ )

   For A = 1 To Len(Message$)
      If Mid(Message$, A, 1) = Sep$
         Count = Count + 1
      EndIf
   Next
   Count = Count + 1
   Return Count

End Function


anwendungsbeispiel:
Code: [AUSKLAPPEN]
Param1$="laber,schwafel,sülz,bla,text"
For i = 0 To CountItems(Param1,",")
   Print Parse(Param1, i, ",")
Next


würde jetzt jedes einzelne element nacheinander ausgeben...

ist zwar nicht soo schön komfortabel wie in php, aber eine ganz gute lösung.

Jolinah

BeitragSa, Jan 31, 2004 14:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ojay's Version ist wahrscheinlich die beste Smile

Es würde auch noch diese Möglichkeit geben:

Code: [AUSKLAPPEN]
Type result
Field resarray$[100]
End Type

Function explode.result(zeichen$, sstring$, limit)

  res.result = New result

  pos_zeichen_1 = Instr(sstring$,zeichen$,1)
  If pos_zeichen_1 = 0 Then res\resarray[0] = sstring$ : Return res
  res\resarray[0] = Mid$(sstring$,1,pos_zeichen_1 - 1)

  start_var_pos=0
  For i3=1 To limit
    pos_zeichen_1=Instr(sstring$,zeichen$,1+start_var_pos)
    pos_zeichen_2=Instr(sstring$,zeichen$,1+pos_zeichen_1)
    anz=pos_zeichen_2-pos_zeichen_1
    res\resarray[i3] = Mid$(sstring$,pos_zeichen_1 + 1,anz-1)
    start_var_pos = pos_zeichen_1
  Next

  Return res
End Function

myres.result = explode.result("-", "1-20-3-500-30000-2000", 5)

wert1$ = myres\resarray[0]
wert2$ = myres\resarray[1]
wert5$ = myres\resarray[4]
wert6$ = myres\resarray[5]

Print wert1$
Print wert2$
Print wert5$
Print wert6$


WaitKey()

;Wenn es nicht mehr gebraucht wird, das Objekt löschen.
;Oder je nachdem wie es gebraucht wird erst am Ende des Programms
;alle löschen.

Delete Each result

End



PS: Ich hab mir erlaubt deinen Code etwas abzuändern, so das wenn es gar keine Trennzeichen gibt der Ganze String in array index 0 zurückgegeben wird.

regaa

BeitragMo, März 22, 2004 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab das ganze etwas modifiziert so das mman limit nicht mehr angeben braucht, eben optional, aber da hätt ich ne frage, und zwar wollt ich dann auch eine sizeof, oder ocunt funktion für schreiben aber wenn ich ne vari vom typen in einer funktion verwendet gibts die fehlermeldung, variable must be a type. Sad

regaa

BeitragMo, März 22, 2004 12:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, hab das Problem gelöst. 8)

TheShadow

Moderator

BeitragMo, März 22, 2004 18:48
Antworten mit Zitat
Benutzer-Profile anzeigen
blitzarrays kannst du zurückliefern - da hast du aber immer statische dimensiongröße

steht in hilfe/tutorial/undokumentierte features
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group