Stücklisten ordnen

schmidmi

Lt. Commander
Registriert
Feb. 2007
Beiträge
1.823
Ich bekomme von einer Schnittstelle eine Textdatei in der Stücklisten enthalten sind.
Diese möchte ich in Excel aufbereiten.
Leider sind die Listen sortiert nach der Bezeichnung und nicht danach welche Liste in welcher enthalten ist.

Das Ganze sieht vorher zB. so aus:

1. oberste Ebene
1.1 Ebene 1
1.2 Ebene 1
1.2.1 Ebene 2
1.2.1.1 Ebene 3
1.2.1.2 Ebene 3
1.2.2 Ebene 2

usw.

Im Prinzip weiß ich nichts über die Struktur und kann daher auch nicht sagen mit welcher Liste begonnen werden soll.

In der übergebenen Datei sieht es nachher so aus:

1.
keine Unterpositionen
1.1
keine Unterpositionen
1.2
enthält 1.2.1 und 1.2.2
1.2.1
enthält 1.2.1.1 und 1.2.1.2
1.2.1.1
keine Unterpositionen
1.2.1.2
keine Unterpositionen
1.2.2
keine Unterpositionen

Es wird zu jeder Stückliste nur die nächst tiefere Ebene angegeben.

Wie kann ich aus dieser Liste wieder die vorherige Struktur auslesen?
 
Zuletzt bearbeitet:
I dont get it...
denke der Rest hier auch nicht...

Versuch es nochmal zu erklären, vielleicht mit einem anschaulicheren Beispiel...
 
Nehmen wir an man hat einen PC.

Die oberste Ebene ist der PC.
Daruter kommt das Gehäuse und der Bildschirm.
In dem Gehäuse ist ein Board, Festplatten, Laufwerke usw.
Ein Board enthält den Prozessor, Ram usw.

Die Liste die ich erhalte sieht dann so aus:
(sie ist alphabetisch sortiert)

1.Bildschirm
2. Board
3. Festplatte
4. Gehäuse --> Board, Festplatten, Laufwerke
4.1. Board
4.2 Festplatte
4.3. Laufwerk
..
5. Laufwerke
6. PC
6.1 Gehäuse
6.2 Bildschirm

Jetzt will ich automatisiert erkennen das der Bildschirm und das Gehäuse zum PC gehören, das Laufwerk zum Gehäuse usw.

Nachher sollte es dann so aussehen:

1. PC
1.1 Bildschirm
1.2 Gehäuse
1.2.1 Board
1.2.1.1 CPU
1.2.1.2 Ram
1.2.2 Laufwerk
1.2.3 Festplatte

Ist das verständlicher?
 
noch nicht so richtig (aber ich hoffe, ich bin nicht der einzige, der es nicht rafft :D )

Aber folgender Gedanke:
Eigentlich musst du doch die Textdatei einfach nur durchlaufen und dir Objekte anlegen für jedes Element...
Wenn dann ein neues Element kommt, prüfst du, ob das zum alten gehört, wenn ja, ist das ein Unterelement des vorrangegangenen, wenn nein, dann legst du ein neues Element an.

Am Schluss gibst du die Elemente mit ihren Unterelementen (und Unterunterelementen) in der Form in ner neuen Textdatei aus, in der du sie haben möchtest.

Am einfachsten wird wohl ein Struct sein...und davon dann ein Array von Objekten...
 
Am einfachste wär's wohl, wenn du mal eine Beispielliste hochlädst, die so aussieht wie ein Original.

Das, was du in deinen beiden Posts geschrieben hast, unterscheidet sich nämlich "etwas". Je nachdem, wie die Liste tatsächlich vorliegt wird es einfacher oder schwieriger.
 
Die Textdatei enthält leider Preise und Informationen.
Das löschen und verändern würde zu lange deuern oder die Struktur zu sehr beeinträchtigen.

