Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
22. Mai 2019
Du hast offenbar den Algorithmus noch nicht durchschaut. Deswegen erläutere ich das mal:
Zunächst füge ich an der Zielposition eine ausreichende Anzahl Leerzeilen ein:
for I := 0 to ACount - 1 do
lst.Insert(ATargetLine, '');
Dann korrigiere ich den Wert von ASourceLine, falls sich die entsprechenden Zeilen durch das Einfügen nach hinten verschoben haben:
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
22. Mai 2019
Ja, da habe ich eine Inkonsistenz in der Benennung beseitigt: ASourceLine passt doch irgendwie besser zu ATargetLine, oder?
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
22. Mai 2019
Du musst noch beachten, daß sich durch die sl.Delete Anweisungen der effektive Wert von ATargetLine ändern kann - nämlich dann, wenn AStartLine < ATargetLine ist.
Das Insert/Delete ist lediglich abhängig von der Anzahl der Zeilen im Block (hier 30). Mit deinem Vorschlag müssen immer alle Zeilen (80000) angefasst werden.
Hier noch eine alternative Lösung (beachtet auch eventuell...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
21. Mai 2019
Also sowas wie: Verschiebe zehn Zeilen ab Zeile 80 vor die Zeile 40?