AGB  ·  Datenschutz  ·  Impressum  







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

Stringbearbeitung

Ein Thema von valon · begonnen am 26. Jan 2005 · letzter Beitrag vom 26. Jan 2005
Antwort Antwort
Seite 1 von 2  1 2      
valon

Registriert seit: 27. Sep 2004
86 Beiträge
 
#1

Stringbearbeitung

  Alt 26. Jan 2005, 13:34
Hallo Leute! Ich habe da ein kleines Problem!

Ich bekomme einen String von der seriellen Schnittstelle ,der Form:

" 11 AC 33 44 00 " .
11,AC,33,44 sind werte die ich auslesen muss, und die immer 2 hex Zeichen lang sind. 00 kennzeichnet das Ende der Werte. es können mehrere Werte drinstehen. z.b "11 AC 33 44 1F 00". Die Anzahl der Werte ist also variabel.

wie kann ich den Index herausfinden, bis wohin die Werte gehen.
im beispiel oben wäre das der Index vom wert 4.

Da aber ein String auch so ausehen könnte "11 10 01 11 00" , hab ich dann ein Problem
den, die Folge 00 kommt im String 2 mal vor "10 01" und am ende 00.
Er würde mir dann den falschen index zurückliefern, da er die Folge 00 im "10 01" als Ende interpretiert.

Hat jemand ne Idee wie ich da eine Funktion implementieren könnte , die das richtige Ende erkennt und den richtigen Index liefert?

Ich hoffe ich habs euch einigermaßen Verständlich rüberbringen können.
Danke
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: Stringbearbeitung

  Alt 26. Jan 2005, 13:38
Hallo valon,

sind im String die Werte durch ein Leerzeichen getrennt oder nicht?
Wenn ja, dann brauchst du nur nach "00" suchen, da ein Leerzeichen die Kombination "1001" sprengt.
Sind keine Leerzeichen enthalten, dann hast du 2 Optionen:
  • Du fuegst leerzeichen ein und arbeitest nach dem obigen Schema
  • Du kopierst immer 2 Zeichen aus dem String und siehst nach, ob der String "00" ist.
Sobald du mal die Anzahl "Zahlen" hast, sollte das Auslesen ein Kinderspiel sein.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Stringbearbeitung

  Alt 26. Jan 2005, 13:38
Nein die Fiolge kommt nur einmal vor: "0 0" <> "00". Oder sind die Werte nicht durch Leerzeichen getrennt? Dann lies doch immer zwei Zeichen ein und wenn beide Zeichen 00 sind dann bist du am Ende.
if (s[1] = '0') and (s[2] = '0') then zuende
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#4

Re: Stringbearbeitung

  Alt 26. Jan 2005, 13:45
Hi,

nicht getestet, aber sowas in der Richtung sollte funktionieren:
Delphi-Quellcode:
Function GetEnd(CONST aCheckString: String) : Integer;
var
  ii, jj : Integer;
 // ii : Fundstelle von '00'
 // jj : Hilfswert für "Offset" in PosEx
begin
  ii := 0;
  jj := 0;
  REPEAT
    jj := ii + 1;
    ii := PosEx('00',aCheckString,jj);
  UNTIL (ii=0) OR Odd(ii);
  result := (ii+1) DIV 2; // 2-er Blöcke "zusammenfassen"
end;

edit: Davon ausgehend, dass keine Leerzeichen drin sind...
edit: Deklarationen vergessen

Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
valon

Registriert seit: 27. Sep 2004
86 Beiträge
 
#5

Re: Stringbearbeitung

  Alt 26. Jan 2005, 13:46
Hi !

Leider sind die Werte nicht durch Leerzeichen getrennt. Ich hab leerzeichen reingemacht, damit es verständlicher wird.
  Mit Zitat antworten Zitat
valon

Registriert seit: 27. Sep 2004
86 Beiträge
 
#6

Re: Stringbearbeitung

  Alt 26. Jan 2005, 13:54
Hallo!

Danke für eure Antworten.

Steve, die Funktion PosEx(), wo finde ich sie ? Ich arbeite mit Delphi 5.

Danke
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#7

Re: Stringbearbeitung

  Alt 26. Jan 2005, 13:56
Hi,

die gibt's afaik erst ab D6 oder D7 Schau mal in der OH... sollte aber -wenn überhaupt- in der Unit StrUtils sein...

Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#8

Re: Stringbearbeitung

  Alt 26. Jan 2005, 14:03
Delphi-Quellcode:
function getindex(CONST aCheckString: String): Integer;
var
  l:byte;
begin
  l:=length(aCheckString)-2; // anzahl der zeichen ohne "00"
  if (l div 2) = (l/2) then
    result:= l div 2 // index
  else
    result:= -1; // rückgabe für fehlerbehandlung
end;
  Mit Zitat antworten Zitat
valon

Registriert seit: 27. Sep 2004
86 Beiträge
 
#9

Re: Stringbearbeitung

  Alt 26. Jan 2005, 14:05
Danke Leute!

Ich werde es gleich mal ausprobieren.
Danke nochmal.
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#10

Re: Stringbearbeitung

  Alt 26. Jan 2005, 14:10
Hi,

Delphi-Quellcode:
function GetIndex00(const aCheckString: String) : Integer;
var
 ii, jj : integer;
begin
  ii:=1; // Beim ersten Zeichen beginnen
  jj:=0; // Bisher keine Fundstelle
  repeat
    // Zeichenkette prüfen
    if copy (aCheckString,ii,2) ='00then
      jj:=ii; // Fundstelle merken
    inc(ii,2); // 2 Zeichen weiter
  until (odd(jj)) or (ii>=length(aCheckString));
  // 2-er Blöcke
  result := (jj+1) div 2;
end;
Damit kann die '00' auch mitten im String stehen, sie muss bloß innerhalb eines '2er-Blocks' stehen.


PS: "GetIndex" liefert bei '112233405500' 5 zurück, obwohl '00' der sechste Block ist!

Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:44 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