Einzelnen Beitrag anzeigen

Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Pfade in TStrings abbilden...

  Alt 5. Feb 2009, 06:39
Guten Morgen

Ich habe eine Liste mit Pfaden: z.B.

(Originalliste)
SQL-Code:
GG_OWA-Access
GG_Axioma
GG_Winbau
zz_alle Direktion P\+F
zz_alle Informatikdienste
GG_Vitruviusdaten
RG_PC_Inventar_Daten
GG_AbuWin
GG_IDT_IC
GG_IDT
GG_IDT_IC|GG_SWF-Spec
GG_IDT_IC|RG_IDT_WSUS_Admin
GG_IDT_IC|GG_PEKAUsers
GG_IDT_IC|RG_FV_Matrix
GG_IDT_IC|RG_P_F_Matrix
GG_IDT_IC|GG_WINAG
GG_IDT_IC|RG_FV_Public
GG_IDT_IC|RG_P_F_Public
GG_IDT_IC|GG_FV
GG_IDT_IC|GG_FV|RG_Scan_FV
GG_IDT_IC|GG_FV|RG_FV_Matrix
GG_IDT_IC|GG_FV|RG_P_F_Matrix
GG_IDT_IC|GG_FV|RG_FV_Public
GG_IDT_IC|GG_FV|RG_P_F_Public
GG_IDT_IC|GG_FV|RG_P_F
GG_IDT_IC|RG_P_F
GG_IDT_IC|RG_FV
GG_IDT_IC|RG_IC
GG_IDT_IC|RG_Museumplus
GG_IDT|GG_Mobile-Access
GG_IDT|RG_EVA
GG_IDT|GG_SWF-MM
GG_IDT|GG_Axioma
GG_IDT|RG_Scan_IDT
GG_IDT|GG_rbiAusmass
GG_IDT|RG_rbiAusmass
GG_IDT|GG_Teamviewer
GG_IDT|RG_Balance
GG_IDT|RG_PROJ_ICT-Schulen
GG_IDT|GG_RealAudio-Access
GG_IDT|GG_FTP-Access
GG_IDT|RG_HW_Inventar_Daten
GG_IDT|GG_AbacusUsers
GG_IDT|GG_NestUsers
GG_IDT|RG_FV_Matrix
GG_IDT|RG_P_F_Matrix
GG_IDT|GG_Alle-StadtThun
GG_IDT|RG_PC_Inventar_Daten_R
GG_IDT|RG_Taxme_TBA
GG_IDT|RG_Taxme_SuI
GG_IDT|RG_Taxme_SO
GG_IDT|RG_FV_Public
GG_IDT|RG_P_F_Public
GG_IDT|GG_FV
GG_IDT|GG_FV|RG_Scan_FV
GG_IDT|GG_FV|RG_FV_Matrix
GG_IDT|GG_FV|RG_P_F_Matrix
GG_IDT|GG_FV|RG_FV_Public
GG_IDT|GG_FV|RG_P_F_Public
GG_IDT|GG_FV|RG_P_F
GG_IDT|RG_P_F
GG_IDT|RG_Taxme
GG_IDT|RG_IC_R
GG_IDT|RG_TC_R
GG_IDT|RG_SC_R
GG_IDT|RG_FV
GG_IDT|RG_IDT

Diese versuche ich nun in einer anderen Liste korrekt abzubilden, mit Korrekt meine ich:
Der Eingangsreihenfolge entsprechend, aber mit Korrekter Struktur.
Wie in der oberen Liste entnehmen kann, ist eigentlich nur GG_IDT fehl am Platz. Die zweite Ebene kommt bereits
korrekt daher...

Das Ergebnis sollte aber nun so ausschauen:

