AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Array in ShowMessage ausgeben?
Thema durchsuchen
Ansicht
Themen-Optionen

Array in ShowMessage ausgeben?

Ein Thema von AlexII · begonnen am 28. Jan 2014 · letzter Beitrag vom 14. Jan 2023
Antwort Antwort
Seite 1 von 2  1 2      
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#1

Array in ShowMessage ausgeben?

  Alt 28. Jan 2014, 13:51
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?
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Array in ShowMessage ausgeben?

  Alt 28. Jan 2014, 13:52
Wie soll es denn sein, eine Message je Element oder alle Elemente in einer Message?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Array in ShowMessage ausgeben?

  Alt 28. Jan 2014, 13:54
Alle Elemente der Reihe nach zeigen, also z.B. so "24354501"
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Array in ShowMessage ausgeben?

  Alt 28. Jan 2014, 13:57
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;
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Array in ShowMessage ausgeben?

  Alt 28. Jan 2014, 13:58
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Array in ShowMessage ausgeben?

  Alt 28. Jan 2014, 14:03
Ah.. jah... ok, ich dachte es geht irgendwie mit einer Schreibweise von a.
Danke ecuh!
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Array in ShowMessage ausgeben?

  Alt 28. Jan 2014, 16:09
Hintergedanken an Java und sein 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 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)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#8

AW: Array in ShowMessage ausgeben?

  Alt 28. Jan 2014, 17:02
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Array in ShowMessage ausgeben?

  Alt 28. Jan 2014, 17:45
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#10

AW: Array in ShowMessage ausgeben?

  Alt 28. Jan 2014, 17:52
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (28. Jan 2014 um 17:57 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 Uhr.
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