![]() |
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 |
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:
Ist aber nicht getestet und muß eventuell noch verfeinert werden! Auf diesem Wege sollte es aber gehen.
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 =''; |
danke das probier ich mal ;)
gruss mario |
hm hab das versucht:
Delphi-Quellcode:
aber irgendwie passiert gar nichts und das ganze programm ist wie "abgestürzt", also nichts reagiert mehr
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; woran liegt das? gruss mario |
Änder mal
Delphi-Quellcode:
in
until s = ' ';
Delphi-Quellcode:
until s = '';
|
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.....
|
hab nurn geändert, sieht so aus:
Delphi-Quellcode:
funzt aber noch immer nicht das prog friert ein
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; es liegt 100% an dem code, weil wenn ich den lösche klappts ist doch alles richtig oder nicht? gruss silent |
Aha, Dein Quelltext nähert sich zumindest meinem an.
Zitat:
Zitat:
|
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 |
Code:
1. Repeat und While Schleifen zu mischen macht alles von der Logik her schwerer verständlich.
repeat
zeichen := Copy(s, 1, 1); nick := nick + zeichen; while s[1] <> ' ' do delete(s, 1, 1); until s = ''; 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:
Bei mir ist noch ein Fehler, aber der ist schnell gefunden, hoffentlich aber von Dir.
ShowMessage
Die While Schleife würde dann so aussehen:
Code:
Dann siehst Du genau was passiert. Auch die ** machen einen Sinn, zumindest wenn man mit Lerzeichen hantiert.
while s[1] <> ' ' do begin
delete(s, 1, 1); showmessage ('*'+st+'*'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 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