hejhej >> hmm. har lige kigget lidt på den men fatter minus...
Synes godt om
Slettet bruger
27. januar 2004 - 15:36#3
Prøv det her:
function Parse(Char, S: string; Count: Integer): string; var I: Integer; T: string; begin if S[Length(S)] <> Char then S := S + Char; for I := 1 to Count do begin T := Copy(S, 0, Pos(Char, S) - 1); S := Copy(S, Pos(Char, S) + 1, Length(S)); end; Result := T; end;
procedure TForm1.Button1Click(Sender: TObject); var text, ip, s1, s2: String; begin text := '192.162.10.1|tell|test test'; ip := Parse('|', text, 1); s1 := Parse('|', text, 2); s2 := Parse('|', text, 3); ShowMessage(ip); ShowMessage(s1); ShowMessage(s2); end;
Hvorfor ikke bare starte med en størrelsesheader på eks. 4. bytes der fortæller hvor lang resten af dataklumpen er. Denne klump består af 0 terminerede strenge (det kan tit betale sig at konvertere heltal til strenge, især hvis man kører fra endian til non-endian maskiner så slipper man for en masse bøvl. Tit er tallene også så små, at de fylder mindre end de normale 4/8 bytes)
Som afslutning bruges en dobbeltterminering (2 #0'er)
Vha. pchars kan du lynhurtigt parse data (pseudo-kode):
const Data = 'Dette'#0'er'#0'en'#0'test'#0#0; var st : string; p, pc : pchar; size : integer; begin ReadSocket(size,sizeof(integer)); getmem(p,size); try ReadSocket(p^,size); pc := p; while pc <> #0 do begin Memo1.Lines.Add(string(pc)); pc := strend(pc)+1; end; finally freemem(p); end; // try end;
Hej tcc. Som jeg skrev i parantesen, så var det pseudokode idet jeg ikke havde navnet på socketkomponenten - her improviserede jeg. Er dog ret sikker på at den virker på denne streamagtige måde.
Ærgerligt at min metode ikke duede til dit dit behov.
Hvis du kommer til at skulle sende strenge og andet data gemmen en stream, så prøv at leg lidt med TFiler-objekterne (TReader og TWriter). De er meget lette at arbejde med og de indkapsler det jeg forsøgte at "sælge" dig.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.