Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Teilstring aus String mit Copy & Pos (https://www.delphipraxis.net/137120-teilstring-aus-string-mit-copy-pos.html)

Tim-94 14. Jul 2009 19:58


Teilstring aus String mit Copy & Pos
 
Hi, mein jetziges Problem ist folgendes:
Ich möchte einen Teilstring aus einem Hauptstring auslesen. Ich habe schon viel gesucht und auch gefunden, aber ich komme mit Copy & Pos nicht so ganz klar.

In dem folgenden Beispiel möchte ich den Text ab GetUserName bis einschließlich ComputerName in eine Variable einlesen.

Delphi-Quellcode:
ClientSocket1.Socket.SendText('Client Online -> '+GetUserName+' am PC: '+trim(ComputerName)+' -> Am '+DatetoStr(Date)+' um '+TimetoStr(Time)+' Uhr!');
Mein bisheriger Code, den ich über die Suche gefunden habe, liefert kein Ergebnis. (Der Teilstring ist leer.)
Delphi-Quellcode:
Teilstring:=Trim(Copy(Socket.ReceiveText, Pos('>', Socket.ReceiveText) + 1, Pos('<', Socket.ReceiveText) - Pos('>', Socket.ReceiveText) - 1));
PS: Vielen Dank im vorraus :-D

Muetze1 14. Jul 2009 20:04

Re: Teilstring aus String mit Copy & Pos
 
Delphi-Referenz durchsuchenTCustomWinSocket.ReceiveText

Mit jedem Aufruf dieser Methode wird alles bisher empfangene dir zurück gegeben und der Empfangspuffer entsprechend geleert. Damit ergibt sich beim darauffolgenden Aufruf innerhalb deiner Zeile, dass der Rückgabewert höchstwahrscheinlich leer ist, da er noch nichts neues empfangen hat.

Das ganze ist so natürlich recht dumm für dich, aber wir können das umstellen, nur dann bräuchte ich eine Idee von dir woher ich wissen kann wann ich dir alte Daten zurück gebe und wann neue? Also alle 4 Aufrufe immer die zuletzt empfangenen Daten? Oder immer alle Daten? Oder niemals die empfangenen Daten löschen? Dann ist die Frage, ob es dir noch Spass macht mit einer 200 MB Stringvariablen zu arbeiten nach dem dein Chat mal 4 Stunden lief...

Tim-94 14. Jul 2009 20:08

Re: Teilstring aus String mit Copy & Pos
 
Diese Prozedur habe ich innerhalb der Prozedur ClientSocket1Read (siehe Quellcode) eingefügt, also müsste somit der Socket.ReceiveText nicht leer sein, da diese Prozedur ja nur ausgeführt wird, wenn der Socket was empfängt.

Delphi-Quellcode:
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);

Muetze1 14. Jul 2009 20:13

Re: Teilstring aus String mit Copy & Pos
 
Zitat:

Zitat von Tim-94
Diese Prozedur habe ich innerhalb der Prozedur ClientSocket1Read (siehe Quellcode) eingefügt, also müsste somit der Socket.ReceiveText nicht leer sein, da diese Prozedur ja nur ausgeführt wird, wenn der Socket was empfängt.

Das du sie dort eingefügt hast, habe ich voraus gesetzt. Aber mein Einwand hast du auch nicht verstanden. Also zählen wir in der folgenden Zeile doch mal die Anzahl der Aufrufe:

Delphi-Quellcode:
Teilstring:=Trim(Copy(Socket.ReceiveText, Pos('>', Socket.ReceiveText) + 1, Pos('<', Socket.ReceiveText) - Pos('>', Socket.ReceiveText) - 1));
Ich zähle dort 4 Aufrufe von Socket.ReceiveText. Stimmst du da mit mir überein?

Tim-94 14. Jul 2009 20:16

Re: Teilstring aus String mit Copy & Pos
 
Aso das meinst du, ja klar stimme ich da mit dir überein.

Muetze1 14. Jul 2009 20:22

Re: Teilstring aus String mit Copy & Pos
 
Zitat:

Zitat von Tim-94
Aso das meinst du, ja klar stimme ich da mit dir überein.

Daraus folgt, dass der erste Aufruf die Daten liefert und die Wahrscheinlichkeit hoch ist, dass die folgenden Aufrufe nur leere Strings liefern, da noch nichts neues empfangen wurde...

Tim-94 14. Jul 2009 20:32

Re: Teilstring aus String mit Copy & Pos
 
Das Problem hat sich schon geklärt, aber trotzdem vielen Dank. :-D

Delphi-Quellcode:
ShowMessage(Copy(Log.Lines[Log.Lines.Count-1], Pos('>', Log.Lines[Log.Lines.Count-1]) + 1, Pos('<', Log.Lines[Log.Lines.Count-1]) - Pos('>', Log.Lines[Log.Lines.Count-1]) - 1));

Muetze1 14. Jul 2009 20:59

Re: Teilstring aus String mit Copy & Pos
 
Zitat:

Zitat von Tim-94
Das Problem hat sich schon geklärt, aber trotzdem vielen Dank. :-D

Delphi-Quellcode:
ShowMessage(Copy(Log.Lines[Log.Lines.Count-1], Pos('>', Log.Lines[Log.Lines.Count-1]) + 1, Pos('<', Log.Lines[Log.Lines.Count-1]) - Pos('>', Log.Lines[Log.Lines.Count-1]) - 1));

Langsamer kann der auch schon nicht mehr programmiert werden. Schonmal was von lokalen Variablen gehört?


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 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