Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi String "beschneiden" (https://www.delphipraxis.net/80007-string-beschneiden.html)

hirnstroem 1. Nov 2006 13:12


String "beschneiden"
 
'loha Folks,

ich suche nach einer Möglichkeit Strings nach meinen wünschen zu "beschneiden".

Über den COM-Port werden dauernd Nachrichten verchickt und vom Empfänger wieder zurückgesendet. Nun kommen die Strings aber nicht so an, wie sie abgeschickt wurden.

Ein Beispiel:

'T040404018B1010203040506B6' wird verschickt

'Z'#$D'T040404018B1010203040506B6'#$D kommt zurück. Es ist aber auch möglich, dass Konstrukte wie
#$D#$D#$D#7#$D'Z'#$D'T040404018B1010203040506B6'#$ D ankommen.

Das Ziel wäre nun den ankommenden String so zu beschneiden, dass alles zwischen dem letzten und dem vorletzten Anführungszeichen ('), abgeschnitten wird, damit die Messages verglichen und bei Fehlern oder ähnlichem gegebenenfalls erneut verschickt werden können. Haut mich, aber ich sehe den Weg nicht, wie das gemacht wird.

Grüsse
hirnstroem

hoika 1. Nov 2006 13:15

Re: String "beschneiden"
 
Hallo,

die Positionen der Hochkommas ermitteln,
und dann per Copy ...

Heiko

xaromz 1. Nov 2006 13:19

Re: String "beschneiden"
 
Hallo,

Du könntest erst mal mit Delphi-Referenz durchsuchenTrim die Steuerzeichen links und rechts abschneiden. Dann gehst Du von hinten durch den String und suchst das erste Steuerzeichen. Jetzt musst Du nur noch den String mit Delphi-Referenz durchsuchenCopy zurechschneiden.
Grob sähe das so aus:
Delphi-Quellcode:
function ProcessString(const Source): String;
var
  S: String;
  C: Integer;
begin
  S := Trim(Source);
  C := Length(S);
  while (C > 0) do
  begin
    if S[C] < #32 then
    begin
      Result := Copy(S, C + 1, MaxInt);
      Exit;
    end;
    Dec(C);
  end;
  Result := '';
end;
Dabei gehe ich aber davon aus, dass am Ende des Strings nur noch Steuerzeichen vorkommen.

@hoika: Die Hochkommas stammen von der IDE und trennen nur die Steuerzeichen von den druckbaren Zeichen.

//Edit: Fehler korrigiert.

Gruß
xaromz

hirnstroem 1. Nov 2006 13:30

Re: String "beschneiden"
 
Tschamoi xaromz,

Trim hilft mir unheimlich. Vielen Dank!

Gruss
hirnstroem

Reinhard Kern 1. Nov 2006 13:42

Re: String "beschneiden"
 
Zitat:

Zitat von hirnstroem
'loha Folks,

ich suche nach einer Möglichkeit Strings nach meinen wünschen zu "beschneiden".

Über den COM-Port werden dauernd Nachrichten verchickt und vom Empfänger wieder zurückgesendet. Nun kommen die Strings aber nicht so an, wie sie abgeschickt wurden.

Ein Beispiel:

'T040404018B1010203040506B6' wird verschickt

'Z'#$D'T040404018B1010203040506B6'#$D kommt zurück. Es ist aber auch möglich, dass Konstrukte wie
#$D#$D#$D#7#$D'Z'#$D'T040404018B1010203040506B6'#$ D ankommen.

Das Ziel wäre nun den ankommenden String so zu beschneiden, dass alles zwischen dem letzten und dem vorletzten Anführungszeichen ('), abgeschnitten wird, damit die Messages verglichen und bei Fehlern oder ähnlichem gegebenenfalls erneut verschickt werden können. Haut mich, aber ich sehe den Weg nicht, wie das gemacht wird.

Grüsse
hirnstroem

Hallo,

lass es doch einfach die Funktion Pos erledigen:

Delphi-Quellcode:
if Pos (SendeString,EmpfangsString) > 0 then { Senden erfolgreich }
Gruss Reinhard


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