Ich habe das erste Beispiel mal angepasst.
 
Also wenn ich dich richtig verstehe, willst du aus einer mehr oder weniger sortierten Liste die entsprechende Hierarchie extrahieren, du hast nur die Information welche Liste eine "SubListe" von einer anderen Liste ist (Indizes 1,1.1,1.2,1.3,1.3.2 und so weiter)

Aus meiner Sicht kannst du das ganze nur per VBA oder eine andere Programmiersprache lösen. Machbar ist es...

Poste mal 2-5 Beispiel Zeilen aus der Liste, von mir aus, auch ohne die sensiblen Daten... (wichtig ist dabei die Struktur, in deinem ersten Beispiel scheinst du ja "enthält" und "und" ergänzt zu haben.)
 
Zuletzt bearbeitet:
Ich werde morgen mal ein Beispiel suchen und anpassen.
Im Prinzip ist es aber so wie du sagst.
Die Listen stehen in der Datei nach Zahlen geordnet.

Also steht
4711
über 4712
und das über 4713.

Ich kann nicht sagen welche die oberste Stückliste ist, da es sich fast immer unterscheidet.
Die Informationen gibt es nur daher das zu jeder Liste ihre direkte Unterstückliste aufgeführt ist.
Ich muss irgendwie bei denen beginnen die keine Unterstückliste haben und mich dann nach oben vorarbeiten bis die Liste kommt die ganz oben steht.

Aber wie mache ich das effizient?
 
Spontan fallen mir mehrere Wege ein, z.B.
1. Daten in eine Tabelle (relationale Datenbank laden) und mit SQL das oberste Element ermitteln. Ich hab das bei verschiedenen Stammstücklisten schon mal angewendet.
2. Array mit einer Hashtable verknüpfen.
3. Wenn du die gesamte Struktur abbilden willst und nicht nur das oberste Element finden willst, gehen sicher auch Strukturen ähnlich binären Bäumen
4. in .Net würde ich ein TreeView einsetzen.

Worauf ich hinaus will, ist welche Umgebung hast du, welche Sprachen könntest du einsetzen, was sind die Bedingungen...

Über die Effizienz würde ich vielleicht erstmal keinen Gedanken verschwenden, sondern vielmehr sehen was geht und was nicht. Danach läßt sich bei Bedarf das ganze optimieren. Erstmal lösen dann schauen, wie gut/schlecht es geht und später vielleicht optimieren.
 
Einsetzen könnte ich im Prinzip alles.
Ich möchte das Ganze nachher in einer DB (Access oder MS SQL) speichern und bei Bedarf Excelblätter generieren.
VB.Net wäre erstmal mein Favorit.
 
Na dann ... :D

Poste mal paar Zeilen (5 oder mehr), wo mindestens 1 Beziehung, besser 2 oder 3 zu sehen sind. Wenn es geht so nah am Original wie möglich, d.h. ergänze nicht selbst Sachen (ala Kommentare etc., die lenken nur ab!), sondern ersetze nur die sensiblen Daten durch unverfängliche Strings (ABC, DEF ...). Pack das ganze in ein "CODE" Tag, damit möglichst die Struktur unverfälscht bleibt und dann kanns losgehen...
 
Zuletzt bearbeitet:
Die Logik hinter der Liste ist nicht das Problem. Hier gehts nur darum wie die Einträge in der Liste aussehen, sprich was als Trennzeichen verwendet wurde, in welcher Reihenfolge die "Spalten"/"Felder" sind und wie die Verknüpfung zum überliegenden Element gestaltet ist. Der Rest ist mehr als ausreichend in diesem Thread dokumentiert.
 
Ich kann leider zur Zeit keine Liste posten da ich krank im Bett liege.
Werde sie aber einstellen sobald es geht.
 
Dann wünsche ich erstmal gute Besserung, hoffe das es nicht die "super gefährliche" Schweinegrippe ist...
 
Zurück
Oben