Einzelnen Beitrag anzeigen

Dejan Vu
(Gast)

n/a Beiträge
 
#11

AW: String auf Tabulatoren prüfen

  Alt 18. Aug 2014, 15:42
Gibt es nur vorne Tabulatoren?
Wenn nicht, dann zehlt das falsch, da du dann ja am ersten anderen Zeichen aufhören müsstest, mit dem Zählen.
Hab ich schon geschrieben.
Zitat:
Und das Zerlegen:
...
* TStringList.DelimitedText
wieso mit Kanonen auf Spatzen? Geht doch so.

Delphi-Quellcode:
Procedure TTreeNodeDescriptor.FromString (aString : String);
const
   TAB = #009;
var
   captionFound,
   valueDelimiterFound: Boolean;
   c : char;

   Function _AddToText(c : Char);
   begin
     if (c=':') and captionFound then
       valueDelimiterFound := true
     else if valueDelimiterFound then
       Value := Value + c
     else
       Caption:=Caption + c;
   end;

Begin
   Level := 0;
   Value := '';
   Caption := '';
   valueDelimiterFound := False;
   captionFound := False;
   for c in aString do
     if captionFound or (c <> TAB) then
       _AddToText(c)
     else
       inc(Level)
end;
So müsste es (ungetestet) gehen, damit nur <TAB> Zeichen am Anfang gezählt werden: Sobald das erste nicht-TAB Zeichen gefunden wird, wird das Zählen beendet. Das Zerlegen des Textes in Caption und Value solle aber auch mit Pos und Splitstring gehen. Aber ich dachte mir: Wenn man schon in einer For-Schleife ist, um die TAB-Zeichen vorne zu zählen, kann man auch gleich durchrennen. Na ja. Man kanns auch sein lassen
Delphi-Quellcode:
Procedure TTreeNodeDescriptor.FromString (aString : String);
const
   TAB = #009;
var
   function GetLevel (Const aString : String) : Integer;
   begin
     for result := 1 to Length(aString) do if aString[Result] <> TAB then exit;
     result := 0;
   end;

Begin
   Level := 0;
   Value := '';
   Caption := '';
   valueDelimiterFound := False;
   captionFound := False;
   Level := GetLevel(aString);
   if Level>0 then Delete(astring,1,Level);
   p := Pos(':', aString);
   if p=0 then Caption := aString
   else begin
     Caption := substring(aString,1,p-1);
     Value := substring(astring,p+1,maxint);
   end
end;
Ungetestet (hab kein Delphi)

Geändert von Dejan Vu (18. Aug 2014 um 15:49 Uhr)
  Mit Zitat antworten Zitat