Einzelnen Beitrag anzeigen

KetchUp

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

Elemente aus TStringList in Laufzeit entfernen

  Alt 16. Nov 2018, 16:21
Hallo, ich will als Schulprojekt einen Vokabeltrainer erstellen der Vokabeln aus einer TXT Datei liest und den Benutzer diese abfragt. Dabei sollen die Vokabeln sooft zufällig abgefragt werden bis man sie 3 mal hintereinander richtig eingegeben hat.

Funktioniert soweit auch, nur wenn ich eine Vokabel aus der TStringList entferne, gibt es einen "List index out of bounds" Error. Vermutlich löscht Delphi die Vokabel, nur ohne die verbleibenden neu zu sortieren und somit erwischt der Zufallsgenerator mal einen Wert, der im Index nicht mehr vorhanden ist.

Wie kann ich das Problem beheben?

Code:
    Begin
      Input:= E_UserGuess.Text;                                        
      E_UserGuess.Text:= '';                                          


      Answer:=AnsiCompareStr(VocabularyEnglish[RandomNumber], Input);  

      If Answer=0
        Then
          Begin
            L_CorrectAnswer.Caption:='';
            jpg:= TJpegImage.Create;
            jpg.LoadFromFile('True.jpg');
            Img_FeedBack.Picture.Bitmap.Assign(jpg);
            jpg.free;
          End

        Else
          Begin
            L_CorrectAnswer.Caption:='Deine Antwort: '+(Input)+'     '+'Richtige Antwort: '+(VocabularyEnglish[RandomNumber]);
            jpg:= TJpegImage.Create;
            jpg.LoadFromFile('False.jpg');
            Img_FeedBack.Picture.Bitmap.Assign(jpg);
            jpg.free;
          End;


          RepetitionCheck:=RandomNumber;                                          
          While RepetitionCheck = RandomNumber Do RandomNumber:=random(WordCount);

        VocabularyEnglish:= TStringList.Create;                
        VocabularyGerman:= TStringList.Create;                  

          try

            VocabularyEnglish.LoadFromFile('Vocabulary.txt');      
            VocabularyGerman.LoadFromFile('Vocabulary2.txt');        
            VocabularyGerman.Delete(RandomNumber);
            VocabularyEnglish.Delete(RandomNumber);
            L_RemainingWords.Caption:= 'Verbleibende Vokabeln: '+IntToStr(VocabularyGerman.Count);
            L_RemainingWords.Font.Name:='Helvetica LT Std';
            L_RemainingWords.Font.Size:= 16;
            L_RemainingWords.Font.Color:= RGB(170,220,70);

            finally
            VocabularyGerman.Free;
          end;
PS: Die deutschen und englischen Vokabeln liegen in 2 separaten Textdateien, da ich es noch nicht geschafft haben die Wörter aus einer Datei getrennt auszulesen.

Geändert von KetchUp (16. Nov 2018 um 16:23 Uhr)
  Mit Zitat antworten Zitat