Hallo,
Zuerst statt
Delphi-Quelltext
1:
| aStr := #13#10 + aStr; |
lieber
Delphi-Quelltext
Damit es eine richtige Textdatei wird, die nicht mit einer Leerzeile beginnt, was sicher auch nicht Deine Absicht ist.
Wenn du schon so genau beschreibst was Du machen willst hast Du auch schon die Loesung.
Du brauchst einen Puffer (z.B.: array of char oder byte) fuer die Laenge des neuen Strings und ein bisschen Platz fuer Leerzeilen am Ende,( jetzt hoffe ich nicht, Du hast ?zig Leerzeilen )
PufferLaenge = len(astr)+ (2+?zig)*2{#13#10});
setlength(Puffer,PufferLaenge);
PufferLaenge Bytes vom Ende der Datei in den Puffer einlesen.
Jetzt rueckwaerts suchen .
wiederhole
..erst #13 suchen -> Pos13 = yy.
..dann #10 suchen -> Pos10 =xx.
bis yy-xx > 1 UND xx> 00
Falls die Laenge yy-xx = length(astr({ohne #13#10}) dann erst vergleichen
Um einen String daraus zu machen, habe ich aus der gefundenen #13 ein #0 gemacht.
Puffer[Pos13] := #00 oder Puffer[Pos13] := 00
also #13#10BlabLabLa#13#10
wird #13#10BlabLabLa#00#10
nun einen pCHar-Zeiger auf das Zeichen nach dem vorderen #10 hier 'B'
pString : pchar;
pstring := @Puffer[Pos10 +1];
und schon kannst Du mit strcomp einen Vergleich mit dem neuen astr machen
(gelesen - xx) gibt Dir die Anzahl der Bytes an , die Du jetzt deine Datei abschneiden musst. Mit
seek(F,fileSize(F)-(gelesen-xx));
trunc(F);
aStr := astr+#13+#10;
BlockWrite(F, aStr[1], length(aStr));
closefile(f);
ist es dann vollbracht.
Vielleicht funktioniert es
Gruss Horst