Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Fingerboarder
Anmeldungsdatum: 09.12.2006 Beiträge: 37
|
Verfasst am: 26.12.2006, 15:31 Titel: UDT-Records über Namen ansprechen |
|
|
Wie kann man UDT-Records variabel ansprechen?
Code: |
type testtype
a as integer
b as integer
c as string
end type
dim var as testtype
var.a = 1
var.b = 2
var.c = "teststring"
? var.c 'normales anprechen
sleep
'so und nun möchte einen bestimmten Record auslesen
'entweder a,b oder c
'da ich ja faul bin :p und den source kleinhalten will,
'möchte ich keine if`s verwenden
'also möchte ich die Records mit einer variable ansprechen:
'dim s as string
's = "a"
'? var.s
'das klappt aber nicht
|
Ich hab es bis jetzt mit if´s gemacht, aber das wird dann recht unübersichtlich. Vielleicht gibt es ja noch eine andere Möglichkeit.
Danke im Vorraus! |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 26.12.2006, 17:59 Titel: |
|
|
Zauberwort: Overload:
Code: | Type DeinTyp
i As Integer
s As String
End Type
Declare Function Overload ConvStr (Src As Integer) As String
Declare Function ConvStr (Src As String) As String
Dim x As DeinTyp
Dim d As String
x.i = 10
x.s = "10"
d = ConvStr(x.i)
d = ConvStr(x.s)
Function Overload ConvStr(Src As Integer) As String
Return = Str(Src)
End Function
Function ConvStr (Src As String) As String
Return Src
End Function |
Siehe auch Referenz-Eintrag:
http://www.freebasic.de/r.php?s=OVERLOAD _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
Fingerboarder
Anmeldungsdatum: 09.12.2006 Beiträge: 37
|
Verfasst am: 26.12.2006, 18:36 Titel: |
|
|
Ja das ist schön und gut aber es geht ja nicht um die unterschiedlichen Datentypen, sondern ich möchte aus meinem Type ein "zufälliges" (ich mein damit, das kann immer unterschiedlich sein) Record auslesen:
Code: |
type meintype
record1 as integer
record2 as integer
record3 as string
end type
dim var as meintype
dim s as String
var.record1 = 255
var.record2 = 123
var.record3 = "teststring"
'so, bis zu dieser Stelle ist alles klar
'nun hab ich von meinem Programm eine Variabl, zB:
s = "record1" 'oder s = "record2" oder s = "record3"
'das weiß ich vorher nicht
'nun kann ich viele if`s machen, zB:
if s = "record1" Then Print var.record1 'usw. mit den andern recs.
sleep
'ich würde aber gerne das direkt ansprechen, in PHP geht das zB. so
' $a['test'] = 'hallo';
' $index = 'test'
' echo $a[$index];
|
(Dass das Beispiel aus PHP ein Array und kein Type ist, ist mir bewusst. ) ^^ |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 26.12.2006, 19:35 Titel: |
|
|
Ah, das meinst du.
Hm, in FB so nicht möglich imho. Sorry. _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Fingerboarder
Anmeldungsdatum: 09.12.2006 Beiträge: 37
|
Verfasst am: 26.12.2006, 20:27 Titel: |
|
|
Aber trotzdem Dankeschön! 8)
Ich werde das jetzt mit select case machen. |
|
Nach oben |
|
 |
croco97

Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 27.12.2006, 00:39 Titel: |
|
|
Ich hab's jetzt nicht ausgetestet, aber der Spur nach:
Code: |
type tfoo
recs(3) as any ptr
end type
dim as tfoo foo
with foo
.recs(0)=allocate(LEN(integer))
.recs(1)=allocate(LEN(integer))
.recs(2)=allocate(100)
end with
*foo.recs(0)=1
*foo.recs(1)=2
dim as zstring s="abc"
*foo.recs(2)=s
for i=0 to 2
? *foo.recs(i)
deallocate(*foo.recs(i))
next i
|
Das wird so noch nicht gehen; ich bin jetzt zu faul, es zu testen und nachzuschauen, aber prinzipiell geht es.
Grüsse!
Croco |
|
Nach oben |
|
 |
|