Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bestimmten Eintrag auus StringList löschen (https://www.delphipraxis.net/84171-bestimmten-eintrag-auus-stringlist-loeschen.html)

ByStones2 12. Jan 2007 15:13


Bestimmten Eintrag auus StringList löschen
 
Hi,
Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var
  lLine: Integer;
Begin
  lLine := 0;
  While ( lLine < onlist.Count ) Do
  If onlist.strings[lLine] = Edit2.Text Then
    Begin
      onlist.delete(lLine);
      End;
end;
Auch wenn die bedingung erfüllt ist wird der eintrag nicht gelöscht..
ich weiß leider nich warum, ich hoffe ihr könnt mir helfen???
Manchmal gibt es einen Fehler dass das Maximum überschritten werde ...

Gruß ByStones

sirius 12. Jan 2007 15:23

Re: Bestimmten Eintrag auus StringList löschen
 
Wo zählst denn du deinen Zähler hoch?

Das ganze geht auch irgendwie so:
Delphi-Quellcode:
onList.delete(onlist.indexof(edit2.text));

Edit: Schreibfehler..hab mal aus dem onLust ein onList gemacht.

ste_ett 12. Jan 2007 15:23

Re: Bestimmten Eintrag auus StringList löschen
 
Eine etwas andere Herangehensweise. :)

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  for i := Memo1.Lines.Count -1 downto 0 do
  begin
    if (Memo1.Lines[i] = Edit1.Text) then
      Memo1.Lines.Delete(i);
  end;
end;
Es werden alle Einträge gelöscht und man läuft nicht Gefahr über die Grenzen hinauszulaufen. :)

ByStones2 12. Jan 2007 15:25

Re: Bestimmten Eintrag auus StringList löschen
 
Zitat:

Zitat von sirius
Wo zählst denn du deinen Zähler hoch?

Das ganze geht auch irgendwie so:
Delphi-Quellcode:
onList.delete(onlist.indexof(edit2.text));

Edit: Schreibfehler..hab mal aus dem onLust ein onList gemacht.

naja, mein name wir beim start des programms an die onlist angehängt und soll am ende wieder gelöscht werden...
bei deinem code passiert dass was bei mir auch passiert, der name wird bei jedem start eins mehr...

sirius 12. Jan 2007 15:43

Re: Bestimmten Eintrag auus StringList löschen
 
Ich denke, das Beil liegt woanders begraben. Wird die Procedure überhaupt aufgerufen? Leg mal nen Breakpoint [F5] innerhalb dieser Prozedur!

ByStones2 12. Jan 2007 15:47

Re: Bestimmten Eintrag auus StringList löschen
 
Zitat:

Zitat von sirius
Ich denke, das Beil liegt woanders begraben. Wird die Procedure überhaupt aufgerufen? Leg mal nen Breakpoint [F5] innerhalb dieser Prozedur!

ja die prozedur wird aufgerufen ...
ich hab keinen plan wo der fehler liegt, soll ich mal den kompletten code posten ???

sirius 12. Jan 2007 15:50

Re: Bestimmten Eintrag auus StringList löschen
 
Zitat:

Zitat von ByStones2
ich hab keinen plan wo der fehler liegt, soll ich mal den kompletten code posten ???

Na so ein bisschen:
-Deklaration von onlist
-Wo wird sie created, wo aufgelöst
-Wo beschrieben und
-->alles was mit onlist so zu tun hat

ByStones2 12. Jan 2007 15:52

Re: Bestimmten Eintrag auus StringList löschen
 
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Size := 256;
  SetLength(Benutzername, Size);
  GetUserName(PChar(Benutzername), Size);
  SetLength(Benutzername, Size);
  if(benutzername='KatevasK') or (benutzername='HamannL') then
  close;

  Edit2.Text := BenutzerName;
  list := TStringList.Create;
  ini := tinifile.create(extractfilepath(paramstr(0))+'pfade.ini');
  pfad := ini.ReadString('pfade', 'serverpfad', '');
  Memo1.ReadOnly := true;

  onlist:=TStringList.Create;
  pfad2:=ini.ReadString('pfade','on','');
  onlist.LoadFromFile(pfad2);
  onlist.Add(benutzername);
  onlist.SaveToFile(pfad2);
  ii:=-1;
  i:=onlist.Count;
  if i=ii then
  begin
  ii:=-1;
  end;
  for i := 0 to OnList.Count -1 do ListBox1.Items.Add(OnList.Strings[i]);

end;
Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  y: Integer;
begin
for y := Memo1.Lines.Count -1 downto 0 do
  begin
    if (Memo1.Lines[y] = Edit1.Text) then
      Memo1.Lines.Delete(y);
end;
end;
das is es

marabu 12. Jan 2007 15:55

Re: Bestimmten Eintrag auus StringList löschen
 
Hallo,

dein Code löscht die durch Edit2 bestimmten Zeilen nur dann, wenn sie am Anfang von onList stehen, weil du deinen index nicht anpasst.

Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var
  lLine: Integer;
Begin
  lLine := 0;
  // onlist.BeginUpdate;
  While ( lLine < onlist.Count ) Do
    If SameText(onlist[lLine], Edit2.Text)
      Then onlist.delete(lLine)
      Else Inc(lLine);
  // onlist.EndUpdate;
end;
Getippt und nicht getestet.

