Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array kopierern (https://www.delphipraxis.net/115868-array-kopierern.html)

DelphiManiac 19. Jun 2008 09:01


Array kopierern
 
Hallo,

komischerweise habe zudem (ja recht trivialen Thema) nicht in der Suche gefunden,
nun gut,


Ich habe zwei Puffer=

Delphi-Quellcode:
OutPuffer: array [0..6] of byte;
InPuffer: array [0..6] of byte;
Nun will ich den Inhalt (nur den Inhalt will nicht den Fehler machen und den Zeiger kopieren) des einen Puffers in den anderen übertragen.
Natürlich könnte ich eine Schleife nehmen, die mir die Werte durch den Index einträgt, aber es gibt da doch bestimmt eine Funktion,
die das für mich macht, oder?!

Da gab es doch irgendwas mit Copy,...

Viele Grüße
DM

Muetze1 19. Jun 2008 09:03

Re: Array kopierern
 
Einfach mal die Hilfe zu Delphi-Referenz durchsuchenCopy() angeschaut?

FAlter 19. Jun 2008 09:04

Re: Array kopierern
 
Hi,

da es sich um kein dynamisches Array handelt, kannst du sie glaub ich einfach zuweisen.

Bei dynamischen Arrays solltest du aber Copy verwenden, von Low(MyArray), Anzahl der Zeichen: Length(MyArray). :)

Mfg
FAlter

DelphiManiac 19. Jun 2008 09:08

Re: Array kopierern
 
Hi,

ja habe ich, aber ein Aufruf

Delphi-Quellcode:
 OutPuffer := Copy (InPuffer,0,6);
scheitert mit der Meldung "Inkompatible Typen"...

DelphiManiac 19. Jun 2008 09:09

Re: Array kopierern
 
@FAlter

Bist du dir sicher,

das das erlaubt ist:

Delphi-Quellcode:
OutPuffer := InPuffer; // Wird hier nicht der Zeiger kopiert???
Gruß
DM

DeddyH 19. Jun 2008 09:12

Re: Array kopierern
 
Nur ein Gedanke:
Delphi-Quellcode:
type TPuffer = array [0..6] of byte;

var OutPuffer, InPuffer: TPuffer;
...
OutPuffer := Copy(InPuffer,Low(InPuffer),Length(InPuffer));

DelphiManiac 19. Jun 2008 09:14

Re: Array kopierern
 
Es macht anscheindend einen Unterschied ob ich dass mache:


Delphi-Quellcode:
OutPuffer : array [0..6] of byte;
InPuffer : array [0..6] of byte;

OutPuffer := InPuffer;
oder ob ich einen Typ definiere:

Delphi-Quellcode:
TRxTxBuffer : array [0..6] of byte;

OutPuffer : TRxTxBuffer;
InPuffer : TRxTxBuffer;

DelphiManiac 19. Jun 2008 09:15

Re: Array kopierern
 
@DeddyH

genau das war es!!!

Da hatten wir wohl beide den gleichen Gedanken :-)))) :)

RavenIV 19. Jun 2008 09:17

Re: Array kopierern
 
Steht so sogar in der Delphi-Hilfe drin:

Zitat:

Arrays sind nur dann zuweisungskompatibel, wenn sie denselben Typ haben. Da Delphi Namensäquivalente für Typen verwendet, wird folgender Quelltext nicht compiliert:

var
Int1: array[1..10] of Integer;
Int2: array[1..10] of Integer;
...
Int1 := Int2;

Damit die Zuweisung korrekt bearbeitet werden kann, deklarieren Sie die Variablen folgendermaßen:

var Int1, Int2: array[1..10] of Integer;

oder

type IntArray = array[1..10] of Integer;
var
Int1: IntArray;
Int2: IntArray;

FAlter 19. Jun 2008 09:20

Re: Array kopierern
 
Hi,

was du hast ist ein statisches Array. Das funktioniert anders als ein dynamisches.

Delphi-Quellcode:
var
  StaticArray: array[0..9] of Integer; //feste Länge
  DynamicArray: array of Integer;     //variable Länge
Ein dynamisches Array verwendet einen Zeiger auf die Stelle, wo die Daten stehen, und die Länge kann per SetLength eingestellt werden.

Ein statisches Array wird dagegen direkt und nicht über Zeiger angesprochen, daher sollte eine Zuweisung keine Probleme bereiten.

Delphi-Quellcode:
var
  a, b: array[0..6] of integer;
begin
  a := b;
end;
Funktioniert einwandfrei. Wichtig ist: Entweder du definierst einen Typ, oder du nennst die Variablen in einem Rutsch (also per Komma getrennt), da sie sonst evtl. als unterschiedliche Typen angesehen werden.

Lasst mich doch auch mal zu Wort kommen mir euren roten Kästen hier. Copy ist unnötig in diesem Fall. Und ich kann es nicht leiden, wenn ich mir die Arbeit mache, etwas zu erklären, und es schon längst abgeschickt hätte, nur dass mich der rote Kasten daran gehindert hat, und dann kommt der nächste rote Kasten, und dann der dritte, in dem fast das gleiche steht wie ich geschrieben habe. :wall: Das kann doch nicht der Sinn des roten Kastens sein.

Mfg
FAlter

Sherlock 19. Jun 2008 09:25

Re: Array kopierern
 
[OT] Machs wie ich: Ignoriere den roten Kasten und klicke ganz schnell so oft das Knöpfchen, bis der Beitrag steht :mrgreen: [/OT]

Sherlock

RavenIV 19. Jun 2008 09:25

Re: Array kopierern
 
Zitat:

Zitat von FAlter
Lasst mich doch auch mal zu Wort kommen mir euren roten Kästen hier. Copy ist unnötig in diesem Fall. Und ich kann es nicht leiden, wenn ich mir die Arbeit mache, etwas zu erklären, und es schon längst abgeschickt hätte, nur dass mich der rote Kasten daran gehindert hat, und dann kommt der nächste rote Kasten, und dann der dritte, in dem fast das gleiche steht wie ich geschrieben habe. :wall: Das kann doch nicht der Sinn des roten Kastens sein.

/offtopic
Der Sinn des roten Kastens ist, dass man darauf aufmerksam gemacht wird, dass inzwischen weitere Beiträge geschrieben wurden oder dass der ursprüngliche Beitrag editiert wurde.
Evtl. ist dann der Beitrag, den man posten will überflüssig.
Du musst dann schon auch lesen, was in dem roten Kasten steht.

/ironie
Und wenn Du zu langsam bist, können wir nichts dafür

FAlter 19. Jun 2008 09:57

Re: Array kopierern
 
Hi,

Diskussionen zum roten Kasten bitte hier:

http://www.delphipraxis.net/internal...t.php?t=137036

Mfg
FAlter


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 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