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
Seite 1 von 2  1 2      
DieDolly

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

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 16. Nov 2018, 17:13
Zitat:
Danke, ich wusste das die Liste mit 0 beginnt aber das mit dem Count-1 muss ich mir noch mal anschauen.
Beispieliste
Zitat:
A
B
C
D
Code:
[0] => A

Count-1 => D
Count ergebe hier 4. Um auf das vierte Item zuzugreifen, muss man aber [3] nutzen (weil die Liste null-basiert ist, erstes Item 0, zweites 1 usw.).

Tipp am Rande: wenn dein Lehrer anfängt Arrays zu deklarieren wie test: array[1 .. 19] dann ignorier das am besten. Diese verfluchten 1-basierten Deklarationen erzeugen nur Probleme früher oder später.
  Mit Zitat antworten Zitat
Delphi.Narium

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

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 16. Nov 2018, 17:54
'ne Stringliste ist eigentlich schon geeignet.

Wenn man eine Datei hat, in der die Vokabeln in dieser Form stehen:
Code:
englisch=deutsch
House=Haus
Car=Auto
so kann man mit
Delphi-Quellcode:
EnglischeVokabel := VokabelStringliste.Names[RandomNumer];
DeutschVokabel := VokabelStringliste.ValueFromIndex(RandomNumber);
den Inhalt abfragen, ohne dass man dabei dann zwei Dateien parallel pflegen muss.

Die Pflege kann man im Programm recht leicht mit 'nem TValueListEditor realisieren. Der dürfte irgendwo in der Komponentenpalette zu finden sein.
  Mit Zitat antworten Zitat
KetchUp

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

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 16. Nov 2018, 18:13
Count ergebe hier 4. Um auf das vierte Item zuzugreifen, muss man aber [3] nutzen (weil die Liste null-basiert ist, erstes Item 0, zweites 1 usw.).
Danke, jetzt hab ich das auch verstanden

so kann man mit
Delphi-Quellcode:
EnglischeVokabel := VokabelStringliste.Names[RandomNumer];
DeutschVokabel := VokabelStringliste.ValueFromIndex(RandomNumber);
Danke das funktinoniert super. Aber warum weiß Delphi bei ".Names" das ich den Text vor dem "=" haben will und bei ".ValueFromIndex" den Text dahinter?
  Mit Zitat antworten Zitat
DieDolly

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

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 16. Nov 2018, 18:21
Zitat:
Aber warum weiß Delphi bei ".Names" das ich den Text vor dem "=" haben will und bei ".ValueFromIndex" den Text dahinter?
Das sagen doch schon die Zugriffe. Mit Names greift man auf den Namen zu (das vor dem =) und Value ist das nach dem =.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.598 Beiträge
 
Delphi 7 Professional
 
#5

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 16. Nov 2018, 18:51
Danke das funktinoniert super. Aber warum weiß Delphi bei ".Names" das ich den Text vor dem "=" haben will und bei ".ValueFromIndex" den Text dahinter?
Das stammt noch aus den Windowsanfangszeiten, als Konfigurationen (fast ausschließlich) in INI-Dateien gespeichert wurden.

INI-Dateien bestehen aus Bereichen und Werteparen:
Code:
[BereichMitBeliebigemEindeutigemNamen]
Name1=Wert1
Name2=Wert2
Name3=Wert3
[EnglischDeutsch]
Car=Auto
House=Haus
Delphi=Delphi
[DeutschEnglisch]
Auto=Car
Haus=House
Delphi=Delphi
[WeiterSprachpaareMoeglich]
...=...
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)).

Und das ist ein "Wissen", was man Delphi schon von Anfang an beigebracht hat und heute immernoch nutzen kann, um mit wenig Aufwand 'nen Vokabeltrainer zu schreiben
  Mit Zitat antworten Zitat
KetchUp

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

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 16. Nov 2018, 20:06
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.
  Mit Zitat antworten Zitat
KetchUp

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

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 17. Nov 2018, 13:01
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?

Geändert von KetchUp (17. Nov 2018 um 13:14 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.598 Beiträge
 
Delphi 7 Professional
 
#8

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 17. Nov 2018, 13:19
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.

  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.
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
989 Beiträge
 
Delphi 6 Professional
 
#9

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 17. Nov 2018, 15:55
Hmm..

Delphi-Quellcode:
Begin
      Input:= E_UserGuess.Text;
      E_UserGuess.Text:= '';

// Hier greifst Du auf Vocabulary zu. Wann wurde dort etwas reingeladen?
      Answer:=AnsiCompareStr(Vocabulary.Names[RandomNumber], Input);

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

          try
// Hier wird Vocabulary 'Überschreiben'
            Vocabulary:= TStringList.Create;
            Vocabulary.LoadFromFile('Vocabulary.txt');
            L_UnknownWord.Caption:= Vocabulary.ValueFromIndex[RandomNumber];
            finally
// Hier wird Vocabulary 'weggeschmissen
            Vocabulary.Free;
          end;

    end

Siehe meine Kommentare..

Woher kommt beim ersten Zugriff auf Vocabulary der Inhalt und was meinst Du passiert beim nächsten Zugriff auf Vocabulary?
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.458 Beiträge
 
Delphi 12 Athens
 
#10

AW: Elemente aus TStringList in Laufzeit entfernen

  Alt 18. Nov 2018, 12:03
Hallöle...
Zitat:
Hallo, ich will als Schulprojekt einen Vokabeltrainer erstellen
...soweit so gut. Aber dein Lehrer kommt mit Sicherheit aus der guten alten TurboPascal Zeit.

Ich tippe darauf, weil z.B. die Bezeichner nicht dem aktuellem Standard entsprechen. Letztendlich ist es jedem seine Entscheidung wie man es macht...mein Tipp wäre aber, dich von Anfang an an dem offiziellen Styleguide zu orientieren.
http://edn.embarcadero.com/article/10280
oder in deutsch
https://www.delphi-treff.de/object-pascal/styleguide/

[meine Meinung]
Was mich stört:
* Groß/Kleinschreibung der Bezeichner
* leilweise nicht sprechende Namen jpg besser ImageAnswer ...auch Form1 kann anders heißen
* Unterstriche in den Namen in Verbindung des Types des Controls L_CorrectAnswer -> besser lblCorrectAnswer
* kein korrektes try/finally
* Vergleiche auf TRUE ... kann in die Hose gehen https://www.detlef-heibing.de/progra...onstanten.html
* globale Variablen
[/meine Meinung]

Wenn man schon am Lernen ist, dann aber richtig...

Geändert von haentschman (18. Nov 2018 um 12:15 Uhr)
  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 19:28 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