Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Split Function, funktioniert net richtig??? (https://www.delphipraxis.net/54647-split-function-funktioniert-net-richtig.html)

rtky_trunks 8. Okt 2005 18:47


Split Function, funktioniert net richtig???
 
Hallo,


ich hab nen kleines Problem mit ner Split function(wenn es wirklich daran liegt). Ich hoffe ihr koennt mir weiterhelfen.

Also. Es ist so - ich bekomm vom Server ein String geschickt in der die clients die online sind gespeichert sind.
zbs.: Clients_online := 'Chris:Bobi:Marc:Oli';

Nun mein code sieht so aus:
lbClients ist in dem Fall ein ListBox.

Delphi-Quellcode:
     i := 0;
     while not (split(Clients_online, ':', i) = '') do
      begin
       lbClients.Items.Add(split(Clients_online, ':', i));
       i := i+1;
      end;
Die Split function sieht so aus:

Delphi-Quellcode:
function split(input: string; schar: Char; s: Integer): string;
var
  c: array of Integer;
  b, t: Integer;
begin
  Dec(s, 2); // for compatibility with very old & slow split function
  t := 0;    // variable T needs to be initialized...
  setlength(c, Length(input));
  for b := 0 to pred(High(c)) do
  begin
    c[b + 1] := posex(schar, input, succ(c[b]));
    // BREAK LOOP if posex looped (position before previous)
    // or wanted position reached..
    if (c[b + 1] < c[b]) or (s < t) then break
    else
      Inc(t);
  end;
  Result := Copy(input, succ(c[s]), pred(c[s + 1] - c[s]));
end;
Die hab ich uebrigens von dem DelphiSwissCenter.

Es Funktioniert wunderbar wenn der String so heisst 'Chris:'.
Aber sobald so ein String 'Chris:Bobi:Oli' kommt. Ensteht ein Totales durcheinander.
Das wird nicht so aufgelistet:
Chris
Bobi
Oli

sondern

Chris
chris
Oli

Wenn nur 2 String kommen ('Chris:Bobi') entstehen ploetzlich 3 clients. Dass hier: Chriss,Oli, Oli

Das ist mir ein Megaraetzel. Ich hoffe ihr koennt mir Helfen.


Gruss Marc

Ps.: Sry wegen der Englischen Tast. Aber ich hab nen Englisches Notebook :zwinker: ^^

marabu 8. Okt 2005 20:01

Re: Split Function, funktioniert net richtig???
 
Hallo Marc,

du könntest auf die Funktion Split gut verzichten:

Delphi-Quellcode:
procedure TDemoForm.ShowClients(sClients: string);
var
  sl: TStringList; // Hilfsobjekt für String-Zerlegung
begin
  // Instanz erzeugen
  sl := TStringList.Create;
  // Parser auf Trennzeichen colon umpolen
  sl.Delimiter := ':';
  // Parser füttern, die einzelnen Namen werden dadurch als
  // einzelne Items in der Liste geführt
  sl.DelimitedText := sClients;
  // Übernehmen der Items von sl nach lbClients.Items
  lbClients.Items.Assign(sl); // lbClients: ListBox
  // Hilfsobjekt zerstören
  sl.Free;
end;

procedure TDemoForm.ShowButtonClick(Sender: TObject);
begin
  ShowClients('chris:oli:marc:seppl');
end;
Grüße vom marabu

Jetzt mit Kommentaren...

rtky_trunks 8. Okt 2005 20:10

Re: Split Function, funktioniert net richtig???
 
Hi,

Danke fuer die antwort.
Aber kannst du das bitte fuer mich ein bisschen verstaendlicher Beschreiben? Also 'n bisschen Kommentieren^^ :oops:
Hab da jetzt nicht genau verstanden was du da machst.


Gruss Marc

marabu 8. Okt 2005 20:16

Re: Split Function, funktioniert net richtig???
 
Marc, ich habe meinen Code etwas angereichert. Wenn du einzelne Methoden oder Komponenten noch nicht kennst, dann kannst du mit dem Cursor auf dem Text die F1-Taste drücken und erhältst die passende Erklärung aus der Delphi Online-Hilfe.

marabu

rtky_trunks 8. Okt 2005 20:20

Re: Split Function, funktioniert net richtig???
 
Ja, cool.
Grosses Danke an dich.
Habs gleich eingebaut und Funktionukt einwandfrei...

Danke nochmal

Gruss Marc


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