AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wort in einem String suchen

Ein Thema von Pseudemys Nelsoni · begonnen am 21. Feb 2003 · letzter Beitrag vom 27. Feb 2003
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#21
  Alt 26. Feb 2003, 09:43
also es geht um ein irc client, bei dem raw event "#chan +mode nick"(acontent) nehm ich den mode(um zu sehen welcher mode es ist, z.B wie hier "+a") und den nick(für die listbox) raus

Es gibt 2 Stringlists, in dem einen sind die Admins, indem anderen die regulären Nicks. (btw: ich benutze 2 stringlists, weil wenn ich nur die listbox nehmen würde und auf sorted = true, wärendie nicks zwar nach alphabet geordnet, aber nicht nach admins dann reg nicks)

Sagen wir mal ich setze irgendeinen Nick "+a" dann muss ich ja den Nick auf den sich das +a bezieht aus der Stringlist(sl2(reguläre Nicks)) entfernen, in die andere Stringlist(sl1(admins)) hinzufügen. Dann lösche ich die Listbox und füge erst die Strings aus Stringlist1 zur Listbox hinzu, dann aus Stringlist2.

Das gleiche für -a

weisst wie ich das meine? wenns einen leichteren weg gibt bitte sagen

danke für die antwort janjan
Mario
  Mit Zitat antworten Zitat
janjan

Registriert seit: 16. Jan 2003
Ort: Bonn ("links über Königswinter ")
240 Beiträge
 
Delphi 4 Standard
 
#22
  Alt 26. Feb 2003, 10:12
Dein Fehler müsste da liegen:
for Counter := 0 to listbox1.Items.IndexOf(Nick) do Du willst doch die Position von Nick in sl1 oder sl2 wissen und nicht in Listbox1.

Ich hätte das ohne Schleife gelöst (bin mir aber nicht sicher ob das so klappt):
Delphi-Quellcode:
procedure TForm1.IdIRC1Raw(Sender: TObject; AUser: TIdIRCUser; ACommand,
  AContent: String; var Suppress: Boolean);
var
  Mode, Nick: string;
  Counter: integer;
  bmp: TBitmap;
begin
  Mode := Copy(acontent, 14, 2); // Nick aus "acontent" auslesen
  Nick := Copy(acontent, LastDelimiter(' ' , acontent)+1, length(acontent)); // Mode aus "acontent" auslesen
  if Mode = '+athen // Wenn mode "+a" ist
  begin
    sl2.Delete(s12.Items.IndexOf(Nick));
    sl1.AddObject(Nick, image10.Picture.Bitmap);
    ListBox1.Clear;
    listbox1.Items.AddStrings(sl1);
    listbox1.Items.AddStrings(sl2);
  end;
  if Mode = '-athen // Wenn mode "-a" ist
  begin
    sl1.Delete(s11.Items.IndexOf(Nick));
    sl2.AddObject(Nick, image10.Picture.Bitmap);
    ListBox1.Clear;
    listbox1.Items.AddStrings(sl1);
    listbox1.Items.AddStrings(sl2);
  end;
end;
Die Wichtigkeit eines Postings im Forum ist reziprok zur Anzahl der enthaltenenen, kumulierten Ausrufungszeichen!!!
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#23
  Alt 26. Feb 2003, 14:07
der code funzt soweit, aber beim "deAdminen" passiert nichts, also der string bleibt in der listbox, das prob hat ich auch mit meinem "code"

wieso wird das nicht gelöscht?

gruss =)

btw: thx für den code
Mario
  Mit Zitat antworten Zitat
janjan

Registriert seit: 16. Jan 2003
Ort: Bonn ("links über Königswinter ")
240 Beiträge
 
Delphi 4 Standard
 
#24
  Alt 26. Feb 2003, 14:19
Kuck mal welcher Wert in der Titelleiste für s11.Items.IndexOf(Nick) und für Nick steht. Ich vermute mal das es da Probleme gibt. (Form1 musste noch an dein Formnamen anpassen)

Delphi-Quellcode:
  
  if Mode = '-athen // Wenn mode "-a" ist
  begin
    Form1.Caption:='Nick: '+Nick+' Index of Nick: '+inttostr(s11.Items.IndexOf(Nick));
    sl1.Delete(s11.Items.IndexOf(Nick));
    sl2.AddObject(Nick, image10.Picture.Bitmap);
    ListBox1.Clear;
    listbox1.Items.AddStrings(sl1);
    listbox1.Items.AddStrings(sl2);
  end;
Die Wichtigkeit eines Postings im Forum ist reziprok zur Anzahl der enthaltenenen, kumulierten Ausrufungszeichen!!!
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#25
  Alt 26. Feb 2003, 15:17
hab das ins memo einfügen lassen, da ich keine titelleiste hab und da kam:

"Nick: tsc_user Index of Nick: 1"

^^^^

ist das richtig?

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
 
#26
  Alt 26. Feb 2003, 16:41
Komisch, das sollte eigentlich richtig sein. Ich mach jetzt Feierabend und kuck mir das nachher nochmal an...
Die Wichtigkeit eines Postings im Forum ist reziprok zur Anzahl der enthaltenenen, kumulierten Ausrufungszeichen!!!
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#27
  Alt 27. Feb 2003, 05:30
