Leztere zählt nur CRLF (#13#10).
Erstere beachtet #10 (Linux), #13 (Mac) und #13#10 (Windows).
Und sieh zählt korrekt.
- leerer String = keine Zeile / könnte man aber auch als eine Leerzeile betrachten
- kein Zeilenumbruch = 1 Zeile
- 1 Zeilenumbruch = 2 Zeilen
- 2 Zeilenumbrüche = 3 Zeilen
- 3 Zeilenumbrüche = 4 Zeilen
- ...
Und in Bezug auf die #0, gibt es einen Unterschied.
Bei PChar ist dort Schluß, während der Delphi-String theoretisch noch weitergehn könnte.
Direkt als String (ohne PChar):
Delphi-Quellcode:
function CountLines(const aString: string): Integer;
var
i: Integer;
begin
if aString <> '' then begin
Result := 1;
i := 1;
while i <= Length(aString) do
if aString[i] = #13 then begin
Inc(Result);
if (i < Length(aString)) and (aString[i + 1] = #10) then
Inc(i);
end else if aString[i] = #10 then
Inc(Result);
end else
Result := 0;
end;