Discussion:
Looper Menn
(zu alt für eine Antwort)
Jens Kallup
2020-11-19 02:05:20 UTC
Permalink
Hallo,

ich habe eine Liste folgender Natur:

+ root Level: 10
|
+--- blub1 21
+--- blub2 22
+--- blub3 23
| |
| +--- bla1 31
+--- foo 41
|
+--- foo1 42
+--- foo2 43
...

wie kann ich das am besten rekursiv durchlaufen?
Also nicht als OOP mit Delphi LoadFromFile und so
weiter, rein Pascal ... ?

folgendes liegt bereits vor:

1x der Level der Items sowie der Item-Name.
Soll einfach nur eine Liste durchlaufen, die dann
ein wenig Text ausgibt.

Danke für Antworten
Jens
stefan
2020-11-19 05:34:17 UTC
Permalink
Post by Jens Kallup
Hallo,
+ root                    Level: 10
  |
  +--- blub1                     21
  +--- blub2                     22
  +--- blub3                     23
  |    |
  |    +--- bla1                 31
  +--- foo                       41
       |
       +--- foo1                 42
       +--- foo2                 43
...
wie kann ich das am besten rekursiv durchlaufen?
Also nicht als OOP mit Delphi LoadFromFile und so
weiter, rein Pascal ... ?
1x der Level der Items sowie der Item-Name.
Soll einfach nur eine Liste durchlaufen, die dann
ein wenig Text ausgibt.
Danke für Antworten
Jens
Ich würde in die Liste ein zusätzliches Element als Nummer des Vorfahren
einfügen.

Ich weiss jetzt nicht, wofür du den Level benötigst. Sieht so aus, als
ob die erste Ziffer die Tiefe des Baums angibt. Die bekommt man aber
auch sehr schnell, wenn man sich über die Nummer des Vorfahren bis Root
durchhangelt.
Es gibt dann keine grundsätzliche Beschränkung der Baumtiefe und auch
keine Beschränkung der Anzahl der Zweige innerhalb des Baumes.

Gruß

Stefan
Sieghard Schicktanz
2020-11-19 21:20:26 UTC
Permalink
Hallo Jens,
Post by Jens Kallup
Hallo,
+ root Level: 10
|
+--- blub1 21
+--- blub2 22
+--- blub3 23
| |
| +--- bla1 31
+--- foo 41
|
+--- foo1 42
+--- foo2 43
...
wie kann ich das am besten rekursiv durchlaufen?
Also nicht als OOP mit Delphi LoadFromFile und so
weiter, rein Pascal ... ?
Rekursiv heißt hier effektiv "depth first". Also etwa

PROCEDURE ScanList (Eintrag: ListNode);
BEGIN
// Ggfs. "Eintrag" bearbeiten
WITH Eintrag DO
FOR i:= <erster Unterknoten> TO <letzter Unterknoten> DO
ScanList (<Unterknoten> [i]);
END;

oder, wenn die Unterknoten nicht als Array, sondern als verlinkte Liste
vorliegen

PROCEDURE ScanList (Eintrag: ListNode);
BEGIN
// Ggfs. "Eintrag" bearbeiten
WITH Eintrag DO
WHILE <Unterknoten> <> NIL DO
ScanList (<Unterknoten>^);
END;

Kommt halt darauf an, wie Deine Listenelemente ("Knoten") organisiert sind.
Die Struktur ist ja nicht verfügbar.
Post by Jens Kallup
1x der Level der Items sowie der Item-Name.
Wird nicht gebraucht, ergibt sich automatisch.
Post by Jens Kallup
Soll einfach nur eine Liste durchlaufen, die dann
ein wenig Text ausgibt.
Das wäre das "Eintrag bearbeiten" (das kann auch am Schluß stehen, dann
ändert sich halt die Reihenfolge).
--
--
(Weitergabe von Adressdaten, Telefonnummern u.ä. ohne Zustimmung
nicht gestattet, ebenso Zusendung von Werbung oder ähnlichem)
-----------------------------------------------------------
Mit freundlichen Grüßen, S. Schicktanz
-----------------------------------------------------------
Jens Kallup
2020-11-19 22:29:34 UTC
Permalink
Hallo,

folgendes steht mir zur Verfügung:

CurrentValue : String;
CurrentLevel : Integer;
StringList : String;

StringList ist:

- 0
-- 0 1
-- 0 2
-- 0 3
- 1
-- 1 1
--- 1 1 1
-- 1 2
--- 1 2 1
- 2

