Bardziej przejrzysty zapis przypisywania wartości do komórek tablicy

0

Czy da się jakoś przejrzyście zapisać dane

Var
DataOut : Array[0..100] of Byte;

Begin
DataOut[0]:=5;DataOut[1]:=$fe;DataOut[2]:=$02;DataOut[3]:=$03;DataOut[4]:=$04;DataOut[5]:=$09;
End; 

Chodzi mi np{ps. wiem że tak nie pójdzie ale pokazuje o co mi chodzi)

dataout[]:=$5,fe,02,03,04,09
0

Trzeba podać wszystkie 101 elementów.

var
   DataOut : Array[0..100] of Byte
     = (5,$fe,2,3,4,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
0

Mi chodziło nie o inicjalizacje tylko modyfikacje w trakcje pisania kodu

0

to zostaje komórka po komórce

2

Możliwości jest dużo - jedna z nich to procedura pobierająca otwartą macierz liczb i kopiująca ją pod adres zadanej komórki, za pomocą szybkiej procedury Move:

type
  TDataOut = array [0 .. 100] of Byte;

  procedure SetData(var ABuffer: TDataOut; AIndex: Integer; const AData: array of Byte);
  begin
    Move(AData[0], ABuffer[AIndex], Length(AData));
  end;

Przykładowe wywołanie:

var
  LDataOut: TDataOut;
begin
  SetData(LDataOut, 0, [$05, $FE, $02, $03, $04, $09]);

Lub wersja z domyślnym indeksem komórki, coby wyszło krócej, jeśli dane domyślnie mają być przekopiowane na początek bufora:

procedure SetData(var ABuffer: TDataOut; const AData: array of Byte; AIndex: Integer = 0);
begin
  Move(AData[0], ABuffer[AIndex], Length(AData));
end;

Wywołanie będzie krótsze o jeden parametr:

SetData(LDataOut, [$05, $FE, $02, $03, $04, $09]);

nie pozbawiając możliwości określenia indeksu komórki, w razie gdyby trzeba było inny ciąg bajtów wrzucić gdzieś do środka macierzy; Można też pobierać od razu wskaźnik na konkretną komórkę.

0

Dziękuje bardzo. Bardzo dobry przykład. Działa perfekt:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1