Einzelnen Beitrag anzeigen

Benutzerbild von Ajintaro
Ajintaro

Registriert seit: 20. Okt 2004
Ort: Sankt Augustin
138 Beiträge
 
Delphi XE6 Starter
 
#9

AW: String auf Tabulatoren prüfen

  Alt 18. Aug 2014, 15:23
Hallo ihr lieben,

vielen Dank für eure Impulse !

Also
Hier kommt die Hilfe zur Selbsthilfe...

Warum verwendest du keine Zwischenvariablen?
ist natürlich völlig richtig.

Ich habe mir den code von Dejan Vu einmal angesehen und an einigen Stellen modifiziert. Das Ergebnis funktioniert ganz gut:

Delphi-Quellcode:
Type
  TTreeNodeDescriptor = record
    level : Integer;
    Caption : String;
    Value : String;
    Procedure FromString (aString : String);
  end;
{++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// TTreeNodeDescriptor - credits to Dejan Vu
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}

Procedure TTreeNodeDescriptor.FromString (aString : String);
const
  TAB = #009;
var
  valueDelimiterFound: Boolean;
  c:char;
Begin
  Level := 0;
  Value := '';
  Caption := '';
  valueDelimiterFound := False;

  for c in aString do
    case c of
      TAB :
        Inc(Level);
      ':' :
        valueDelimiterFound := true;
      else
        if valueDelimiterFound then
           Value := Value + c
        else
           Caption:=Caption + c;
    end
end;
{++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Datei importieren button
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}

procedure TFmain.button_scen_importClick(Sender: TObject);
var
 line:string;
 t : TTreeNodeDescriptor;
 anode:TTreeNode;
begin
   treeview.Items.Clear;
   if Opendialog1.Execute then memo1.Lines.LoadFromFile(Opendialog1.FileName);

   for line in memo1.lines do
   begin
    t.FromString(line);
    if (t.Caption = '"name"') then
    begin
     case t.level of
      1: anode:=treeview.Items.Add(Nil,t.Value);
      3: begin
           treeview.Items.AddChild(anode,t.Value);
           //Node als knoten für die nächste Ebene vorbereiten?
          end;
      5: treeview.Items.AddChild(anode,t.Value);
     end;
    end;
   end;
End;
So kann man nicht nur den String auf Tabulatoren untersuchen for <achar> in <astring> sondern erhält auch den dazugehörigen Wert. Das Einsortieren in ein Treeview klappt nur noch nicht ganz, da die 3. Ebene 5: treeview.Items.AddChild(anode,t.Value); nicht als Child von der 2. Ebene einsortiert wird.
Jaimy
DAoC 2.0 -> Camelot Unchained !
  Mit Zitat antworten Zitat