Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Looper Menn

8 views
Skip to first unread message

Jens Kallup

unread,
Nov 18, 2020, 9:05:23 PM11/18/20
to
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

unread,
Nov 19, 2020, 12:34:20 AM11/19/20
to
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

unread,
Nov 19, 2020, 4:43:05 PM11/19/20
to
Hallo Jens,

Du schriebst am Thu, 19 Nov 2020 03:05:20 +0100:

> 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 ... ?

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.

> folgendes liegt bereits vor:

> 1x der Level der Items sowie der Item-Name.

Wird nicht gebraucht, ergibt sich automatisch.

> 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

unread,
Nov 19, 2020, 5:29:37 PM11/19/20
to
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

unread,
Nov 20, 2020, 4:13:05 PM11/20/20
to
Hallo Jens,

Du schriebst am Thu, 19 Nov 2020 23:29:34 +0100:

> folgendes steht mir zur Verfügung:
>
> CurrentValue : String;
> CurrentLevel : Integer;
> StringList : String;
>
> StringList ist:
...
> 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.

...
> Vielleicht könnte man von reverse indent denken?

Na, dann frag Dein "reverse indent" (was auh immer das sein soll) doh mal.

> 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.

Christian Schmitt

unread,
Nov 23, 2020, 7:15:11 AM11/23/20
to
Jens Kallup schrieb am Donnerstag, 19. November 2020 um 23:29:37 UTC+1:
> 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.

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...

> Wie gesagt, es handelt sich hierbei nicht
> um ein echtes TStringList gedöns.

Das klingt nicht sehr respektvoll dem Erfinder der TStringlist gegenüber...

> 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...

> Vielleicht könnte man von reverse indent denken?

Vielleicht denken wir erst mal simple forward, mir zumindest ist dein Problem noch nicht klar...

> 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".

> Gruß, Jens
Gruß Chris

Jens Kallup

unread,
Nov 23, 2020, 3:45:43 PM11/23/20
to
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
0 new messages