![]() |
String auslesen der mehrere gleiche zeichen hat
Hallo zusammen,
ich möchte gerne einen string auslesen der in etwas so aussieht: #'+*~04~00~09+*#' Jetzt habe ich ein Programm geschrieben das den String nach dem Zeichen ~ durcsucht und mir die nachfolgende Zahl filtert. Beim nächsten Umlauf fängt die Suche leider wieder von vorne an und er findet das erste Zeichen wieder und liest dieselbe Zahl aus '04', er soll aber einen weiter springen und nach der nächsten Tilde suchen, damit ich alle Zahlen ausgelesen habe. Kann ich einen Merker setzten, nachdem Motto, erste Tilde gefunden, zahl ausgelesen, weiter ab dieser Stelle suchen und nicht von vorne. Hänge Euch mal meine Funktion an ide ich bis jetzt zum auslesen geschrieben habe und die immer von neuen anfängt.
Delphi-Quellcode:
function TForm1.auswerten(data: string): string;
var firstletter, lastletter, hilfspoint :integer; wert : string; begin firstletter := 0; lastletter := 0; if not(pos('~',data) = 0) then begin {Ermittlung der Befehlsposition "erste Doppelzahl"} while (firstletter < Length(data)) and not (data[firstletter] in [#48..#57]) do Inc(firstletter); lastletter := firstletter; {auslesen und speichern der Doppelzahl} while (lastletter < Length(data)) and (data[lastletter] in [#48..#57]) do begin wert := wert + data[lastletter]; Inc(lastletter); end; firstletter := lastletter; hilfspoint:=strtoint(wert); auswerten:=inttostr(hilfspoint); |
Re: String auslesen der mehrere gleiche zeichen hat
also entweder du schneidest den string bis zur gefundenen Stelle ab, und suchst nochmal
oder du verwendest :gruebel: ich glaube eine TStringList wo du den string einfach als delimited-Text übergibst und den delimiter auf '~' stellst, und der String wird dann automatisch in ein Feld aufgeteilt. such einfach mal nach delimited TStringList |
Re: String auslesen der mehrere gleiche zeichen hat
ich würde es so machen:
Den kompletten String in einen dummy-string speichern. Dann jedesmal beim finden einfach den string abschneiden. Der Dummy-string dient übrigens dazu, dass du den "echten" string weiterhin verwenden kannst :) |
Re: String auslesen der mehrere gleiche zeichen hat
Hi, hier mein Vorschlag:
Delphi-Quellcode:
Ohne Gewähr und ungetestet *g*
//Liefert das N-te Vorkommen einer Ganzzahl in einem String
function GetNthNumber(SrcStr: String; n: Integer; Seperator: Char = '~'): String; const NumChars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; var i, j, StrLength, count: Integer; begin Result := ''; Count := 0; StrLength := Length(SrcStr); for i:=1 to StrLength do begin If SrcStr[i] = Seperator then inc(count); If count = n then begin j := 0; While (i+j <= StrLength) AND SrcStr[i+j] in NumChars do begin inc(j); Result := Result + SrcStr[i+j]; end; exit; end; end; end; |
Re: String auslesen der mehrere gleiche zeichen hat
also so wirklich versteh ichs nicht, aber hier in der codelib gibt es eine function namens explode. die könnte dir helfen...
|
Re: String auslesen der mehrere gleiche zeichen hat
Irgendwo im Forum gibt's noch eine erweiterte Version zu pos,
![]() |
Re: String auslesen der mehrere gleiche zeichen hat
Danke, habe das Problem gelöst, aber es ist ein neues aufgetreten. So wird es nie langweilig, smile.
Schaut mal bitte in meinen neuen Threat nach, wäre nett. |
Re: String auslesen der mehrere gleiche zeichen hat
Hi,
![]() Gruß Stephan :dance: |
Re: String auslesen der mehrere gleiche zeichen hat
Hallo skaven,
wenn Du häufiger mit Strings arbeiten solltest, könnten sich [dp]reguläre Ausdrücke[/dp] als hilfreich erweisen. Mit ihnen könnte eine Lösung zum Beispiel so aussehen:
Delphi-Quellcode:
with RegExpr('~(\d+)') do
if Execeute(AString) then repeat ShowMessage(Match[1]); until not ExecuteNext; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:00 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