Grüße vom marabu

Muetze1 12. Jan 2007 15:56

Re: Bestimmten Eintrag auus StringList löschen
 
Ja, und wo löscht du den Namen wieder aus der Liste am Ende? Du sagtest, er solle am Ende wieder rausgelöscht werden - davon sehe ich nichts. OnList und Memo1 sind unterschiedliche Dinge und zum anderen sehe ich nicht, wo du die Liste ein zweites Mal speicherst...

marabu: AnsiSameText(): Komma zwischen den beiden Argumenten vergessen umzustellen...

ByStones2 12. Jan 2007 16:01

Re: Bestimmten Eintrag auus StringList löschen
 
Zitat:

Zitat von marabu
Hallo,

dein Code löscht die durch Edit2 bestimmten Zeilen nur dann, wenn sie am Anfang von onList stehen, weil du deinen index nicht anpasst.

Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var
  lLine: Integer;
Begin
  lLine := 0;
  // onlist.BeginUpdate;
  While ( lLine < onlist.Count ) Do
    If SameText(onlist[lLine] = Edit2.Text
      Then onlist.delete(lLine)
      Else Inc(lLine);
  // onlist.EndUpdate;
end;
Getippt und nicht getestet.

Grüße vom marabu

das sieht gut aus aber es geht nicht, obwohl ich die fehlende klammer hinter sametext da gemacht hab es gibt folgende fehler:
Delphi-Quellcode:
[Pascal Fehler] Unit1.pas(204): E2250 Es gibt keine überladene Version von 'SameText', die man mit diesen Argumenten aufrufen kann
[Pascal Fehler] Unit1.pas(204): E2010 Inkompatible Typen: 'string' und 'Boolean'
[Pascal Warnung] Unit1.pas(243): W1019 FOR-Schleifenvariable muss eine einfache lokale Variable sein
[Pascal Fataler Fehler] Chat.dpr(5): F2063 Verwendete Unit 'Unit1.pas' kann nicht compiliert werden
Update:
Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var
  lLine: Integer;
Begin
  lLine := 0;
  // onlist.BeginUpdate;
  While ( lLine < onlist.Count ) Do
    If AnsiSameText(onlist[lLine],Edit2.Text) Then
    onlist.delete(lLine)
      Else Inc(lLine);
  // onlist.EndUpdate;
end;
so habs ich jetzt und es geht auch nicht, langsam glaub ich delphi mag mich nich ma
ehr ...

sirius 12. Jan 2007 16:03

Re: Bestimmten Eintrag auus StringList löschen
 
Du solltest nach dem Löschen deine Liste noch einmal speichern (savetofile).
Nur delete, löscht zwar den Eintrag im Hauptspeicher, aber nicht auf der Festplatte.

Und lass, das mal mit dem Memo, das war nur ein Beispiel von xyz, was nicht direkt in deinen Code passt


Soll das ein multiuser-Programm werden. Dann musst du für diese Datei noch ein paar Sicherheiten einbauen.

Muetze1 12. Jan 2007 16:04

Re: Bestimmten Eintrag auus StringList löschen
 
Ja, wie ich schon geschrieben hatte...

Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var
  lLine: Integer;
Begin
  lLine := 0;
  // onlist.BeginUpdate;
  While ( lLine < onlist.Count ) Do
    If SameText(onlist[lLine], Edit2.Text) Then
      onlist.delete(lLine)
    Else
      Inc(lLine);
  // onlist.EndUpdate;
end;

ByStones2 12. Jan 2007 16:04

Re: Bestimmten Eintrag auus StringList löschen
 
es geht danke für die hilfe !!!
jaajajaja es geht !!!
:-D :-D :-D :-D :-D :-D :-D
danke !!!!!!!!!!!!11 :cheers:

marabu 12. Jan 2007 16:07

Re: Bestimmten Eintrag auus StringList löschen
 
Ich würde das mal im Debugger durchsteppen.

@Muetze1: Danke für den Hinweis - habe es schnell geändert.

sirius 12. Jan 2007 16:10

Re: Bestimmten Eintrag auus StringList löschen
 
@muetze, @marabu, @st_ett
ihr müsst nicht selber nach dem Text in einer Schleife suchen. Das erledigt das Objekt für euch mit dem property indexof

Muetze1 12. Jan 2007 16:18

Re: Bestimmten Eintrag auus StringList löschen
 
@sirius: Das ist uns klar, aber im Gegensatz zu deinem Code löschen wir alle Vorkommen des Eintrages, du nur den ersten. Auch würde dein Code eine Exception EOutOfBounds werfen, wenn der Eintrag nicht vorhanden ist.

/EDIT: IndexOf() ist eine Methode und keine Property :warn:

Klaus01 12. Jan 2007 16:20

Re: Bestimmten Eintrag auus StringList löschen
 
Zitat:

Zitat von sirius
@muetze, @marabu, @st_ett
ihr müsst nicht selber nach dem Text in einer Schleife suchen. Das erledigt das Objekt für euch mit dem property indexof

Nun, indexof findet das erste Vorkommen des Strings in der Liste.
Ich müßte dann zumindest eine Schleife laufen lassen, die abprüft ob Indexof noch etwas zurückliefert.

Und ich denke mal IndexOf wird auch nicht viel anderes machen als die
Liste per Schleife durchzugehen.

Grüße
Klaus


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