Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Füllstand eines Arrays ermitteln? (https://www.delphipraxis.net/182831-fuellstand-eines-arrays-ermitteln.html)

himitsu 20. Nov 2014 18:01

AW: Füllstand eines Arrays ermitteln?
 
Nein.

Delphi-Strings sind längengezählt ... die enden da, wo es die längenangabe sagt.

Sie haben aber, aus Kompatibilitätsgründen, zwei #0 hinter dem letzten Zeichen, damit man die Strings ganz einfach nach PChar casten kann.
Dennoch erlaubt der Delphi-String prinzipiell auch das #0 mitten im String.

ShortString's haben kein #0 am Ende, drum geht es dort ausschließlich nach dem Längenbyte.

Und wie man das Ende in einem Char-Array definiert, ist vollkommen "egal", da es dort kein "String"-Ende gibt, weil das Array eben aus einzelnen Chars besteht und das hat grundsätzlich nichts mit einem "String" zu tun.

Klaus01 20. Nov 2014 18:34

AW: Füllstand eines Arrays ermitteln?
 
.. wäre es nicht zielführender die Strings in einer TStringlist zu verwalten.
Anzahl der Elemente kannst du dann mit TStringList.count ermitteln.

Grüße
Klaus

Sir Rufo 20. Nov 2014 18:46

AW: Füllstand eines Arrays ermitteln?
 
Was soll denn damit überhaupt erreicht werden? Wofür wird das benötigt?

In der Regel baut man sich eine Builder-Klasse, die weiß, was dort alles rein soll und darf und die spuckt dann bei Bedarf das richtige Ergebnis aus oder meckert halt mit einer Exception. Eine Eigenschaft
Delphi-Quellcode:
IsValid
geht natürlich auch.
Delphi-Quellcode:
TFooBuilder = class
  procedure Append( ... ); // was auch immer benötigt wird
  function TryAppend( ... ) : Boolean; // wie oben nur ohne Exception
  function Build : TFoo;
  function IsValid : Boolean;
  function TryBuild( out AFoo : TFoo ): Boolean;
end;

wonkos2 21. Nov 2014 09:01

AW: Füllstand eines Arrays ermitteln?
 
Ahoi zusammen,

wenn ich es richtig verstanden habe, endet jeder string mit #0 #0. Die Länge des Strings kann ich mit der Length Funktion abfragen. Soweit, so gut. Ich habe den String nun in ein Array of Char kopiert, welches eine feste Länge maximale Länge hat. Gibt es nun eine Funktion, die mir den Füllstand des Arrays ausgibt, oder muss ich zweimal #0 #0 filtern und der Rest ist mein string? Eine Klasse für das Problem einzusetzen, ist leider überkomplex.

Herzlichen Dank für Eure Kommentare!

wonkos

DeddyH 21. Nov 2014 09:13

AW: Füllstand eines Arrays ermitteln?
 
Kleiner Test:
Delphi-Quellcode:
procedure TFormTest.Button1Click(Sender: TObject);
const
  CONTENT = 'Hallo Welt' + #0; //#0 = Stringendezeichen
var
  Arr: array[0..255] of char;
  idx: integer;
begin
  for idx := 1 to Length(CONTENT) do
    Arr[idx - 1] := CONTENT[idx];
  ShowMessage(IntToStr(StrLen(Arr)));
end;

Bjoerk 21. Nov 2014 09:19

AW: Füllstand eines Arrays ermitteln?
 
Man könnte das Array vorher mit Null Werten füllen. Dann kann man die Länge bestimmen. Ist allerdings Steinzeit und auch fehleranfällig.

Delphi-Quellcode:
const
  cCharNil = #27;
  cMaxCharCount = 100;

type
  TCharArray = array [0..cMaxCharCount - 1] of char;

function GetClearCharArray: TCharArray;
var
  I: integer;
begin
  for I := 0 to cMaxCharCount - 1 do
    Result[I] := cCharNil;
end;

function GetCharArrayCharCount(const Value: TCharArray): integer;
begin
  Result := cMaxCharCount;
  while (Result > 0) and (Value[Result - 1] = cCharNil) do
    Dec(Result);
end;

baumina 21. Nov 2014 09:28

AW: Füllstand eines Arrays ermitteln?
 
-- gelöscht --

Jumpy 21. Nov 2014 09:37

AW: Füllstand eines Arrays ermitteln?
 
Zitat:

Zitat von wonkos2 (Beitrag 1280566)
Ahoi zusammen,

wenn ich es richtig verstanden habe, endet jeder string mit #0 #0. Die Länge des Strings kann ich mit der Length Funktion abfragen. Soweit, so gut. Ich habe den String nun in ein Array of Char kopiert, welches eine feste Länge maximale Länge hat. Gibt es nun eine Funktion, die mir den Füllstand des Arrays ausgibt, oder muss ich zweimal #0 #0 filtern und der Rest ist mein string? Eine Klasse für das Problem einzusetzen, ist leider überkomplex.

Herzlichen Dank für Eure Kommentare!

wonkos

Ist es denn nicht so, das für jedes Zeichen im String ein Array-Slot besetzt ist?
Dann (wenn ich ein String in ein Char-Array kopiere) wären doch soviele Slots besetzt wie sich aus Length(String) ergeben haben?
Irgendwie scheint mir ich sehe das Problem nicht.

divBy0 21. Nov 2014 09:39

AW: Füllstand eines Arrays ermitteln?
 
Kann es sein, dass du einfach nur die Länge des Strings haben möchtest?

DeddyH 21. Nov 2014 09:40

AW: Füllstand eines Arrays ermitteln?
 
So habe ich es auch verstanden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:53 Uhr.
Seite 2 von 3     12 3      

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 by Thomas Breitkreuz