![]() |
AW: Bestimmte Zeile via TStringList löschen
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var td1,td2,td3,td4,td5:textfile; s,s2,s3,fr,abfrage,abfrage2,belub,belub2:string; i,i2,i3,i4,n,n2,azf,azr,num,g1:integer;pro,pro2:real;list,list2:Tstringlist; begin num:=0; n:=0; azr:=0; azf:=0; AssignFile(td1,'C:\Users\Florian\Desktop\Delphidateien\Vokabeln-Auslesen\lateinvok.txt'); Reset(td1); AssignFile(td2,'C:\Users\Florian\Desktop\Delphidateien\Vokabeln-Auslesen\deutschvok.txt'); reset(td2); AssignFile(td3,'C:\Users\Florian\Desktop\Delphidateien\Vokabeln-Auslesen\unsicherevoklat.txt'); reset(td3); AssignFile(td4,'C:\Users\Florian\Desktop\Delphidateien\Vokabeln-Auslesen\unsicherevokdeutsch.txt'); reset(td4); while not eof(td1) do begin // Zeilenzählen ReadLn(td1); n:=n+1; end; reset(td1); reset(td2); randomize; //Showmessage(IntToStr(n)); //Zeilenausgabe n2:=StrToInt(inputbox('Anzahl','Anzahl der Durchläufe?','10')); for i:=1 to n2 do begin for i2:=0 to (random(n-1)+1) do begin ReadLn(td1,s); ReadLn(td2,fr); randomize; end; Reset(td1); Reset(td2); abfrage:=inputbox('Vokabelabfrage',s,''); //Abfrage if (uppercase(fr)=uppercase(abfrage)) then begin //Überprüfung showmessage('Richtig!'); inc(azr); end else if (uppercase(fr)<>uppercase(abfrage)) then begin inc(azf); showmessage('Falsch. Es wäre "'+ fr + '" gewesen und nicht '+ abfrage + '.'); append(td3); writeln(td3,s); CloseFile(td3); append(td4); writeln(td4,fr); CloseFile(td4); end; end; //showmessage(IntToStr(random(n-1)+1)); // Letzten Zufallswert ausgeben //Showmessage(s); //Showmessage(fr); belub:='Richtig: '+IntToStr(azr) +chr(13)+'Falsch: '+ IntToStr(azf)+chr(13); belub2:='Endübersicht'; pro:=n2/100; pro2:=azr/pro; Showmessage(belub+'Das sind also '+(FloatToStr(pro2))+'% richtig.'); ShowMessage('Jetzt die Falschen wiederholen!'); reset(td3); while not eof(td3) do begin // Zeilenzählen ReadLn(td3); num:=num+1; end; reset(td3); reset(td4); List:=TStringList.create; List.LoadFromFile('C:\Users\Florian\Desktop\Delphidateien\Vokabeln-Auslesen\unsicherevoklat.txt'); List2:=TStringList.create; List2.LoadFromFile('C:\Users\Florian\Desktop\Delphidateien\Vokabeln-Auslesen\unsicherevokdeutsch.txt'); for i3:=0 to num-1 do begin ReadLn(td3,s2); ReadLn(td4,s3); abfrage2:=inputbox('Wiederholung',s2,''); if (uppercase(abfrage2)=uppercase(s3)) then begin showmessage('Richtig!'); list.delete(1); list.savetofile('C:\Users\Florian\Desktop\Delphidateien\Vokabeln-Auslesen\unsicherevoklat.txt'); list.free; end else if (uppercase(abfrage2)<>uppercase(s3)) then begin showmessage('Falsch!'); end; end; end; end. |
AW: Bestimmte Zeile via TStringList löschen
Könnt ihr nicht einfach die Lösung sagen? Versteh nicht was das bringen soll, helfen tut ihm das sicher nicht!
Natürlich nicht mit List.Free, dadurch löscht du komplett die Liste! Dein Problem ist eigentlich ganz einfach, so wie du es jetzt machst verschiebt sich der Index dadurch dass du eine Zeile löscht und daher erscheint diese Fehlermeldung! Lösung ist, du gehst die Liste von Oben nach Unten durch und löscht die Zeile, bzw. du suchst die Zeile und löscht sie (ohne Schleife) Schleife:
Delphi-Quellcode:
oder (in dem Fall besser!) ohne Schleife:
List:=TStringList.create;
List.LoadFromFile('C:\Users\Florian\Desktop\Delphidateien\Vokabeln-Auslesen\unsicherevoklat.txt'); for i3:= num-1 DOWNto 0 do begin ReadLn(td3,s2); ReadLn(td4,s3); abfrage2:=inputbox('Wiederholung',s2,''); if (uppercase(abfrage2)=uppercase(s3)) then begin showmessage('Richtig!'); list.Delete(i3); list.savetofile('C:\Users\Florian\Desktop\Delphidateien\Vokabeln-Auslesen\unsicherevoklat.txt'); list.Free; //Hier end;
Delphi-Quellcode:
lg
List := TstringList.create();
List.LoadFromFile(FileName); .... if ( Richtig ) then begin List.Delete( List.IndexOF(Vokabel) ); List.SaveToFile(FileName); //Hier List.Free; end; |
AW: Bestimmte Zeile via TStringList löschen
Liste der Anhänge anzeigen (Anzahl: 1)
Vielen Dank schonmal, nur leider kommt immer noch eine Fehlermeldung :oops:
Delphi-Quellcode:
for i3:=num downto 0 do begin
ReadLn(td3,s2); ReadLn(td4,s3); abfrage2:=inputbox('Wiederholung',s2,''); if (uppercase(abfrage2)=uppercase(s3)) then begin showmessage('Richtig!'); List.Delete( List.IndexOF(s3) ); List.SaveToFile('C:\Users\Florian\Desktop\Delphidateien\Vokabeln-Auslesen\unsicherevoklat.txt'); list.free; end else if (uppercase(abfrage2)<>uppercase(s3)) then begin showmessage('Falsch!'); end; |
AW: Bestimmte Zeile via TStringList löschen
@ IceBub -Schau mal das Posting #3 dieses Threads an und geh mal in dich ;-)
@Flopa - du selbst öffnest die Datei per Reset nochmal...
Delphi-Quellcode:
und das gleich zweimal nacheinander und ein Closefile folgt nicht... Ich würde dir empfehlen Reset, Closefile und Konsorten bei so was unter den Tisch fallen lassen und alles mit TStringList umzusetzen.
pro2:=azr/pro;
Showmessage(belub+'Das sind also '+(FloatToStr(pro2))+'% richtig.'); ShowMessage('Jetzt die Falschen wiederholen!'); reset(td3); //************* hier while not eof(td3) do begin // Zeilenzählen ReadLn(td3); num:=num+1; end; reset(td3); //************* und hier nochmal reset(td4); List:=TStringList.create; List.LoadFromFile('C:\Users\Florian\Desktop\Delphidateien\Vokabeln-Auslesen\unsicherevoklat.txt'); List2:=TStringList.create; List2.LoadFromFile('C:\Users\Florian\Desktop\Delphidateien\Vokabeln-Auslesen\unsicherevokdeutsch.txt'); for i3:=0 to num-1 do begin ReadLn(td3,s2); ReadLn(td4,s3); abfrage2:=inputbox('Wiederholung',s2,''); if (uppercase(abfrage2)=uppercase(s3)) then begin showmessage('Richtig!'); list.delete(1); list.savetofile('C:\Users\Florian\Desktop\Delphidateien\Vokabeln-Auslesen\unsicherevoklat.txt'); list.free; end else if (uppercase(abfrage2)<>uppercase(s3)) then begin showmessage('Falsch!'); end; end; end; Grüße |
AW: Bestimmte Zeile via TStringList löschen
Zitat:
GRüße |
AW: Bestimmte Zeile via TStringList löschen
Es wird -1 zurückgeliefert. Aber warum findet er s3 nicht in der Datei, die Vokabel steht doch schließlich in ihr :o
|
AW: Bestimmte Zeile via TStringList löschen
Sorry, aber der Code ist nicht wartbar. Keine gescheite Formatierung des Quellcodes, nichts sagende Variablennamen und alles in einer Prozedur drin. Räume den Code erst mal etwas auf, damit man da auch durchblickt.
|
AW: Bestimmte Zeile via TStringList löschen
hm.. du meinst die steht drin, so wie beim anderen Problem oben, wo niemand anders die Datei offen hat? ;-)
Debug mal zu der Stelle an der der Fehler auftritt. SChau dann nach was in List.Text drin steht. Aber du kannst von einem ausgehen: Wenn da -1 zurück kommt, dann steht der String nicht in der Liste.... |
AW: Bestimmte Zeile via TStringList löschen
Nach langem Rumprobieren klappts es nun.
Sorry, aber ich bin echt neu im Programmieren, nicht kreativ mit Variablennamen und wie man übersichtlich formatiert ist mir auch noch nicht recht klar :P Aber trotzdem vielen Danke euch allen Lg, Flo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:30 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