AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi String auf mehrere Teilstrings durchsuchen
Thema durchsuchen
Ansicht
Themen-Optionen

String auf mehrere Teilstrings durchsuchen

Ein Thema von hirnstroem · begonnen am 24. Jan 2007 · letzter Beitrag vom 24. Jan 2007
Antwort Antwort
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#1

String auf mehrere Teilstrings durchsuchen

  Alt 24. Jan 2007, 09:50
'loha Folks,

über das OnRxChar Ereignis der CPort Library werden alle an einem bestimmten virtuellen COM-Port eintreffenden Daten in einen Buffer eingelesen. Nun ist es so, dass nicht jede Mitteilung alleine ankommt, im Buffer des COM-Ports können auch mehrere Mitteilungen abgelegt sein. Die Mitteilungen selbst sehen auch nicht immer gleich aus (die Länge variiert). Ich müsste nun einen Weg finden, die Mitteilungen im Buffer des COM-Ports einzeln herauszufiltern und in einen eigenen Buffer zu legen.

Der InputString wird mit den Daten aus dem Buffer des COM-Ports gefüllt:

Delphi-Quellcode:
procedure TIWServerController.ComPortRxChar(Sender: TObject; Count: Integer);
var
  InputString: String;
  StartPos, EndPos: Integer;
begin
  ComPort.ReadStr(InputString, Count); <- hier wird eingelesen
Der InputString kann z.B. folgendermassen aussehen...

InputString 'T0000000127070'#$D'T0280000284664121850BE01C7'#$D 'T0000000127272'#$D'T0000000127070'#$D'T0000000127 272'#$D

...oder aber so...

InputString 'T0280000284664121850BE01C7'#$D

Nun ist mir nicht ganz klar wie die einzelnen Mitteilungen aus dem String extrahiert werden können, ob man dazu ausschliesslich mit Pos und PosEx arbeiten kann, oder ob es einen einfachen Weg gibt den ich nicht sehe.

Grüsse
hirnstroem
inde deus abest
  Mit Zitat antworten Zitat
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#2

Re: String auf mehrere Teilstrings durchsuchen

  Alt 24. Jan 2007, 10:29
So scheint es zu funktionieren:

Delphi-Quellcode:
procedure TIWServerController.ComPortRxChar(Sender: TObject; Count: Integer);
var
  InputBuffer, InputString: String;
  i, StartPos, EndPos: Integer;
begin
  ComPort.ReadStr(InputBuffer, Count);
  Trim(InputBuffer); // deletes control characters
  if (Pos('T', InputBuffer) <> 0) and (Length(InputBuffer) > 10)then
  begin
    while Pos('T', InputBuffer) <> 0 do
    begin
      StartPos := Pos('T', InputBuffer) + 1;
      EndPos := PosEx('T', InputBuffer, StartPos) - 1;
      if EndPos <= 0 then
      begin
        InputString := Copy(InputBuffer, StartPos, 25); // no more messages - copy from T to the max. message length
        CANCommunication.WriteDataIntoBuffer(InputString);
        Exit;
      end
      else
      begin
        InputString := Copy(InputBuffer, StartPos, EndPos - StartPos); // copy the message to the InputString
        InputBuffer := Copy(InputBuffer, EndPos , Length(InputBuffer) - StartPos); // delete the message from InputBuffer
        CANCommunication.WriteDataIntoBuffer(InputString);
      end;
    end;
  end;
end;
inde deus abest
  Mit Zitat antworten Zitat
Antwort Antwort


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 16: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