![]() |
Syntax-Frage: Einem Array mehrere Werte "aufeinmal"
Hallo,
Folgendes Problem : Ich habe zwei Arrays (String-Arrays, jeweils 52 Indizes) und muss nun jedem Glied manuell einen Wert zuweisen. Geht das auch anders als:
Delphi-Quellcode:
irgendsowas wie
array1[1] := "xxx";
array1[2] := "xxx"; array1[3] := "xxx";
Delphi-Quellcode:
array1 := {"xxx", "xxx", "xxx"}
|
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Nimm doch eine Schleife.
|
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Eine Schleife bringt mir recht wenig, da die Strings die in das Array sollen nicht mathematisch oder in irgend einer Art und weise zusammenhängen (es ist jetz nicht das Alphabet oder so, da wäre ja z.b. chr() hilfreich)
|
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Dann bleibt dir wohl tatsächlich nur die manuelle Zuweisung...
|
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Okay, vielen Dank für die Antwort :mrgreen:
Ist ja auch kein Problem, sieht halt nur ein wenig komisch aus^^. Aber wenns anders nicht geht kann man nix machen, danke nochmals. |
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Ich wollte mal darauf hinweisen das bei diesem Code:
Delphi-Quellcode:
Der Eindruck entsteht als wolltest du das Array immer mit dem selben Inhalt füllen (hier "xxx"). Zum besseren Verständnis auch hier im Beispiel dann bitte verschiedene Werte benutzen wie zB abc, mno, xyz. So wird deutlich das es sich um verschiedene Werte handelt.
array1[1] := "xxx";
array1[2] := "xxx"; array1[3] := "xxx"; Grüße |
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Kannst folgende procedure verwenden.
Delphi-Quellcode:
Dann kannst du so die Daten zuweisen
procedure AssignStringArrayValues(var aStringArrayTarget: array of string;aStringArraySource: array of string);
var lTargetIndex:Integer; lSourceIndex:Integer; begin lTargetIndex:=Low(aStringArrayTarget); lSourceIndex:=Low(aStringArraySource); while (lTargetIndex<=high(aStringArrayTarget)) and (lSourceIndex<=high(aStringArraySource)) do begin aStringArrayTarget[lTargetIndex]:=aStringArraySource[lSourceIndex]; Inc(lTargetIndex); Inc(lSourceIndex); end; end;
Delphi-Quellcode:
var myArray:array[3..5] of string; begin AssignStringArrayValues(myArray,['asdasd','asdasd']); end; Ungetestet. |
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Hi bernau
Ich glaube den Code kann man noch extrem vereinfachen:
Delphi-Quellcode:
Aber gute Idee! :) :thumb:
procedure FillArray(var Dest: Array of String; Source: Array of String);
begin Move(Source[Low(Source)],Dest[Low(Dest)],Length(Dest)*4); end; var arr: Array[3..7] of String; begin FillArray(arr,['Hallo','Welt','!','DelphiPraxis','!']); end; Auf die Idee wäre ich nicht gekommen. Mich ärgert das z.T. auch :? Gruß Neutral General |
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Zitat:
Bis denne. |
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Zitat:
1) Was ist, wenn Dest schon gefüllt ist. Die Pointer werden doch einfach überschrieben. Leckt da der Speicher nicht etwas. 2) Du weist Pointer von Source zu, die nach Ablauf der Procedure gar nicht mehr gültig sind. |
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Da passiert mit Zeigern gar nichts. Dest und Source sind doch im Header der procedure als Arrays deklariert.
Aufgedröselt bedeutet
Delphi-Quellcode:
nichts anderes als:
Move(Source[Low(Source)],Dest[Low(Dest)],Length(Dest)*4);
Verschiebe vom ersten Element des Arrays Source an, alle seine Elemente in das Array Dest, aber nur maximal so viele wie in Dest reinpassen. Und da ist glaub ich noch ein Problem, denn wenn in Source weniger ist als in Dest rein passt, wird unvorhersehbares als weiteres Arrayelement zugeordnet. Sherlock |
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Hi,
1) Da hast du recht :? 2) Dachte ich auch, aber scheinbar ist das nicht der Fall. Folgendes funktioniert:
Delphi-Quellcode:
Wegen 1) werd ich mal gucken...
type
TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public arr: Array[3..7] of String; end; var Form1: TForm1; implementation {$R *.dfm} procedure FillArray(var Dest: Array of String; Source: Array of String); begin Move(Source[Low(Source)],Dest[Low(Dest)],Length(Dest)*4); end; procedure TForm1.Button1Click(Sender: TObject); begin FillArray(arr,['Hallo','Welt','!','DelphiPraxis','!']); end; procedure TForm1.Button2Click(Sender: TObject); var i: Integer; begin for i:= low(arr) to high(arr) do ShowMessage(arr[i]); end; @Sherlock Zitat:
Zitat:
Zitat:
|
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Mit konstanten Strings funktioniert das, da der Referenzzähler dort immer auf -1 steht. Trotzdem sollte man es lieber sauber machen.
|
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Hmmm...ich seh das mit den Pointern nicht.
Aus der OH: Zitat:
In dieser Hinsicht sind vielleicht Source[Low(Source)] und Dest[Low(Dest)] als Zeiger zu werten. Aber kopiert wir doch der Inhalt des Arrays Source. Aber... :gruebel: Sherlock |
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Das Array enthält Ansistrings, welche Zeiger sind. Dabei wird der Referenzzähler nicht erhöht.
|
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Zitat:
Delphi-Quellcode:
auch die sauberste Methode.
procedure FillArray(var Dest: array of string; const Source: array of string);
var I: Integer; begin for I := 0 to Min(Length(source), Length(Dest)) - 1 do Dest[I] := Source[I]; end; |
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Zitat:
|
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Zitat:
Delphi-Quellcode:
FillArray(arr,['Hallo','Welt','!','DelphiPraxis','!']);
arr[4]:='bla'; Das Array erhält mit "FillArray" die Zeiger der Konstanten. Dann wird mit dem Zweiten Befehl in den Speicher der Konstanten geschrieben. Übel. |
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Zitat:
Das ist tatsächlich die eleganteste Lösung. Zugelernt habe ich, daß der Anfang eines Array in der Procedure immer mit 0 beginnt, obwohl das übergebende Array einen ganz anderen Indexbereich hat. z.B. von 4 bis 8. |
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Zitat:
|
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Hallo,
bei der Initialisierung von dynamischen Arrays unterstützt das BDS auch die folgende Notation:
Delphi-Quellcode:
Wenn die Initialisierung wirklich im Code durchgeführt werden muss, dann kann die genannte Variante unter Umständen zu einem etwas kompakteren Quelltext führen.
type
TDynStringArray = array of string; var DynamicArray : TDynStringArray; begin DynamicArray := TDynStringArray.Create('A', 'B', 'C', 'D'); end; Gruß Hawkeye |
Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 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