![]() |
Problem mit Pos()
Hallo,
Folgender String möchte ich in 2 einzelteile zerlegen. Einmal den Command und einmal (ich nenns mal) Ausführung. Der String sieht wie folgt aus: Zitat:
Delphi-Quellcode:
Nun .. jetzt ist es aber nunmal so, das ich nicht weiß wielange der Command ist. ( .add 4, .stats 6 und so weiter )
{ Content auf Command Parsen }
CommandPos := Pos(Content, ' '); Commands := Copy(Content, 0, CommandPos +4); Memo1.Lines.Add('Parse Commands: ' + Commands); { Content auf Ausführung Parsen } TextPos := Pos(Content, ' '); Text := Copy(Content, 6, TextPos +Length(content)); Memo1.Lines.Add('Parse Text: ' + Text); Und was ist wenn der String am Anfang nen leerzeichen hat? Wie sollte ich dies am besten bewältigen? Ich hoffe ich hab mich verständlich ausgedrückt :-) |
Re: Problem mit Pos()
Dann füge doch mal folgende Zeile als erste ein:
Delphi-Quellcode:
Das entfernt alle führenden und abschließenden Zeichen aus dem Bereich <= #32 (also auch Leerzeichen).
Content := Trim(Content);
...:cat:.. |
Re: Problem mit Pos()
gut ok .. dann hab ich einen anfang, aber wie bekomm ich das erste wort raus, wenn ich nicht weiß wie lang es ist?
|
Re: Problem mit Pos()
Zitat:
Pos(Substring, String), du hast glaube ich (String, Substring) benutzt. So suchst du dann nach Content in ' ' Weiterhin ermittelst du das Leerzeichen im String Content, das an Position 5 ist. Es reicht also zu sagen:
Delphi-Quellcode:
Wobei du das CommandPos vielleicht in Trennzeichen oder so umtaufen solltest, weil
Commands := Copy(Content, 0, CommandPos-1)
Text := Copy(Content, CommandPos+1, length(Content)-CommandPos) es nichts mehr mit dem Command zu tun hat, sonder als Trennung von Command und Text dient. Gruß Minz |
Re: Problem mit Pos()
hmm .. hab ich nun verstanden, Aber Minz, wieso bekomm ich dann als Command nichts und als Text die ganze Line? Wenn ich das richtig verstehe, müsste vor dem eigentlichen Conten ein leerzeichen stehen was er als suchposition nimmt. Ist es aber im originalen nicht, zudem habe ich es auch mit Trim weggeschnitten.
Edit: Habs danke :))) |
Re: Problem mit Pos()
trim solltest du auch verwenden.
Du willst doch eine Zeile nach dem Aufbau haben: 'Befehl Wert' das heißt du suchst zuerst das Leerzeichen (Trennzeichen von Befehl und Wert hier: 7) das kriegst du mit Pos raus und dann kopierst du von 1 (nicht 0 war vorher falsch) bis zum Leerzeichen, um den Befehl zu kriegen. Dann kopierst du von Leerzeichen bis Ende des strings (Länge des Strings minus Position vom Trennzeichen) Sollte schon dann funzen. |
Re: Problem mit Pos()
So müsste es geh'n. :mrgreen:
Delphi-Quellcode:
Content := Trim(Content);
T := Pos(' ', Content); Commands := Trim(Copy(Content, 1, T - 1)); Text := Trim(Copy(Content, T + 1, Length(Content))); |
Re: Problem mit Pos()
Zitat:
weil du gibst ja die Länge an, die gelesen werden soll daher darfs nicht length(content) sein! sonst versuchst du ab dem Trennzeichen die ganze Länge von Content zu kopieren. Meine Zeilen oben sollten so funzen, statt der 0 eine 1. Wenn nicht, zeig code, da ist was anderes im argen. |
Re: Problem mit Pos()
himitsu .. jap, hatte es aber etwa zeitgleich mit deinem post geschafft :)
|
Re: Problem mit Pos()
Ich fasse mal zusammen:
Delphi-Quellcode:
Hast du es so gemacht?
Content := Trim(Content);
{ Content auf Command Parsen } CommandPos := Pos(' ', Content); Commands := Copy(Content, 1, CommandPos-1); Memo1.Lines.Add('Parse Commands: ' + Commands); { Content auf Ausführung Parsen } TextPos := Pos(' ', Content); Text := Copy(Content, TextPos+1, Length(content)); Memo1.Lines.Add('Parse Text: ' + Text); [EDIT] Ups.. Zu langsaaaam :-D [/EDIT] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 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