Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.delphi.misc > #19100 > unrolled thread

Looper Menn

Started byJens Kallup <kallup.jens@web.de>
First post2020-11-19 03:05 +0100
Last post2020-11-23 21:45 +0100
Articles 7 — 4 participants

Back to article view | Back to de.comp.lang.delphi.misc


Contents

  Looper Menn Jens Kallup <kallup.jens@web.de> - 2020-11-19 03:05 +0100
    Re: Looper Menn stefan <adresse@ist.invalid> - 2020-11-19 06:34 +0100
    Re: Looper Menn Sieghard Schicktanz <Sieghard.Schicktanz@SchS.de> - 2020-11-19 22:20 +0100
      Re: Looper Menn Jens Kallup <kallup.jens@web.de> - 2020-11-19 23:29 +0100
        Re: Looper Menn Sieghard Schicktanz <Sieghard.Schicktanz@SchS.de> - 2020-11-20 21:01 +0100
        Re: Looper Menn Christian Schmitt <chrischmi0815@googlemail.com> - 2020-11-23 04:15 -0800
          Re: Looper Menn Jens Kallup <kallup.jens@web.de> - 2020-11-23 21:45 +0100

#19100 — Looper Menn

FromJens Kallup <kallup.jens@web.de>
Date2020-11-19 03:05 +0100
SubjectLooper Menn
Message-ID<i1m271FssfaU1@mid.individual.net>
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

[toc] | [next] | [standalone]


#19101

Fromstefan <adresse@ist.invalid>
Date2020-11-19 06:34 +0100
Message-ID<rp504p$439$1@solani.org>
In reply to#19100
Am 19.11.2020 um 03:05 schrieb Jens Kallup:
> 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

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

[toc] | [prev] | [next] | [standalone]


#19102

FromSieghard Schicktanz <Sieghard.Schicktanz@SchS.de>
Date2020-11-19 22:20 +0100
Message-ID<20201119222026.19337c4a@Achmuehle.WOR>
In reply to#19100
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
-----------------------------------------------------------

[toc] | [prev] | [next] | [standalone]


#19103

FromJens Kallup <kallup.jens@web.de>
Date2020-11-19 23:29 +0100
Message-ID<i1o9ufFbuikU1@mid.individual.net>
In reply to#19102
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

[toc] | [prev] | [next] | [standalone]


#19104

FromSieghard Schicktanz <Sieghard.Schicktanz@SchS.de>
Date2020-11-20 21:01 +0100
Message-ID<20201120210152.48f68352@Achmuehle.WOR>
In reply to#19103
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.

-- 
-- 
(Weitergabe von Adressdaten, Telefonnummern u.ä. ohne Zustimmung
nicht gestattet, ebenso Zusendung von Werbung oder ähnlichem)
-----------------------------------------------------------
Mit freundlichen Grüßen, S. Schicktanz
-----------------------------------------------------------

[toc] | [prev] | [next] | [standalone]


#19105

FromChristian Schmitt <chrischmi0815@googlemail.com>
Date2020-11-23 04:15 -0800
Message-ID<42032578-2d04-44bb-af6a-12e2f29eb733n@googlegroups.com>
In reply to#19103
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

[toc] | [prev] | [next] | [standalone]


#19106

FromJens Kallup <kallup.jens@web.de>
Date2020-11-23 21:45 +0100
Message-ID<i22lblFcnpvU1@mid.individual.net>
In reply to#19105
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

[toc] | [prev] | [standalone]


Back to top | Article view | de.comp.lang.delphi.misc


csiph-web