AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Füllstand eines Arrays ermitteln?

Ein Thema von wonkos2 · begonnen am 20. Nov 2014 · letzter Beitrag vom 24. Nov 2014
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#11

AW: Füllstand eines Arrays ermitteln?

  Alt 20. Nov 2014, 18:01
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: Füllstand eines Arrays ermitteln?

  Alt 20. Nov 2014, 18:34
.. 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
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

AW: Füllstand eines Arrays ermitteln?

  Alt 20. Nov 2014, 18:46
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 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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
wonkos2

Registriert seit: 18. Nov 2014
21 Beiträge
 
Delphi XE7 Professional
 
#14

AW: Füllstand eines Arrays ermitteln?

  Alt 21. Nov 2014, 09:01
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#15

AW: Füllstand eines Arrays ermitteln?

  Alt 21. Nov 2014, 09:13
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#16

AW: Füllstand eines Arrays ermitteln?

  Alt 21. Nov 2014, 09:19
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;
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Füllstand eines Arrays ermitteln?

  Alt 21. Nov 2014, 09:28
-- gelöscht --
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)

Geändert von baumina (21. Nov 2014 um 09:34 Uhr)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#18

AW: Füllstand eines Arrays ermitteln?

  Alt 21. Nov 2014, 09:37
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.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#19

AW: Füllstand eines Arrays ermitteln?

  Alt 21. Nov 2014, 09:39
Kann es sein, dass du einfach nur die Länge des Strings haben möchtest?
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#20

AW: Füllstand eines Arrays ermitteln?

  Alt 21. Nov 2014, 09:40
So habe ich es auch verstanden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 Uhr.
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