(so sollte es am Schluss ausschauen Liste)
SQL-Code:
GG_OWA-Access
GG_Axioma
GG_Winbau
zz_alle Direktion P\+F
zz_alle Informatikdienste
GG_Vitruviusdaten
RG_PC_Inventar_Daten
GG_AbuWin
GG_IDT_IC
GG_IDT_IC|GG_SWF-Spec
GG_IDT_IC|RG_IDT_WSUS_Admin
GG_IDT_IC|GG_PEKAUsers
GG_IDT_IC|RG_FV_Matrix
GG_IDT_IC|RG_P_F_Matrix
GG_IDT_IC|GG_WINAG
GG_IDT_IC|RG_FV_Public
GG_IDT_IC|RG_P_F_Public
GG_IDT_IC|GG_FV
GG_IDT_IC|GG_FV|RG_Scan_FV
GG_IDT_IC|GG_FV|RG_FV_Matrix
GG_IDT_IC|GG_FV|RG_P_F_Matrix
GG_IDT_IC|GG_FV|RG_FV_Public
GG_IDT_IC|GG_FV|RG_P_F_Public
GG_IDT_IC|GG_FV|RG_P_F
GG_IDT_IC|RG_P_F
GG_IDT_IC|RG_FV
GG_IDT_IC|RG_IC
GG_IDT_IC|RG_Museumplus
GG_IDT
GG_IDT|GG_Mobile-Access
GG_IDT|RG_EVA
GG_IDT|GG_SWF-MM
GG_IDT|GG_Axioma
GG_IDT|RG_Scan_IDT
GG_IDT|GG_rbiAusmass
GG_IDT|RG_rbiAusmass
GG_IDT|GG_Teamviewer
GG_IDT|RG_Balance
GG_IDT|RG_PROJ_ICT-Schulen
GG_IDT|GG_RealAudio-Access
GG_IDT|GG_FTP-Access
GG_IDT|RG_HW_Inventar_Daten
GG_IDT|GG_AbacusUsers
GG_IDT|GG_NestUsers
GG_IDT|RG_FV_Matrix
GG_IDT|RG_P_F_Matrix
GG_IDT|GG_Alle-StadtThun
GG_IDT|RG_PC_Inventar_Daten_R
GG_IDT|RG_Taxme_TBA
GG_IDT|RG_Taxme_SuI
GG_IDT|RG_Taxme_SO
GG_IDT|RG_FV_Public
GG_IDT|RG_P_F_Public
GG_IDT|GG_FV
GG_IDT|GG_FV|RG_Scan_FV
GG_IDT|GG_FV|RG_FV_Matrix
GG_IDT|GG_FV|RG_P_F_Matrix
GG_IDT|GG_FV|RG_FV_Public
GG_IDT|GG_FV|RG_P_F_Public
GG_IDT|GG_FV|RG_P_F
GG_IDT|RG_P_F
GG_IDT|RG_Taxme
GG_IDT|RG_IC_R
GG_IDT|RG_TC_R
GG_IDT|RG_SC_R
GG_IDT|RG_FV
GG_IDT|RG_IDT
Ich habs mal mit untenstehendem Code versucht. Lustig ist nur, das jetzt zwar die Erste Ebene stimmt, aber die Zweite Ebene
wird nun strukturell nicht richtig dargestellt.

Delphi-Quellcode:
procedure TForm1.ForceListItems(sliList:TStrings; sliPath: String; sliPathDelim:Char);
var
  sL: TStringList;
  I: Integer;
  index: Integer;
  path: String;
begin
  sL := TStringList.Create;
  try

    path := sliPath;
    // ersetze den delimiter mit einem zeilenumbruch
    for I := 1 to Length(sliPath) do
      if sliPath[i] = sliPathDelim then
        sliPath[i] := #13;
// der pfad lässt sich nun in den einzelnen elementen
// in eine liste schreiben
    sL.Text := sliPath;

    for I := 0 to sL.Count - 1 do
    begin
      if sliList.IndexOf(sL[i]) = -1 then
      begin
        if (index > 0) then
          sliList.Insert(index,path)
        else
          sliList.Add(path);
      end
      else
        index := sliList.IndexOf(sL[i]) + 1;
    end;
  finally
    FreeAndNil(sL);
  end;
end;
Dieser Code führt zu diesem Ergebnis:

