Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Pfade in TStrings abbilden... (https://www.delphipraxis.net/128742-pfade-tstrings-abbilden.html)

cherry 5. Feb 2009 06:39


Pfade in TStrings abbilden...
 
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? :cat:

Muetze1 5. Feb 2009 07:46

Re: Pfade in TStrings abbilden...
 
Schau dir mal Delphi-Referenz durchsuchenTStringList.StrictDelimiter, Delphi-Referenz durchsuchenTStringList.DelimitedText und Delphi-Referenz durchsuchenTStrings.Sort() an.

cherry 5. Feb 2009 07:50

Re: Pfade in TStrings abbilden...
 
Zitat:

Zitat von Muetze1

Ich wüsste nicht in wiefern mir das helfen sollte?!

Union 5. Feb 2009 08:01

Re: Pfade in TStrings abbilden...
 
Und Delphi-Referenz durchsuchenTStringlist.CustomSort wäre auch nicht schlecht.
Zitat:

Zitat von Cherry
Ich wüsste nicht in wiefern mir das helfen sollte?!

Hast Du es Dir denn angeschaut?

cherry 5. Feb 2009 08:44

Re: Pfade in TStrings abbilden...
 
Zitat:

Zitat von Union
Und Delphi-Referenz durchsuchenTStringlist.CustomSort wäre auch nicht schlecht.

Naja bist du dir wirklich sicher das das mit custom sort funktioniert, oder kommt das so aus der hüfte?
Denn das problem ist schon komplizierter als es auf den ersten Blick erscheint. Ich habe schon etliche Stunden damit verbracht.

Denn Ich habe ja kaum anhaltspünkte um Einträge zu vergleichen, die Reihenfolge soll ja erstmal so bleiben wie sie ist, nur die Struktur soll korrekt dargestellt werden.

Vielleicht kannst du mit ein Beispiel geben wie das mit custom sort funktionieren könnte ?!
ich bin nähmlich langsam am Ende meines Lateins...

himitsu 5. Feb 2009 09:22

Re: Pfade in TStrings abbilden...
 
Im Prinzip brauchst du doch die Strings einfach nur CaseInsensitiv (zur Sicherheit) alphabetisch sortieren.

cherry 5. Feb 2009 09:23

Re: Pfade in TStrings abbilden...
 
Zitat:

Zitat von himitsu
Im Prinzip brauchst du doch die Strings einfach nur CaseInsensitiv (zur Sicherheit) alphabetisch sortieren.

Eben nicht! Ich will sie in der Reihenfolge wie sie kommen, nur der Struktur entsprechend!
siehe "Original Liste" und "so sollte es am Schluss ausschauen Liste" !

TBx 5. Feb 2009 09:38

Re: Pfade in TStrings abbilden...
 
@TE: Wenn ich dich jetzt richtig verstehe, möchtest Du, dass alle Verzeichnisse von Ebene A aufgelistet werden und unter diese alle Verzeichnisse der ebene B einsortiert werden, ohne dass die Reihenfolge vertauscht wird.
Ist das soweit richtig?


Gruß
Thomas

cherry 5. Feb 2009 09:43

Re: Pfade in TStrings abbilden...
 
genau das meine ich...

himitsu 5. Feb 2009 09:45

Re: Pfade in TStrings abbilden...
 
können die Unterverzeichnisse wenigstens Alphabetisch sortiert sein, bzw. können die sogar in 'ner anderen womöglich anders "sortierten" Reinfolge sein, oder müssen die auch in ihrer
Reinfolge bleiben?

wenn die Unterverzeichnisse auch in ihrer Reinfolge bleiben sollen,
dann wär's wohl am Einfachsten das Ganze in 'nen Baum zu zerlegen und danach neu wieder zusammenzusetzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:30 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz