Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Pos() (https://www.delphipraxis.net/11921-problem-mit-pos.html)

sharkx 16. Nov 2003 21:59


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:

.add sharkx
Lösen tu ich es mit folgendem Code
Delphi-Quellcode:
  { 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);
Nun .. jetzt ist es aber nunmal so, das ich nicht weiß wielange der Command ist. ( .add 4, .stats 6 und so weiter )
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 :-)

sakura 16. Nov 2003 22:07

Re: Problem mit Pos()
 
Dann füge doch mal folgende Zeile als erste ein:
Delphi-Quellcode:
Content := Trim(Content);
Das entfernt alle führenden und abschließenden Zeichen aus dem Bereich <= #32 (also auch Leerzeichen).

...:cat:..

sharkx 16. Nov 2003 22:11

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?

Minz 16. Nov 2003 22:27

Re: Problem mit Pos()
 
Zitat:

{ 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);
Wenn ich mich richtig entsinne ist Pos so aufgebaut:

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:
Commands := Copy(Content, 0, CommandPos-1)
Text    := Copy(Content, CommandPos+1, length(Content)-CommandPos)
Wobei du das CommandPos vielleicht in Trennzeichen oder so umtaufen solltest, weil
es nichts mehr mit dem Command zu tun hat, sonder als Trennung von Command und Text
dient.

Gruß Minz

sharkx 16. Nov 2003 22:36

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

Minz 16. Nov 2003 22:40

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.

himitsu 16. Nov 2003 22:40

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)));

Minz 16. Nov 2003 22:43

Re: Problem mit Pos()
 
Zitat:

Content := Trim(Content);
T := Pos(' ', Content);
Commands := Trim(Copy(Content, 1, T - 1));
Text := Trim(Copy(Content, T + 1, Length(Content)));
himitsu fast :mrgreen:

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.

sharkx 16. Nov 2003 22:44

Re: Problem mit Pos()
 
himitsu .. jap, hatte es aber etwa zeitgleich mit deinem post geschafft :)

scp 16. Nov 2003 22:46

Re: Problem mit Pos()
 
Ich fasse mal zusammen:

Delphi-Quellcode:
  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);
Hast du es so gemacht?

[EDIT]
Ups.. Zu langsaaaam :-D
[/EDIT]


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 Uhr.
Seite 1 von 2  1 2      

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