Registriert: Sa Okt 22, 2005 20:24 Beiträge: 291 Wohnort: Frauenfeld/CH
Da ich momentan am ausprobieren bin von streams, würde ich gerne wüssen, wie ich mehrere (unbekannte) Parameter übergeben kann, die als var übergeben werden.
Ich möchte eigentlich den Effekt hinbringen von write() und read(), in der Konsole.
Ich habe dann zb für write eine Methode writearray(const array of const), wie mache ich das gleiche jetzt mit readarray(???)
Ich weiss auch nicht ob das mit "const array of const" wirklich funktioniert, aber auf jeden Fall spuckt mir der Debugger da keine Exception aus.
Ich wäre natürlich auch für Alternativmethoden zu haben, da ich bei der obigen Procedure immer ein "[]" setzen muss.
Wenn es nicht möglich ist dieses Problem so zu lösen, wäre ich natürlich auch für Alternativvorschläge zu haben.
Fürs lesen gibt es sowas wie array of const nicht. Wenn du array of const zum schreiben verwenden willst, solltest du dir vorher unbedingt die DelphiHilfe mit dem Sample ansehen.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
doch, müsste mit array of var gehen
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ich denke mal, dass Delphi intern anstelle des "array of const" ein VariantArrays benutzt. Ein Variant ist ein Datentyp der beliebige Datentypen beinhalten kann. Ich hätte darauf getippt, dass ein "var blah: array of const" funktioniert. Tut es aber nicht. Aber hier mal eine andere Idee.
Das funktioniert soweit. Allerdings ist es besser, wenn man bei Write auch den Typen TMyFunnyArray benutzt. Dann kann man aber keine Arrays wie das zweite Write mehr direkt übergeben. Sondern nur noch per TMyFunnyArray. Dafür könnte man sich aber eine Hilfsfunktion shreiben. Aber das ist reine Geschmackssache.
Noch etwas nicht unwichtiges. Varianten sind nicht die schnellsten Datentypen. Wenn du also etwas mehr damit zu tun hast oder es Zeitkritisch werden könnte dann solltest du dir etwas anderes überlegen.
Registriert: Sa Okt 22, 2005 20:24 Beiträge: 291 Wohnort: Frauenfeld/CH
@lossy: das ganze ist ja schonmal sehr gut nur möchte ich eigentlich im read auch einfach typen eingeben können, nämlich so: read([string, integer, word]); usw... ich weiss also nicht wie das mit der parameter übergabe geht...
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Gaukler. Irgendwie verstehe ich das gerade absolut nicht. Aber da das "array of const" nur zum reinreichen in die Methode gedacht sind denke ich wirst du so eine einfache Methode nicht bekommen. Zu mindest nicht so einfach wie du dir das gerade vorstellst.
Möchtest du der Methode sagen, dass du als erstes einen String dann einen Integer und zu letzt ein Word laden soll? Wenn ja dann hast du das Problem, dass du sowohl etwas reinreichen als auch etwas wieder heraus bekommen möchtest. Ich persönlich würde das nicht mit einer Methode machen die Nachteile die du davon mitbekommst dürften den vorteilen überwiegen.
Du müsstest dann dann wohl so machen wie es delphi mit den "array of const" machst. Das ist ein array von records welche eine Feld mit dem Typen hat und ein Feld mit den Daten. Und das wird über ein Case ausgewählt. Aber wie gesagt ich finde das nicht sonderlich optimal.
Registriert: Sa Okt 22, 2005 20:24 Beiträge: 291 Wohnort: Frauenfeld/CH
Lossy eX hat geschrieben:
Möchtest du der Methode sagen, dass du als erstes einen String dann einen Integer und zu letzt ein Word laden soll? Wenn ja dann hast du das Problem, dass du sowohl etwas reinreichen als auch etwas wieder heraus bekommen möchtest.
hmm hast du mich etz falsch verstanden oder kapier ichs einfach nich?
Naja wie auch immer, ich möchte einfach ein paar werte herausbekommen, bzw ich möchte die referenz eines wertes, mehrere undefinierte werte aus einer datei laden, dass sieht dann zb so aus:
Allerdings kann ich hier nicht wie bei const array of Variant einfach Werte zurückschreiben, wenn ich hier zb ein Read([integer, word, string]); eingebe, spuckt er irgendeine Compilermeldung raus.
Von mir aus, kann das ganze auch ohne Variant zu erledigen sein, ich will halt einfach nur mehrere Typen nacheinander auslesen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ja okay dann habe ich das doch richtig verstanden. Und so wie du dir das denknst geht es nicht. Das Problem ist, dass String, Integer und word Delphi Typen sind. Mit denen kannst du nicht arbeiten. Abgesehen mal davon, dass ein String sogar nur ein Pointer ist und du vorher in die Datei eigentlich eine Größe schreiben musst. Andersherum musst du diese natürlich auch wieder auslesen.
Aber wie auch immer. Ich denke mal von der Grundidee wird es so in etwa ablaufen müssen wie du es gemacht hast. Also dass du ein Array hättest bei der du auf dem einen Feld einen Typen zuweist und entsprechend bei dem anderen Feld dann den Wert zuweist. Davon müsstest du ein Array erstellen welches du vor dem Aufruf füllst (also die Typen) und an die Methode übergibst. Diese wiederrum würde das befüllen und du hättest deine Werte in den entsprechenden einträgen stehen.
TVarRec2 =record{ do not pack this record; it is compiler-generated }
DataType: TVarRecTypes;
case DataType of
vtInteger:(VInteger:Integer);
vtBoolean:(VBoolean:Boolean);
vtChar:(VChar:Char);
vtExtended:(VExtended:Extended);
vtString:(VString:String);
end;
Allerdings finde ich das viel viel zu umständlich. Abgesehen davon, dass das Datenhandling auch vel zu umständlich ist und wohl zu viel Rechenleistung schlucken würde.
Ich persönlich würde mir wohl kleine Hilfsmethoden erstellen die mir einen einen Integer, einen String oder ein Word auslesen. Weil es eigentlich keine Rolle spielt ob du 3 unterschiedliche Methoden aufrufst oder eine Methode mit den 3 Parametern. Was du haben willst musst du vorher eh wissen.
Mitglieder in diesem Forum: Majestic-12 [Bot] und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.