Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Identische Zeichen in einem String erkennen (https://www.delphipraxis.net/138279-identische-zeichen-einem-string-erkennen.html)

devidespe 6. Aug 2009 15:16


Identische Zeichen in einem String erkennen
 
Hallo,

ich habe einen String, in dem der Hersteller eines Gerätes zurückgeliefert wird. Bevor ich diesen String nun ausgebe, möchte ich ihn inhaltlich prüfen, zumindest insoweit das möglich ist.

Dazu gehört zuerst die Abfrage, ob die Stringlänge größer als 0 ist. Falls nicht, wird der String als ungültig deklariert.

Nun habe ich durch ein Phänomen als String folgendes zurückgeliefert bekommen: 'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ'

Ich möchte also eine Art Abfrage hinzufügen, ob der String nur aus identischen Zeichen besteht, und wenn dies der Fall ist, wird der String als ungültig deklariert. Ein Ansatz war das Addieren der Ordinalwert für jedes einzelne Zeichen und die anschließende Berechnung mittels MOD, ob ein Rest übrig bleibt. Bei ausschließlich identischen Zeichen bleibt kein Rest übrig. Dieses Verfahren ist mir aber zu unsicher, da auch korrekte Stringbezeichnungen bei einer bestimmten Ordinal-Konstellation keinen Rest übrig lassen, und der String dadurch als falsch eingestuft wird, obwohl er korrekt ist.

Hat jemand eine Idee, wie man das angehen kann ?

hazard999 6. Aug 2009 15:20

Re: Identische Zeichen in einem String erkennen
 
Wie wärs wenn du das erste Zeichen nimmst und stringreplace(deinString, erstesZeichen, '', [replaceAll]) machst.

Wenn das Result = '' dann waren alle chars im String identisch.

jfheins 6. Aug 2009 15:29

Re: Identische Zeichen in einem String erkennen
 
Entweder einfach alle Buchstaben in einer Schleife durchgehen, und auf Gleichheit mit dem ersten überprüfen, oder (kürzer aber etwas langsamer) stringofchar(str[1], length(str)) = str überprüfen ;)

Satty67 6. Aug 2009 15:42

Re: Identische Zeichen in einem String erkennen
 
muss wohl an der Wärme liegen...
Delphi-Quellcode:
function SameCharsInString(AString : String) : Boolean;
var
  i, Count : Integer;
begin
  count := length(AString);
  if count < 2 then
    Result := False
  else
  begin
    i := 2;
    Result := True;
    while i <= count do
      if AString[i] <> AString[1] then
      begin
        Result := False;
        Break;
      end
      else
        inc(i);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if SameCharsInString(Edit1.Text) then
    ShowMessage('same Chars')
  else
    ShowMessage('diff. Chars or to short');
end;

devidespe 6. Aug 2009 15:49

Re: Identische Zeichen in einem String erkennen
 
Vielen Dank, ich habe die Lösung. Die Variante von Satty67 hat mich überzeugt.

Und ja, es ist in der Tat zu warm heute.

DeddyH 6. Aug 2009 15:51

Re: Identische Zeichen in einem String erkennen
 
Oder mit einer for-Schleife:
Delphi-Quellcode:
function SameCharsInString(const AString : String) : Boolean;
var
  i : Integer;
begin
  Result := Length(AString) > 1;
  if Result then
    for i := 2 to Length(AString) do
      begin
        Result := AString[i] = AString[1];
        if not Result then break;
      end;
end;

Uwe Raabe 6. Aug 2009 15:56

Re: Identische Zeichen in einem String erkennen
 
Das Zeichen 'ÿ' entspricht dem Byte-Code $FF und wird oft verwendet, um einen ungültigen String von einem Leerstring zu unterscheiden. Hätte man hier alles mit Null gefüllt, wäre die erste Null als String-Ende und der gesamte String als Leerstring erkannt worden, was ja durchaus ein gültiger Wert sein kann.

himitsu 6. Aug 2009 16:29

Re: Identische Zeichen in einem String erkennen
 
wenn dem so ist, dann könnte es ja auch sein, daß vorne ein gütiger String und hinten dran der Rest mit ÿ gefüllt wäre

dann wäre soeine Variante doch nicht so schlecht
Delphi-Quellcode:
deinString := StringReplace(deinString, 'ÿ', '', [replaceAll]);
damit würden dann ja nur die ungültigen Zeichen entfernt

Satty67 6. Aug 2009 20:21

Re: Identische Zeichen in einem String erkennen
 
Zitat:

Zitat von DeddyH
Oder mit einer for-Schleife

Ja, denke sobald man in einer while-Schleife eine Zählvariable inkrementiert, sollte man über eine for-Schleife nachdenken. Gefällt mir besser, da kompakter.

StringReplace ist natürlich auch sinnvoll, da man eine vorhandene Funktion nutzt. Mich reizte in dem Moment halt wieder die grundsätzliche Umsetzung mit eigenem Code.


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