AGB  ·  Datenschutz  ·  Impressum  







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

Elemente aus TStringList in Laufzeit entfernen

Ein Thema von KetchUp · begonnen am 16. Nov 2018 · letzter Beitrag vom 25. Nov 2018
Antwort Antwort
KetchUp

Registriert seit: 16. Nov 2018
31 Beiträge
 
#1

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 18. Nov 2018, 20:33
Vielen Dank, jetzt bin ich schon ein großen Schritt weiter. Ich hab jetzt auch das Problem des Absturzes ausgemacht.

Code:
RepetitionCheck:=RandomNumber;
While RepetitionCheck = RandomNumber Do RandomNumber:=random(Vocabulary.Count);
Ich wollte verhindern, dass dieselbe Vokabel zwei mal hintereinander abgefragt wird und hab mir damit ne Endlosschleife gebaut, wenn nur noch eine Vokabel vorhanden ist.

Wie erfahre ich denn jetzt welche die Letzte übrig gebliebene Vokabel ist, nachdem alle anderen zufällig mit .Delete entfernt wurden?

Ich dachte sie müsste den Index 0 haben, das gibt aber ein "out of bounds" zurück.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#2

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 18. Nov 2018, 20:58
Wenn die Vokabeln, nachdem sie erfolgreich "erraten" wurden, aus der Liste entfernt werden, ist Count irgendwann = 0. Dann ist die Liste leer.

Ist Count = 1, ist nur noch eine Vokabel enthalten, dann läuft die Schleife wirklich weiter, bis der Strom ausfällt

Wenn man per Index auf 'ne Stringliste zugreift, sollte man ggfls. vorher abfragen, ob Index >= 0 und kleiner Count ist. Nur dann "greift" man auf einen vorhandenen Wert zu.

Wenn also nur noch eine Vokabel in der Liste ist, könnte man z. B. sowas in der Art machen:
Delphi-Quellcode:
if Vocabulary.Count = 0 then begin
  ShowMessage(Format('Die letzte Vokabel ist: %s',[Vocabulary.ValueFromIndex[0]]);
  // Oder hier das "Fertigformular" (Form3) aufrufen ...
end else begin
  RepetitionCheck:=RandomNumber;
  While RepetitionCheck = RandomNumber Do RandomNumber:=random(Vocabulary.Count);
...
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#3

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 18. Nov 2018, 21:06
Wenn aus der Liste ein zufälliges Element ausgewählt wurde, dann wird es auch aus der Liste entfernt.

Wozu gibt es jetzt diesen RepetitionCheck? Was nicht mehr in der Liste ist, kann auch nicht wieder gezogen werden. Am Index 17 steht ein anderer Wert als vorher (weil die 17 wurde ja entfernt). Wo wäre also das Problem, wenn zweimal hintereinander die 17 gezogen wird?
  Mit Zitat antworten Zitat
KetchUp

Registriert seit: 16. Nov 2018
31 Beiträge
 
#4

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 19. Nov 2018, 19:24
Wenn aus der Liste ein zufälliges Element ausgewählt wurde, dann wird es auch aus der Liste entfernt.
Wozu gibt es jetzt diesen RepetitionCheck? Was nicht mehr in der Liste ist, kann auch nicht wieder gezogen werden. Am Index 17 steht ein anderer Wert als vorher (weil die 17 wurde ja entfernt). Wo wäre also das Problem, wenn zweimal hintereinander die 17 gezogen wird?
Man soll die Vokabel 3 mal hintereinander richtig eingeben müssen, bis sie gelöscht wird. Deswegen will ich verhindern, dass er mehrmals die Gleiche abfragt. Aber ich weiß noch nicht, wie ich jeder Vokabel eine Variable zuweißen kann die dann von 3 runter zählt.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#5

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 19. Nov 2018, 20:08
Zitat:
Aber ich weiß noch nicht, wie ich jeder Vokabel eine Variable zuweißen kann die dann von 3 runter zählt.
Klassen, SolvedCount
  Mit Zitat antworten Zitat
KetchUp

Registriert seit: 16. Nov 2018
31 Beiträge
 
#6

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 19. Nov 2018, 20:17
Zitat:
Aber ich weiß noch nicht, wie ich jeder Vokabel eine Variable zuweißen kann die dann von 3 runter zählt.
Klassen, SolvedCount
Ich finde es wirklich toll, dass du dir die mühe gemacht hast den Quellcode dafür zu schreiben und auch schade, dass du ihn wieder entfernt hast. Das hätte auch anderen helfen können.

Es fällt mir aber sehr schwer mich in das System reinzudenken und ich kann (und möchte auch nicht) einfach Quellcode kopieren, da ich jede Zeile Quellcode in einem Vortrag erklären können muss. Mir liegt das Programmieren nicht so, bin eher der Grafiker. Ich finde es aber interessant und will eine gute Arbeit abliefern.
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#7

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 19. Nov 2018, 20:50
Dann mal einen Vorschlag ohne Klassen.

Lade die Liste und arbeite diese ab (Eintrag wird sofort gelöscht). Wenn die leer ist dann wieder aus der Datei laden, und nochmal durch, laden und nochmal durch und fertig.
  Mit Zitat antworten Zitat
Antwort Antwort


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 21: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