Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Array mit verschiedenen Datentypen
Smartie - Di 26.04.05 09:20
Titel: Array mit verschiedenen Datentypen
Hallo!
Ich hab ein "kleines" Problemchen:
Ich möchte in einen Array verschiedene Datentypen abspeichern können. Geht das überhaubt?
Es handelt sich hierbei um Integer, Double sowie Strings.
Ich hoffe da weiß jemadn eine Lösung.
Ich habe bisher nur mit "Array of String" etc. pp. gearbeitet, noch nie mit gemischten Typen.
Lieben Gruß
Smartie
jasocul - Di 26.04.05 09:23
Geht evtl mit einem Array of Variant.
Ist aber keine gute Lösung. Variant ist langsam.
Smartie - Di 26.04.05 09:25
Danke, ich werds mal ausprobieren.
Geschwindigkeit ist hier nicht das Problem, zum Glück.
Lieben Gruß
Smartie
Smartie - Di 26.04.05 09:49
Servus!
Also, ich hab ein Testprojekt gestartet, um den Array of Variant auszutesten.
Ich hab folgendes Probiert, aber er bringt mir einen Fehler:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); var a : integer; var b: double; var c: String; type ZielArray = Array[0..2] of Variant; begin a := 43; b := 4.2; c := 'Hallo ArrayWelt'; ZielArray[0] := a; ZielArray[1] := b; ZielArray[2] := c; end; |
*Grübel*
Kann mir jemand bitte sagen, woran das liegt?
Danke und Lieben Gruß
Smartie
Moderiert von
Gausi: Code- durch Delphi-Tags ersetzt.
jasocul - Di 26.04.05 09:51
Welchen Fehler (immer dran denken)?
btw: Nimm statt Code-Tags lieber Delphi-Tags. Dann ist das schöner formatiert.
Habs mir mal angesehen. Bitte wie folgt ändern:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button1Click(Sender: TObject); type tZielArray = Array[0..2] of Variant; var a : integer; var b: double; var c: String; var ZielArray : tZielArray; begin a := 43; b := 4.2; c := 'Hallo ArrayWelt'; ZielArray[0] := a; ZielArray[1] := b; ZielArray[2] := c; end; |
Smartie - Di 26.04.05 09:54
Fehler: [Fehler] Unit1.pas(35): '(' erwartet, aber '[' gefunden
Ich kan nmir da nichtwirklich n Reim drauf machen. Ich vermute mal ein Array of Variant benötigt eine "besondere" Behandlung.
Lieben Gruß
Smartie
jasocul - Di 26.04.05 09:57
Habe meinen Beitrag editiert. Siehe oben.
Smartie - Di 26.04.05 10:05
:beer:
Jawohl! Tausend Dank! Es funktioniert!
Ich hab auch gleich mit Berechnungen experimentiert, und es läuft, kaum zu glauben!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Button1Click(Sender: TObject); var a : integer; var b, f: double; var c: String; type TZielArray = Array[0..2] of Variant; var ZielArray : tZielArray; begin a := 43; b := 4.2; c := 'Hallo ArrayWelt'; ZielArray[0] := a; ZielArray[1] := b; ZielArray[2] := c; label1.Caption := ZielArray[0]; label2.Caption := ZielArray[1]; label3.Caption := ZielArray[2]; f := a + b; label4.Caption := FloattoStr(f); end; |
Herzlichen Dank
Smartie
MitschL - Di 26.04.05 11:13
Moin!
Ich hab damit ein Problem. Woher seh ich, welchen Typ ich da vorfinde?
Dann frage ich mich auch: Kann ich die Daten unterschiedlichen Typs gruppieren? Dann würde ich mit Arrays arbeiten, die Records als Elemente enthalten. Wie sähe es ansonsten mit Records mit varianten Inhalten aus?
gegrüßt!
jasocul - Di 26.04.05 11:25
@MitschL:
Dein Einwand ist richtig, aber danach hat er nicht gefragt.
Selbst wenn du einen varianten Record für das Array benutzt, ist der Typ nicht zwangsläufig bekannt. Das hängt dann von der Konstruktion ab.
Wenn das Array allerdings nur diese 3 Elemente besitzt, die wie im Beispiel angeordnet sind, wäre ein Record sowieso die bessere Wahl gewesen.
Aber das Raten habe ich mir irgendwann mal abgewöhnt.
delfiphan - Di 26.04.05 11:26
MitschL hat folgendes geschrieben: |
Moin!
Ich hab damit ein Problem. Woher seh ich, welchen Typ ich da vorfinde?
|
Variant -> F1 (siehe auch
VarType :roll: )
Für Records mit variablem Inhalt, siehe
TVarRec. Und siehe auch
array of const.
PS:
MitschL ist ja gar nicht der Thread-Steller. Bitte eröffne bei neuen Fragen einen neuen Thread. Und schau erst in der Delphihilfe nach. Dass die Lösung deines Problems unter
Variant zu finden ist, ist ja eigentlich offensichtlich.
Du solltest stets die Dokumentation durchlesen, bevor du mit neuen Sachen arbeitest!! Dafür gibt's ja die Dokumentation. Die erklärt das ganze meistens viel besser und genauer, als es hier jemals jemand erklären wird :roll:
//Edit: Sorry, hab den Beitrag von MitschL falsch verstanden. Ich nehme meine Belehrung zurück ;)
Smartie - Di 26.04.05 12:34
MitschL hat folgendes geschrieben: |
Moin!
Ich hab damit ein Problem. Woher seh ich, welchen Typ ich da vorfinde?
|
Ist für mich kein Problem, da ich ja aus meiner INI rauslese, wie ich meine Daten zu interpretieren habe, wie sie dann zu speichern sind, eben in diesem Varainten-Array, und diese rausgelesenen Informationen speichere ich zudem in einem String-Array. D.h. Wenn ich aus welchen Grünen Auch immer wissen wollte, was für ein Typ in ZielArr[x1] ist, lese ich einfach meine Zielformat[x1] aus.
Gruß
Smartie
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!