![]() |
Array in ShowMessage ausgeben?
Hallo,
mir gelingt es nicht ein Array in einer ShowMessage auszugeben, hier der Code:
Delphi-Quellcode:
Was mache ich falsch?
procedure TForm1.Button2Click(Sender: TObject);
var a : Array[1..8] of Integer; i : Integer; begin for i:=1 to 8 do a[i]:= Random(9); ShowMessage(IntToStr(a[])); end; |
AW: Array in ShowMessage ausgeben?
Wie soll es denn sein, eine Message je Element oder alle Elemente in einer Message?
|
AW: Array in ShowMessage ausgeben?
Alle Elemente der Reihe nach zeigen, also z.B. so "24354501"
|
AW: Array in ShowMessage ausgeben?
Mach dir eine Hilfsvariable, so z.B.:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var a : Array[1..8] of Integer; i : Integer; s : String; begin s := ''; for i:=1 to 8 do begin a[i]:= Random(9); s := s + IntToStr(a[i]); end; ShowMessage(S); end; |
AW: Array in ShowMessage ausgeben?
So?
Delphi-Quellcode:
Oder als eigene Funktion:
procedure TForm1.Button2Click(Sender: TObject);
var a : Array[1..8] of Integer; i : Integer; s: string; begin s := ''; for i:=1 to 8 do begin a[i]:= Random(9); s := s + IntToStr(a[i]); end; ShowMessage(s); end;
Delphi-Quellcode:
function IntArrayToStr(const Ints: array of integer): string;
var i: integer; begin Result := ''; for i := Low(Ints) to High(Ints) do Result := Result + IntToStr(Ints[i]); end; |
AW: Array in ShowMessage ausgeben?
Ah.. jah... ok, ich dachte es geht irgendwie mit einer Schreibweise von a.
Danke ecuh! |
AW: Array in ShowMessage ausgeben?
Hintergedanken an Java und sein
Delphi-Quellcode:
? ;-)
ToString()
Ich würde es in Delphi mit einer Helperklasse machen, ich liebe die Dinger.
Delphi-Quellcode:
Mit einem so festgeschriebenen Array wie
interface
TIntegerArrayHelper = record helper for TArray<Integer> function ToString(): String; end; implementation function TIntegerArrayHelper.ToString(): String; var elementNo: Integer; begin Result := EmptyStr; for elementNo := Low(self) to High(self) do Result := Result + self[elementNo].ToString(); end;
Delphi-Quellcode:
klappt das natürlich nicht. Die Helperklasse hier würde nur für jedes dynamische Integer-Array greifen. Alternativ (z.B. wenn es denn immer 8 Integer sind) kann (und sollte) man sich einen eigenen Typen-Alias definieren (und dann kann man wieder eine spezielle Helperklasse dafür bauen)
Array[X..Y] of someType
|
AW: Array in ShowMessage ausgeben?
Du kannst auch gern die Generics etwas ausnutzen.
Delphi-Quellcode:
Im Prinzip ist diese Funktion schon für alles Arrays gewappnet, solange die Elemente ein ToString besitzen.
function TIntegerArrayHelper.ToString: String;
var Element: Integer; begin Result := Default(String); for Element in Self do Result := Result + Element.ToString; end; Objekte haben Dieses, aber das ist noch recht selten "richtig" implementiert, bzw. es wurde oftmals vergessen es entsprechend zu überschreiben.
Delphi-Quellcode:
function TIntegerArrayHelper.ToString(Separator: Char=#0): String;
var Element: Integer; begin Result := ''; for Element in Self do if (Result <> '') and (Separator <> #0) then Result := Result + Separator + Element.ToString else Result := Result + Element.ToString; end; // bzw. function TIntegerArrayHelper.ToString(Separator: Char=#0): String; var Element: Integer; begin Result := ''; for Element in Self do Result := Result + Element.ToString + Separator; Delete(Result, High(Result), 1); end; |
AW: Array in ShowMessage ausgeben?
Das ein "for .. in" auf record-Typen funktioniert hätte ich nicht gedacht. Aber wo sind denn da Generics?
Und ja, die Elemente-Ausgabe noch mit einem Separator zu trennen hätte ich auch noch eingebaut. Als Verbesserungsvorschlag: Den Separator als String und nicht Char! Ich habe schon oft geweint weil ich irgendwo als Trennung zwei oder mehr Zeichen haben wollte und irgendeine blöde Methode dachte, mich mit einem einzigen Char abspeisen zu können. |
AW: Array in ShowMessage ausgeben?
Die sind intern versteckt.
z.B. viele Standard-Enumeratoren werden automatisch über einen generischen Basistyp erzeugt und das Default(Typ) ist auch von da. Für Arrays wird intern ein Enumator generisch erzeugt, sobald man das Array mit For-In verwendet. Als Char war der halt "einfacher", borallem beim letzen Beispiel. Aber da den Seperator an den String-Anfang und man muß auch nichts mehr berechnen. (Delete mit Low und Length) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz