Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Array in ShowMessage ausgeben? (https://www.delphipraxis.net/178801-array-showmessage-ausgeben.html)

AlexII 28. Jan 2014 13:51

Array in ShowMessage ausgeben?
 
Hallo,

mir gelingt es nicht ein Array in einer ShowMessage auszugeben, hier der Code:

Delphi-Quellcode:
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;
Was mache ich falsch?

DeddyH 28. Jan 2014 13:52

AW: Array in ShowMessage ausgeben?
 
Wie soll es denn sein, eine Message je Element oder alle Elemente in einer Message?

AlexII 28. Jan 2014 13:54

AW: Array in ShowMessage ausgeben?
 
Alle Elemente der Reihe nach zeigen, also z.B. so "24354501"

baumina 28. Jan 2014 13:57

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;

DeddyH 28. Jan 2014 13:58

AW: Array in ShowMessage ausgeben?
 
So?
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;
Oder als eigene Funktion:
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;

AlexII 28. Jan 2014 14:03

AW: Array in ShowMessage ausgeben?
 
Ah.. jah... ok, ich dachte es geht irgendwie mit einer Schreibweise von a.
Danke ecuh!

Der schöne Günther 28. Jan 2014 16:09

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:
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;
Mit einem so festgeschriebenen Array wie
Delphi-Quellcode:
Array[X..Y] of someType
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)

himitsu 28. Jan 2014 17:02

AW: Array in ShowMessage ausgeben?
 
Du kannst auch gern die Generics etwas ausnutzen.
Delphi-Quellcode:
function TIntegerArrayHelper.ToString: String;
var
  Element: Integer;
begin
  Result := Default(String);
  for Element in Self do
    Result := Result + Element.ToString;
end;
Im Prinzip ist diese Funktion schon für alles Arrays gewappnet, solange die Elemente ein ToString besitzen.
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;

Der schöne Günther 28. Jan 2014 17:45

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.

himitsu 28. Jan 2014 17:52

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 08:22 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz