![]() |
Zeilen in einem String zählen
Gefunden habe ich erstmal das:
![]() Das ist so schon ganz fein, allerdings Blick ich den Code noch nicht 100%ig. Ich habe es so umgemodelt:
Delphi-Quellcode:
Das scheint erstmal so zu funktionieren, wie es soll.
function CountStringLines(const S: AnsiString): Integer;
var i, i2, i3, i4: Integer; begin; Result := 0; i := 1; i2 := 1; i3 := 1; while i <= Length(S) do begin if i2 <= i then begin i2 := PosEx(#13, S, i); if i2 = 0 then i2 := Length(S) + 1; end; if i3 <= i then begin i3 := PosEx(#10, S, i); if i3 = 0 then i3 := Length(S) + 1; end; if i2 < i3 then i4 := i2 else i4 := i3; i := i4; if (i <= Length(S)) and (S[i] = #13) Then Inc(i); if (i <= Length(S)) and (S[i] = #10) Then Inc(i); Inc(Result); end; end; Nun ist mein Problem eigenltich nur, ob man es so machen kann wie ich es Umgebaut hab. Nicht das in bestimmten Fällen irgendwas unvorhergesehenes passiert, da ich nicht wirklich weis, was ich da getan hab muss ich zugeben :shock: Vllt kann himitsu ja dazu was genaueres sagen :) |
AW: Zeilen in einem String zählen
Wenn in Deinem String Kein CRLF vorhanden ist, dann bekommt i4 keinen Wert, und das könnte unangenehm werden.
Und ich würde die vielen Is mit etwas aussagekräftigeren Namen versehen. Gruß K-H |
AW: Zeilen in einem String zählen
Mehrere Befehle in einer Zeile sind ja auch nicht der Hit im Bezug auf Lesbarkeit.
|
AW: Zeilen in einem String zählen
[OT]
Du kennst doch bestimmt noch die Zeitungen, die ein komplettes TP-Programm als 4 Zeiler abgedruckt haben? [/OT] Gruß K-H |
AW: Zeilen in einem String zählen
[OT] 1 Kilo Byte? Kenn ich noch :) [/OT]
|
AW: Zeilen in einem String zählen
.. sollte das Problem denn nicht auch mit einer TStringList zu erschlagen sein.
Delphi-Quellcode:
function CountStringLines(const S: AnsiString): Integer;
var sl: TStringList; // nachträglich eingefügt begin result := 0; sl := TStringList.create; try sl.Text := s; result := sl.count; finally sl.free; end; end; |
AW: Zeilen in einem String zählen
Oder den hier
Delphi-Quellcode:
Function CountCRLF (Const aString : String) : Integer;
Var i : Integer; Begin Result := 0; For i:=1 to Length(aString)-1 do if (aString[i]=#13) and (aString[i+1]=#10) then inc(Result); End; |
AW: Zeilen in einem String zählen
Du hast deine Variablendeklaration vergessen, aber notfalls kann man auch die Variable einfach weglassen.
Delphi-Quellcode:
Aber wenn es auf Geschwindigkeit und Speicherverbraucht drauf ankommt, dann geht der Trick mit der Stringliste nicht wirklich,
function CountStringLines(const S: String): Integer;
begin with TStringList.Create do try Text := S; Result := Count; finally Free; end; end; function CountStringLines(const S: String): Integer; begin with TStringList.Create do try Text:=S; Result:=Count; finally Free; end; end; denn da mußt du mit einigen Speicheroperationen (speicher für die Liste und vorallem die Strings reservieren + Freigeben) und dazu ist mit mindestens nochmals 100% des Stringsspeichers zu rechnen. (bei einem TStream als Quelle anstatt einem String, sogar mit locker zusätzlichen 300%)
Delphi-Quellcode:
function CountLines(const S: string): Integer;
var P: PChar; begin if S <> '' then begin Result := 1; P := PChar(S); while P^ <> #0 do begin if P^ = #13 then begin Inc(Result); if (P + 1)^ = #10 then Inc(P); end else if P^ = #10 then Inc(Result); Inc(P); end; end else Result := 0; end; |
AW: Zeilen in einem String zählen
Zitat:
Zitat:
Grüße Klaus |
AW: Zeilen in einem String zählen
Ich persönlich finde es absolut hässlich, auch wenn es unheimlich gut lesbar ist! Es ist, so wie Himitsu es beschrieben hat, zu ressourcenlästig!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:59 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