Delphi-PRAXiS
Seite 2 von 11     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Elemente aus TStringList in Laufzeit entfernen (https://www.delphipraxis.net/198592-elemente-aus-tstringlist-laufzeit-entfernen.html)

KetchUp 16. Nov 2018 20:06

AW: Elemente aus TStringList in Laufzeit entfernen
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1418267)
Das stammt noch aus den Windowsanfangszeiten, als Konfigurationen (fast ausschließlich) in INI-Dateien gespeichert wurden.

Vor dem Gleichheitszeichen steht der Name (Mehrzahl = Namen -> englisch = Names) des zu konfigurierenden "Teils" und hinter dem Gleichheitszeichen sein Wert (eine mögliche Übersetzung von Wert ins Englische ist Value (Einzahl) -> Values (Mehrzahl)).

Vielen Dank! Das war genau die Hintergrundinformation die ich wissen wollte. :thumb:

KetchUp 17. Nov 2018 13:01

AW: Elemente aus TStringList in Laufzeit entfernen
 
So ganz scheint es doch nicht mit "Names" und "ValueFromIndex" zu funktionieren. Ich hab jetzt alles darauf umgeschrieben, bekomme auch keinen Compiler Error aber wieder ein "List Index out of Bounds" Fehler. Der tritt genau in der Zeile auf wo die Eingabe der Vokabel mit der in der TXT-Datei hinterlegten verglichen wird.

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

      Answer:=AnsiCompareStr(Vocabulary.Names[RandomNumber], Input);

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

          try
            Vocabulary:= TStringList.Create;                                
            Vocabulary.LoadFromFile('Vocabulary.txt');                    
            L_UnknownWord.Caption:= Vocabulary.ValueFromIndex[RandomNumber];    
            finally
            Vocabulary.Free;
          end;

    end
Wenn ich "Answer:=AnsiCompareStr(Vocabulary.Names[RandomNumber], Input);" auskommentiere geht es aber ich muss die Wörter vergleichen. Es liegt auch nicht an "RandomNumber", wenn ich das durch eine Zahl ersetze kommt der gleiche Fehler.

Gibt es noch eine Möglichkeit die zu vergleichen?

Delphi.Narium 17. Nov 2018 13:19

AW: Elemente aus TStringList in Laufzeit entfernen
 
Woher kommt WordCount, das darf maximal Vocabulary.Count - 1 sein.

Wenn Du aber erst eine Zufallszahl im Bereich bis WordCount "würfelst", aber WordCount zufällig größer als Vocabulary.Count - 1 ist, kann es sporadisch Fehler geben.

Delphi-Quellcode:
  While RepetitionCheck = RandomNumber Do RandomNumber := Random(Vocabulary.Count - 1);


Achso:

Die Vokabeln für jede einzelne Abfrage neu zu laden, halte ich nicht für so eine besonders gute Idee.

Das sollte einmal (z. B. beim Programmstart) geschehen, ebenso das Freigeben der Vokabelliste.

DieDolly 17. Nov 2018 13:37

AW: Elemente aus TStringList in Laufzeit entfernen
 
Zitat:

So ganz scheint es doch nicht mit "Names" und "ValueFromIndex" zu funktionieren. Ich hab jetzt alles darauf umgeschrieben, bekomme auch keinen Compiler Error aber wieder ein "List Index out of Bounds" Fehler.
Viele Fehler lassen sich schon alleine durch ordentliches Einrücken und respektieren des Delphi Styleguides auffinden.

KetchUp 17. Nov 2018 13:40

AW: Elemente aus TStringList in Laufzeit entfernen
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1418301)
Woher kommt WordCount, das darf maximal Vocabulary.Count - 1 sein.

WordCount wird unter "FormCreate" auf 3 Festgelegt (nur zum testen). Es sind auch genau 3 Vokabeln in der TXT-Datei die im Moment so aussieht:

Code:
black=schwarz
red=rot
blue=blau
In FormCreat steht noch folgendes damit die erste Vokabel sofort bei Programmstart angezeigt wird:

Code:
 WordCount:= 3;
 RandomNumber:= random(WordCount);                  

    try
      Vocabulary:= TStringList.Create;                
      Vocabulary.LoadFromFile('Vocabulary.txt');      

      L_UnknownWord.Caption:= Vocabulary.ValueFromIndex[RandomNumber];
      L_CorrectAnswer.Caption:= '';

      finally
      Vocabulary.Free;
    end

Zitat:

Zitat von Delphi.Narium (Beitrag 1418301)
Wenn Du aber erst eine Zufallszahl im Bereich bis WordCount "würfelst", aber WordCount zufällig größer als Vocabulary.Count - 1 ist, kann es sporadisch Fehler geben.

Der Fehler tritt IMMER auf. Das ist ja das Komische.



Zitat:

Zitat von Delphi.Narium (Beitrag 1418301)
Die Vokabeln für jede einzelne Abfrage neu zu laden, halte ich nicht für so eine besonders gute Idee.

Jap, das hab ich mir auch gedacht, ist aber im Moment die einzige Möglichkeit das Programm zum Laufen zu bekommen :oops:

DieDolly 17. Nov 2018 13:50

AW: Elemente aus TStringList in Laufzeit entfernen
 
gelöscht

KetchUp 17. Nov 2018 14:00

AW: Elemente aus TStringList in Laufzeit entfernen
 
[QUOTE=DieDolly;1418306]
Zitat:

Beispielhaft das Record
Delphi-Quellcode:
TVocab = record
 German, English: string;
end;
Beim Laden des Programms erzeugst du für jede Vokabel ein Record und packst sie alle in eine Liste.
Danke für den Tipp, ich hab zwar keine Ahnung von Records, werde mich aber jetzt mal einlesen. :wink:

DieDolly 17. Nov 2018 14:02

AW: Elemente aus TStringList in Laufzeit entfernen
 
Es wird sich lohnen. Das sage ich immer wieder.
Am besten gleich richtig machen denn sonst wirst du deinen Code später hassen.

Stell dir ein Record vor wie eine Kiste für Schrauben. In der Kiste gibt es Fächer für jede Schraubenart. Deine Kiste heißt TVocab (wovon du eine "Instanz" erstellst die dann in die Liste [die Liste ist dein Schrank wo all die Kisten drin sind] kommt) in deine Kiste kann zwei Arten von Schrauben fassen: Deutsche und Englische. Das sind natürlich Strings.

http://www.delphibasics.co.uk/Article.asp?Name=Records
https://stackoverflow.com/questions/...ist-of-records

KetchUp 17. Nov 2018 14:09

AW: Elemente aus TStringList in Laufzeit entfernen
 
Funktioniert das noch mit der TStringList? Denn ich muss die Vokabeln während der Laufzeit entfernen können und jeder Vokabel eine Variable zuordnen können um zu überprüfen, wie oft sie schon richtig eingegeben wurde.

DieDolly 17. Nov 2018 14:12

AW: Elemente aus TStringList in Laufzeit entfernen
 
gelöscht


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr.
Seite 2 von 11     12 34     Letzte »    

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