also so:

Delphi-Quellcode:
procedure TForm1.IdIRC1Raw(Sender: TObject; AUser: TIdIRCUser; ACommand,
  AContent: String; var Suppress: Boolean);
var
  Mode, Nick: string;
  counter: integer;
begin
  Mode := Copy(acontent, 14, 2); // Nick aus "acontent" auslesen
  Nick := Copy(acontent, LastDelimiter(' ' , acontent)+1, length(acontent)); // Mode aus "acontent" auslesen
  if Mode = '+athen // Wenn mode "+a" ist
  begin
    sl2.Delete(sl2.IndexOf(Nick));
    sl1.AddObject(Nick, image10.Picture.Bitmap);
    ListBox1.Clear;
    listbox1.Items.AddStrings(sl1);
    listbox1.Items.AddStrings(sl2);
  end;
  if Mode = '-athen // Wenn mode "-a" ist
  begin
    for Counter := 0 to sl1.Count-1 do
    begin
      if sl1.Strings[Counter] = Nick then
      begin
        sl1.Delete(Counter);
        sl2.AddObject(Nick, image11.Picture.Bitmap);
        Listbox1.Clear;
        Listbox1.Items.AddStrings(sl1);
        Listbox1.Items.AddStrings(sl2);
      end;
    end;
  end;
end;
funktionierts jetzt

danke an alle
Mario
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#28
  Alt 27. Feb 2003, 06:14
allerdings wenn ich das für das OnPart event nehme...

Delphi-Quellcode:
procedure TForm1.IdIRC1Part(Sender: TObject; AUser: TIdIRCUser;
  AChannel: TIdIRCChannel);
var Counter: integer;
begin
for Counter := 0 to sl1.Count-1 do
  begin
    if sl1.Strings[Counter] = auser.Nick then
    begin
      sl1.Delete(Counter);
      Listbox1.Clear;
      if sl1.Count > 0 then
      begin
        Listbox1.Items.AddStrings(sl1);
      end;
      if sl2.Count > 0 then
      begin
        Listbox1.Items.AddStrings(sl2);
      end;
    end;
  end;
for Counter := 0 to sl2.Count-1 do
  begin
    if sl2.Strings[Counter] = auser.Nick then
    begin
      sl2.Delete(Counter);
      Listbox1.Clear;
      if sl1.Count > 0 then
      begin
        Listbox1.Items.AddStrings(sl1);
      end;
      if sl2.Count > 0 then
      begin
        Listbox1.Items.AddStrings(sl2);
      end;
    end;
  end;
end;
steht da immer wenn ein regulärer nick(sl2) leavt "ListenIndex überschreitet das Maximum(1)" << was heisst 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
 
#29
  Alt 27. Feb 2003, 08:07
Du müsstest die Suche mit einer while Schleife machen, nicht mit einer for Schleife. Angenommen deine Liste enthält 6 Einträge, dann läuft die Schleife von 0 bis 5. Wenn du jetzt einen Eintrag löschst und dann versuchst auf eintrag Nummer 5 zuzugreifen, dann überschreitest du das Maximum der Liste.

Oder probiers mal so (mir ist immer noch nicht so ganz klar warum du alles in eine Schleife setzt, das ListBox1.Clear und den Rest musst du nur einmal machen):

Delphi-Quellcode:
procedure TForm1.IdIRC1Part(Sender: TObject; AUser: TIdIRCUser;
  AChannel: TIdIRCChannel);
var Counter: integer;
    Gefunden: Boolean;
begin
  Gefunden:=False;
  for Counter := 0 to sl1.Count-1 do
    if sl1.Strings[Counter] = auser.Nick then
      begin
        Gefunden:=True;
        break;
      end;
  if Gefunden then
    begin
      sl1.Delete(Counter);
      Listbox1.Clear;
      if sl1.Count > 0 then
        Listbox1.Items.AddStrings(sl1);
      if sl2.Count > 0 then
        Listbox1.Items.AddStrings(sl2);
    end; // if Gefunden
  Gefunden:=False;
  for Counter := 0 to sl2.Count-1 do
    if sl2.Strings[Counter] = auser.Nick then
      begin
        Gefunden:=True;
        break
      end;
  If Gefunden then
    begin
      sl2.Delete(Counter);
      Listbox1.Clear;
      if sl1.Count > 0 then
        Listbox1.Items.AddStrings(sl1);
      if sl2.Count > 0 then
        Listbox1.Items.AddStrings(sl2);
    end; // if Gefunden
end;
(alle Vorschläge wie immer ohne Gewähr auf völlige Richtigkeit)
Die Wichtigkeit eines Postings im Forum ist reziprok zur Anzahl der enthaltenenen, kumulierten Ausrufungszeichen!!!
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#30
  Alt 27. Feb 2003, 10:10
hoi, danke danke jetzt klappt das alles

könntest du mir noch sagen wie das mit der booleschen variable genau funzt(nur um zu verstehen wie es geht)...z.b bei:

if Gefunden then ich hätte (wenn ich keine hilfe gehabt hätte, so geschrieben "if Gefunden = true then" wie funzt das da genau?

gruss mario
Mario
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 11:14 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