Das ist die Struktur.
die minus-Zeichen geben den Level an,
auch an der numerierung zu erkennen

Wie gesagt, es handelt sich hierbei nicht
um ein echtes TStringList gedöns.
Es ist einfach eine Liste, die irgendwie von
den Programm, das ich nutze, erzeugt wird.

Vielleicht könnte man von reverse indent denken?
Lösungen bitte in einfachstes Pascal; Danke.

Gruß, Jens
Sieghard Schicktanz
2020-11-20 20:01:52 UTC
Permalink
Hallo Jens,
Post by Jens Kallup
CurrentValue : String;
CurrentLevel : Integer;
StringList : String;
...
Post by Jens Kallup
Das ist die Struktur.
die minus-Zeichen geben den Level an,
auch an der numerierung zu erkennen
Wie gesagt, es handelt sich hierbei nicht
um ein echtes TStringList gedöns.
Bring' das mal in eine verwertbare Form und wende die Standard-Algorithmen
drauf an, ansonsten ist das witzlos.

...
Post by Jens Kallup
Vielleicht könnte man von reverse indent denken?
Na, dann frag Dein "reverse indent" (was auh immer das sein soll) doh mal.
Post by Jens Kallup
Lösungen bitte in einfachstes Pascal; Danke.
Oder laß' es lieber, wenn Du nicht mit der Programmierung klarkommst.
Oder versuch' mal awk, perl, python oder sowas.
--
--
(Weitergabe von Adressdaten, Telefonnummern u.ä. ohne Zustimmung
nicht gestattet, ebenso Zusendung von Werbung oder ähnlichem)
-----------------------------------------------------------
Mit freundlichen Grüßen, S. Schicktanz
-----------------------------------------------------------
Christian Schmitt
2020-11-23 12:15:10 UTC
Permalink
Post by Jens Kallup
CurrentValue : String;
CurrentLevel : Integer;
StringList : String;
- 0
-- 0 1
-- 0 2
-- 0 3
- 1
-- 1 1
--- 1 1 1
-- 1 2
--- 1 2 1
- 2
Das ist die Struktur.
Hier fängt es jetzt schon an: Mir ist nicht klar, wie deine Struktur wirklich aussieht. Hast du hier ein TList Konstrukt? Oder ein Array von CurrentValue/CurrentLevel/Stringlist? Oder ist deine Stringlist doch ein TStringlist? Oder hängen deine Strings alle aneinander, also Stringlist := '-0--01--02--03-1--...'? Oder sind die einzelnen Zeilen durch einen Zeilenumbruch/Trenner getrennt? Stinglist := '-0'+#10+#13+'--01'+#10+#13+...? Zeig doch mal ein bisschen code, was du bisher so hast...
Post by Jens Kallup
Wie gesagt, es handelt sich hierbei nicht
um ein echtes TStringList gedöns.
Das klingt nicht sehr respektvoll dem Erfinder der TStringlist gegenüber...
Post by Jens Kallup
Es ist einfach eine Liste, die irgendwie von
den Programm, das ich nutze, erzeugt wird.
Und wie liest du diese ein? In welcher Form liegt diese vor? Ich wiederhole mich...
Post by Jens Kallup
Vielleicht könnte man von reverse indent denken?
Vielleicht denken wir erst mal simple forward, mir zumindest ist dein Problem noch nicht klar...
Post by Jens Kallup
Lösungen bitte in einfachstes Pascal; Danke.
Suchst du wirklich eine Lösung? Dann stehe ich dir für 90€/h gerne zur Verfügung. Willst du einen Schubser in die richtige Richtung, den gibts gratis, dann bitte mehr Info. Und nochmal: Zeig doch mal Code, den du bisher hast und vor allem die echte Delphi Struktur die du hast (Jetzt wiederhole ich mich nochmal). Ich für meinen Teil helfe gerne, aber nur wenn ich auch Bemühungen des Gegenüber erkennen kann. Und bei dir wirkt es im Moment so á la "Jetzt schreib mir doch einer mal endlich meinen Code oder muss ich mir wirklich auch noch selbst gedanken machen".
Post by Jens Kallup
Gruß, Jens
Gruß Chris
Jens Kallup
2020-11-23 20:45:39 UTC
Permalink
Schönen Dank Auch,

hab das Problem letztends selbst lösen können.
Hier ein Foto (auf der linken Seite kann man die
Liste sehen, worüber ich Gedanken gemacht habe):

https://imgur.com/G7yDscN

und hier der Code:

https://dpaste.com/FQNWCCTN5

Gruß, Jens

Loading...