das ist jetzt einfach die funktion GetString aus meinem Projekt...
Delphi-Quellcode:
function TConnectWnd.GetString(Text : String; Index : integer) : String;
var
stemp : string;
cIndex,eIndex,n : integer;
begin
if Pos('-',Text)<>0 then
begin
n:=0;
cIndex:=0;
stemp:='';
repeat
n:=n+1;
if Text[n]='-' then cIndex:=cIndex+1;
until (cIndex=Index) or (n=length(Text));
if n=length(Text) then
begin
GetString:='ERROR | ZU WEIT';
end
else
begin
cIndex:=n;
repeat
n:=n+1;
until (n=length(Text)) or (Text[n]='-');
eIndex:=n;
if n=length(Text) then eIndex:=eIndex+1;
for n:=cIndex+1 to eIndex-1 do
begin
stemp:=stemp+Text[n];
end;
GetString:=stemp;
end;
end
else GetString:='ERROR | Empfangener String ungültig';
end;
Beispiel :
Es kommt im Socket '-123-abc-defghik' an,
mit dieser funktion lasse ich mir den n-ten String zurück geben.
Wenn man das in eine Repeat schleife von 1 bis Ende macht kann man so bequem alle Strings nacheinander nutzen...
im Client Socket - onRead :
Delphi-Quellcode:
begin
n:=0;
Text:=Socket.ReceiveText;
repeat
n:=n+1;
s:=GetString(Text,n); //Alle Ereignisse aus dem empfagenem String
//zerlegen und einzeln analysieren!
{...}
until (GetAktion(s)='ERROR') or (n>20);
end;
bei meinem Programm werden sämtlichte Nachrichten im Netzwerk im format 'AKTION | TEXT' verschickt... ich hab dafür noch zwei funktionen die mir einmal AKTION und einm TEXT zurück liefern, deshalb dort bei until GetAktion(s)... Er beendet halt erst wenn die GetString funktion einen Error zurück gibt.
edit:
Zitat von
bububox:
edit: Wäre es nicht besser anhand von Zeilenumbruch zu teilen? bei mir wird bestimmt mal "-" vorkommen...
das kannst du machen wie du es brauchst. Er sucht ja einfach nach dem '-' bzw. dem Zeichen was du angiebst...