AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Alle Wörter aus einem String in eine Listbox
Thema durchsuchen
Ansicht
Themen-Optionen

Alle Wörter aus einem String in eine Listbox

Ein Thema von Pseudemys Nelsoni · begonnen am 5. Mär 2003 · letzter Beitrag vom 9. Mär 2003
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Alle Wörter aus einem String in eine Listbox

  Alt 5. Mär 2003, 12:15
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
Mario
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2
  Alt 5. Mär 2003, 13:19
Wie das geht? Mit der Holzhammermethode. Mit Strings mache ich immer kurzen Prozeß. 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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#3
  Alt 5. Mär 2003, 13:37
danke das probier ich mal

gruss mario
Mario
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#4
  Alt 5. Mär 2003, 15: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
Mario
  Mit Zitat antworten Zitat
janjan

Registriert seit: 16. Jan 2003
Ort: Bonn ("links über Königswinter ")
240 Beiträge
 
Delphi 4 Standard
 
#5
  Alt 5. Mär 2003, 15:09
Änder mal
until s = ' '; in
until s = '';
Die Wichtigkeit eines Postings im Forum ist reziprok zur Anzahl der enthaltenenen, kumulierten Ausrufungszeichen!!!
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6
  Alt 5. Mär 2003, 15:10
Endlosschleife, hab mir das schon gedacht. Solche Sachen aus dem Kopf heraus aufs Papier zu bringen, ohne Fehler geht meistens schief. Tippe auf die zweite REPEAT. Das Wort Debugger schon mal gehört, oder ShowMessage Muß leider weg.....
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#7
  Alt 5. Mär 2003, 16: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
Mario
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8
  Alt 5. Mär 2003, 18:54
Aha, Dein Quelltext nähert sich zumindest meinem an.

Zitat von silent:
zeichen := Copy (s,1,1)
Erklär mir mal, was Du damit bezweckst

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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#9
  Alt 5. Mär 2003, 19: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
Mario
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10
  Alt 5. Mär 2003, 19: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. 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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz