Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Alle Wörter aus einem String in eine Listbox (https://www.delphipraxis.net/3293-alle-woerter-aus-einem-string-eine-listbox.html)

Pseudemys Nelsoni 5. Mär 2003 11:15


Alle Wörter aus einem String in eine Listbox
 
moin,

"ufc_user = #tiberiansun :ufc_user @silent @nick32 @nick4 @nick"

wie könnt ich alle nicks nach dem ":" in eine listbox packen? es können beliebig viele nicks sein und beliebig lang

Hansa 5. Mär 2003 12:19

Wie das geht? Mit der Holzhammermethode. :wall: Mit Strings mache ich immer kurzen Prozeß. :mrgreen: Ist sichergestellt, daß ein : vorhanden ist geht das ungefähr so :
Code:
repeat
  delete (st,1,1)
until st[1] = ':',  // jetzt nur noch Nicknamen
delete (st,1,);     // auch : löschen
repeat
  ListBox.Items.Add (copy (st,1,pos (' ',st)); // Nick in Box
  while st [1] <> ' ' do             // Nick aus st löschen    
    delete (st,1,1)
  delete (st,1,1);                   // führendes Leerzeichen löschen
until st ='';
Ist aber nicht getestet und muß eventuell noch verfeinert werden! Auf diesem Wege sollte es aber gehen.

Pseudemys Nelsoni 5. Mär 2003 12:37

danke das probier ich mal ;)

gruss mario

Pseudemys Nelsoni 5. Mär 2003 14:04

hm hab das versucht:

Delphi-Quellcode:
procedure TForm1.IdIRC1Raw(Sender: TObject; AUser: TIdIRCUser; ACommand,
  AContent: String; var Suppress: Boolean);
var s, zeichen, nick: string;
begin
  s := acontent;
  repeat
    delete(s, 1, 1)
  until s[1] = ':';
  delete(s, 1, 1);
  repeat
    zeichen := Copy(s, 1, 1);
    nick := nick + zeichen;
    while s[1] <> ' ' do
    delete(s, 1, 1);
  until s = ' ';
end;
aber irgendwie passiert gar nichts und das ganze programm ist wie "abgestürzt", also nichts reagiert mehr

woran liegt das?

gruss mario

janjan 5. Mär 2003 14:09

Änder mal
Delphi-Quellcode:
until s = ' ';
in
Delphi-Quellcode:
until s = '';

Hansa 5. Mär 2003 14:10

Endlosschleife, hab mir das schon gedacht. Solche Sachen aus dem Kopf heraus aufs Papier zu bringen, ohne Fehler geht meistens schief. :mrgreen: Tippe auf die zweite REPEAT. Das Wort Debugger schon mal gehört, oder ShowMessage :?: :?: Muß leider weg.....

Pseudemys Nelsoni 5. Mär 2003 15:43

hab nurn geändert, sieht so aus:

Delphi-Quellcode:
procedure TForm1.IdIRC1Raw(Sender: TObject; AUser: TIdIRCUser; ACommand,
  AContent: String; var Suppress: Boolean);
var s, zeichen, nick: string;
begin
  s := acontent;
  repeat
    delete(s, 1, 1)
  until s[1] = ':';
  delete(s, 1, 1);
  repeat
    zeichen := Copy(s, 1, 1);
    nick := nick + zeichen;
    while s[1] <> ' ' do
    delete(s, 1, 1);
  until s = '';
end;
funzt aber noch immer nicht das prog friert ein
es liegt 100% an dem code, weil wenn ich den lösche klappts

ist doch alles richtig oder nicht?

gruss silent

Hansa 5. Mär 2003 17:54

Aha, Dein Quelltext nähert sich zumindest meinem an.

Zitat:

Zitat von silent
zeichen := Copy (s,1,1)

Erklär mir mal, was Du damit bezweckst :?:

Zitat:

Zitat von silent

zeichen := Copy (s,1,1)
while s[1] <> ' ' do
delete(s, 1, 1);

Habe Dir doch gesagt, daß es nicht getestet ist. Überlege mal, was da passiert.

Pseudemys Nelsoni 5. Mär 2003 18:30

keine ahnung wieso das falsch ist.

ich hatte 3 strings variablen deklariert, eine(zeichen) die das zeichen enthält das kopiert wird, eine(nick) die jedes einzelne zeichen von "zeichen" aufnimmt und eine(s) die den ganzen string enthält...

aber was ist falsch dran? hatte das ein wenig umgeändert weil dein bespiel bei mir nicht klappte :(

kannst du mir sagen was falsch war(ist)?

gruss mario

Hansa 5. Mär 2003 18:55

Code:
repeat
    zeichen := Copy(s, 1, 1);
    nick := nick + zeichen;
    while s[1] <> ' ' do
    delete(s, 1, 1);
until s = '';
1. Repeat und While Schleifen zu mischen macht alles von der Logik her schwerer verständlich.

2. Was macht deine Variable Zeichen :?: Die ist lokal deklariert und wird nicht benutzt. Doch, sie wird ja doch benutzt, aber Dein Nick nicht. Ja, das meinte ich mit schwer verständlich. Da sieht man mal wie man mit 3 Variablen und 2 Schleifen in die Irre geleitet wird. Deshalb heute nicht mehr. :duck: Nur noch soviel:

Wegen der Lesbarkeit verwende ich auch lieber mehr Variablen als weniger, aber dieses Bsp. ist ein klassischer Fall wie mans nicht machen sollte (meiner Meinung nach).

TIP: Übernehme mein Beispiel 1:1 und setze innerhalb der Repeat und While Schleifen direkt unter das delete (st,1,1) ein
Code:
ShowMessage
Bei mir ist noch ein Fehler, aber der ist schnell gefunden, hoffentlich aber von Dir.

Die While Schleife würde dann so aussehen:
Code:
while s[1] <> ' ' do begin
  delete(s, 1, 1);
  showmessage ('*'+st+'*');
end;
Dann siehst Du genau was passiert. Auch die ** machen einen Sinn, zumindest wenn man mit Lerzeichen hantiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 Uhr.
Seite 1 von 4  1 23     Letzte »    

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