Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Syntax-Frage: Einem Array mehrere Werte "aufeinmal" zuweisen (https://www.delphipraxis.net/122403-syntax-frage-einem-array-mehrere-werte-aufeinmal-zuweisen.html)

STaRDoGGCHaMP 15. Okt 2008 14:40


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:
array1[1] := "xxx";
array1[2] := "xxx";
array1[3] := "xxx";
irgendsowas wie
Delphi-Quellcode:
array1 := {"xxx", "xxx", "xxx"}

DeddyH 15. Okt 2008 14:42

Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
 
Nimm doch eine Schleife.

STaRDoGGCHaMP 15. Okt 2008 14:45

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)

Sven M. 15. Okt 2008 14:48

Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
 
Dann bleibt dir wohl tatsächlich nur die manuelle Zuweisung...

STaRDoGGCHaMP 15. Okt 2008 14:53

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.

Frankfurtoder 15. Okt 2008 14:59

Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
 
Ich wollte mal darauf hinweisen das bei diesem Code:

Delphi-Quellcode:
array1[1] := "xxx";
array1[2] := "xxx";
array1[3] := "xxx";
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.

Grüße

bernau 15. Okt 2008 15:10

Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
 
Kannst folgende procedure verwenden.

Delphi-Quellcode:
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;
Dann kannst du so die Daten zuweisen

Delphi-Quellcode:

var
  myArray:array[3..5] of string;
begin
  AssignStringArrayValues(myArray,['asdasd','asdasd']);
end;

Ungetestet.

Neutral General 15. Okt 2008 15:19

Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
 
Hi bernau

Ich glaube den Code kann man noch extrem vereinfachen:

Delphi-Quellcode:
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;
Aber gute Idee! :) :thumb:
Auf die Idee wäre ich nicht gekommen. Mich ärgert das z.T. auch :?

Gruß
Neutral General

bernau 15. Okt 2008 15:33

Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
 
Zitat:

Zitat von Neutral General
Ich glaube den Code kann man noch extrem vereinfachen:

Ja bestimmt. Ich hatte es aber nur so runtergeschrieben. War mir aber nicht sicher, ob der index von myArray in der procedure nun mit 3 anfängt oder mit 0. Ist ja z.B. mit [3..5] deklariert. Deshalb habe ich jedem array einen eigenen index zugewiesen und jeweils geprüft, ob dieser sich im Wertebereich befindet.

Bis denne.

bernau 15. Okt 2008 16:01

Re: Syntax-Frage: Einem Array mehrere Werte "aufeinmal&
 
Zitat:

Zitat von Neutral General
Delphi-Quellcode:
Move(Source[Low(Source)],Dest[Low(Dest)],Length(Dest)*4);

Helf mir mal. Vieleicht habe ich ja einen Gedankenfehler aber hierbei werden doch nur die Zeiger der Strings kopiert.

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:02 Uhr.
Seite 1 von 3  1 23      

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