SQL-Code:
GG_OWA-Access
GG_Axioma
GG_Winbau
zz_alle Direktion P\+F
zz_alle Informatikdienste
GG_Vitruviusdaten
RG_PC_Inventar_Daten
GG_AbuWin
GG_IDT_IC
GG_IDT_IC|RG_Museumplus
GG_IDT_IC|RG_IC
GG_IDT_IC|RG_FV
GG_IDT_IC|RG_P_F
GG_IDT_IC|GG_FV|RG_P_F
GG_IDT_IC|GG_FV|RG_P_F
GG_IDT_IC|GG_FV|RG_P_F_Public
GG_IDT_IC|GG_FV|RG_P_F_Public
GG_IDT_IC|GG_FV|RG_FV_Public
GG_IDT_IC|GG_FV|RG_FV_Public
GG_IDT_IC|GG_FV|RG_P_F_Matrix
GG_IDT_IC|GG_FV|RG_P_F_Matrix
GG_IDT_IC|GG_FV|RG_FV_Matrix
GG_IDT_IC|GG_FV|RG_FV_Matrix
GG_IDT_IC|GG_FV|RG_Scan_FV
GG_IDT_IC|GG_FV|RG_Scan_FV
GG_IDT_IC|GG_FV
GG_IDT_IC|RG_P_F_Public
GG_IDT_IC|RG_FV_Public
GG_IDT_IC|GG_WINAG
GG_IDT_IC|RG_P_F_Matrix
GG_IDT_IC|RG_FV_Matrix
GG_IDT_IC|GG_PEKAUsers
GG_IDT_IC|RG_IDT_WSUS_Admin
GG_IDT_IC|GG_SWF-Spec
GG_IDT
GG_IDT|RG_IDT
GG_IDT|RG_FV
GG_IDT|RG_SC_R
GG_IDT|RG_TC_R
GG_IDT|RG_IC_R
GG_IDT|RG_Taxme
GG_IDT|RG_P_F
GG_IDT|GG_FV|RG_P_F
GG_IDT|GG_FV|RG_P_F
GG_IDT|GG_FV|RG_P_F_Public
GG_IDT|GG_FV|RG_P_F_Public
GG_IDT|GG_FV|RG_FV_Public
GG_IDT|GG_FV|RG_FV_Public
GG_IDT|GG_FV|RG_P_F_Matrix
GG_IDT|GG_FV|RG_P_F_Matrix
GG_IDT|GG_FV|RG_FV_Matrix
GG_IDT|GG_FV|RG_FV_Matrix
GG_IDT|GG_FV|RG_Scan_FV
GG_IDT|GG_FV|RG_Scan_FV
GG_IDT|GG_FV
GG_IDT|RG_P_F_Public
GG_IDT|RG_FV_Public
GG_IDT|RG_Taxme_SO
GG_IDT|RG_Taxme_SuI
GG_IDT|RG_Taxme_TBA
GG_IDT|RG_PC_Inventar_Daten_R
GG_IDT|GG_Alle-StadtThun
GG_IDT|RG_P_F_Matrix
GG_IDT|RG_FV_Matrix
GG_IDT|GG_NestUsers
GG_IDT|GG_AbacusUsers
GG_IDT|RG_HW_Inventar_Daten
GG_IDT|GG_FTP-Access
GG_IDT|GG_RealAudio-Access
GG_IDT|RG_PROJ_ICT-Schulen
GG_IDT|RG_Balance
GG_IDT|GG_Teamviewer
GG_IDT|RG_rbiAusmass
GG_IDT|GG_rbiAusmass
GG_IDT|RG_Scan_IDT
GG_IDT|GG_SWF-MM
GG_IDT|RG_EVA
GG_IDT|GG_Mobile-Access
Man beachte die Fehler : "GG_IDT_IC|GG_FV" und "GG_IDT|GG_FV" Stehen zu weit unten...

Nun wie modifiziere ich den Code um das gewünschte Ergebnis zu erhalten?
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat