So funktioniert es bei mir. Alle Leerzeichen werden auch richtig gesetzt. Anders schaffe ich das nicht. Und selbst dann ist es n9icht zuverlässig.
Ich möchte ja keine Zeilen vertauschen sondern nur einen Block von oben irgendwo ganz nach unten verschieben.
Delphi-Quellcode:
var
sl, slTemp: TStringList;
i, LineStart, LineEnd, LineTarget: Integer;
begin
sl := TStringList.Create;
slTemp := TStringList.Create;
try
sl.Add('0 [');
sl.Add('1');
sl.Add('2');
sl.Add('3');
sl.Add('4');
sl.Add(']');
sl.Add('');
sl.Add('5 [');
sl.Add('6');
sl.Add('7');
sl.Add('8');
sl.Add('9');
sl.Add(']');
sl.Add('');
sl.Add('10 [');
sl.Add('11');
sl.Add('12');
sl.Add('13');
sl.Add('14');
sl.Add(']');
sl.Add('');
sl.Add('15 {');
sl.Add('16');
sl.Add('17');
sl.Add('18');
sl.Add('19');
sl.Add('}');
// hier hin soll die 5-9
sl.Add('');
sl.Add('A');
sl.Add('B');
sl.Add('C');
LineStart := sl.IndexOf('0 [');
for i := LineStart to sl.Count - 1 do
begin
if sl.Strings[i] = ']' then
begin
LineEnd := i + 2;
Break;
end;
end;
LineTarget := sl.IndexOf('15 [');
for i := LineTarget to sl.Count - 1 do
begin
if sl.Strings[i] = ']' then
begin
LineTarget := i + 2;
Break;
end;
end;
sl.SaveToFile('output1.txt');
VerschiebeZeilen(sl, LineStart, LineEnd, LineTarget);
sl.SaveToFile('output2.txt');
finally
slTemp.Free;
sl.Free;
end;
end;