AGB  ·  Datenschutz  ·  Impressum  







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

If ... or ... then verwirrt mich

Ein Thema von hellow554 · begonnen am 1. Apr 2010 · letzter Beitrag vom 3. Apr 2010
Antwort Antwort
Seite 1 von 2  1 2      
hellow554

Registriert seit: 29. Mär 2009
Ort: Bargteheide
9 Beiträge
 
#1

If ... or ... then verwirrt mich

  Alt 1. Apr 2010, 17:05
Moin moin,

ich steig grad durch mein eigenes Programm nicht durch...

Folgendes ist der Fall:

Delphi-Quellcode:
i := 0;
repeat
if (combobox1.items.Strings[i] = 'YASU') or (combobox1.Items.Strings[i] = 'DT') then
  combobox1.Items.Delete(i);
a := combobox1.Items.Count;
i := i+1;
until i >= combobox1.Items.Count+2;
Ich durchsuche eine Combobox nach den Wörtern YASU und DT... naja..
Er löscht immer nur DT, warum?
Alternative, damit es funzt ist
Delphi-Quellcode:
repeat
if combobox1.items.Strings[i] = 'DTthen
  combobox1.Items.Delete(i);
if combobox1.Items.Strings[i] = 'YASUthen
  combobox1.Items.Delete(i);
a := combobox1.Items.Count;
i := i+1;
until i >= combobox1.Items.Count+2;
Für micht ist das das selbe!? Wenn Yasu oder DT vorkommt lösche den, sonst mach weiter... hmmm
weitere abhilfe schafft aber auch, wenn ich in der ini datei aus der ich das ganze lade dt und yasu an erster stelle setzt, anstatt an letzter... aber es sollte mit beiden funktionieren, damit ich später nicht in der ini rumfuchteln muss...
ps... die variable a ist nur zu debug zwecken grad da, weil ich vorher ne endlosschleife hatte, weil i plötzlich größer war also combo.count und ich dort das > noch nicht dirn hatte... naja hab mich halt gewundert deswegen auch die +2 für zwei gelöschte einträge.

mfg

Marcel
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: If schleife verwirrt mich

  Alt 1. Apr 2010, 17:07
Erst einmal gibt es keine if-Schleife. Und dann hab ich noch nicht ganz begriffen, was Du vorhast. Sollen alle Einträge gelöscht werden, die YASU oder DT an beliebiger Stelle enthalten?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hellow554

Registriert seit: 29. Mär 2009
Ort: Bargteheide
9 Beiträge
 
#3

Re: If schleife verwirrt mich

  Alt 1. Apr 2010, 17:09
Zitat von DeddyH:
Erst einmal gibt es keine if-Schleife. Und dann hab ich noch nicht ganz begriffen, was Du vorhast. Sollen alle Einträge gelöscht werden, die YASU oder DT an beliebiger Stelle enthalten?
sollte diese zeile sagen:

combobox1.Items.Delete(i);

ja

wie gesagt ist einfach eine ini datei.. alle sections werden in die combobox geladen und die die dt oder yasu enthalten sollen nicht angezeigt/gelöscht werden

sry, if schleife ist doof aber halt die repeat schleife führt das if ständig wieder aus
  Mit Zitat antworten Zitat
IceBube

Registriert seit: 9. Jul 2008
177 Beiträge
 
#4

Re: If schleife verwirrt mich

  Alt 1. Apr 2010, 17:12
Hallo!

Besser ist es mit einer for-Schleife zu machen!

Delphi-Quellcode:
  for I := ComboBox1.Items.Count-1 DownTo 0 do
    if (ComboBox1.Items[I] = 'YASU') or (ComboBox1.Items[I] = 'DT') then
      ComboBox1.Items.Delete(I);
lg
  Mit Zitat antworten Zitat
hellow554

Registriert seit: 29. Mär 2009
Ort: Bargteheide
9 Beiträge
 
#5

Re: If schleife verwirrt mich

  Alt 1. Apr 2010, 17:14
das funzt....
aber warum das mit der repeat until schleife nicht???? ^^
ich wills ja einfach nur verstehn, damit ich ein wenig schlauer werde
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: If schleife verwirrt mich

  Alt 1. Apr 2010, 17:15
Dann würde ich das so machen:
Delphi-Quellcode:
ComboBox.Items.BeginUpdate;
try
  for i := ComboBox.Items.Count - 1 downto 0 do
    if AnsiContainsText(ComboBox.Items[i],'yasu') or AnsiContainsText(ComboBox.Items[i],'dt') then
      ComboBox.Items.Delete(i);
finally
  ComboBox.Items.EndUpdate;
end;
[edit] Wo kommen denn die Beiträge auf einmal her? Außerdem ist eine repeat-Schleife hier nicht angesagt, da man evtl. auf einen nicht existenten Eintrag zugreift.[/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hellow554

Registriert seit: 29. Mär 2009
Ort: Bargteheide
9 Beiträge
 
#7

Re: If ... or ... then verwirrt mich

  Alt 1. Apr 2010, 17:19
hmmm...
das verwirrt mich zu sehr hab nich mal ne ahnung, wozu combobox.items.beginupdate da ist.

wie gesagt die verison da vor funzt, ich nehm die und nun ja... mein erstes prob ist immernoch nich gelöst.. warum funktioniert das nicht?
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#8

Re: If ... or ... then verwirrt mich

  Alt 1. Apr 2010, 17:22
Das Problem ist, dass du nach Löschen ja die Anzahl und den Index des nachfolgenden Eintrages löscht. In einem solchen Fall, laufe ich immer die Liste von oben nach unten durch, dann verschieben sich die Indices nicht.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: If ... or ... then verwirrt mich

  Alt 1. Apr 2010, 17:23
Funktioniert es denn so?
Delphi-Quellcode:
i := 0;
repeat
  if (combobox1.items.Strings[i] = 'YASU') or (combobox1.Items.Strings[i] = 'DT') then
    combobox1.Items.Delete(i)
  else
    i := i+1;
  a := combobox1.Items.Count;
until i >= combobox1.Items.Count;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#10

Re: If ... or ... then verwirrt mich

  Alt 1. Apr 2010, 17:24
Die Zeile
until i >= combobox1.Items.Count+2; scheint falsch zu sein. Richtig wäre
until i > combobox1.Items.Count - 1;
Zitat von hellow554:
hab nich mal ne ahnung, wozu combobox.items.beginupdate da ist.
Delphi-Referenz durchsuchenTComboBox.Items.BeginUpdate verhindert das Neuzeichnen der ComboBox und beschleunigt daher das Programm. Das muss mit .EndUpdate natürlich wieder aufgehoben werden. Und zur Sicherheit, damit das auch wirklich aufgehoben wird, ist der Schutzblock da.
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:01 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