Announcement

Collapse
No announcement yet.

zyklische (rekursion) ermitteln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • zyklische (rekursion) ermitteln

    Hallo,

    ich soll Daten auf zyklischer Ersetzungen prüfen. Kurz zur Erklärung: Ich bekomme eine Datei in der Artikelersetzungen aufgezeichnet werden.
    Diese lese ich in eine Tabelle ein die aus zwei Felder besteht - AlteTeilenummer und NeueTeilenummer.

    z.B. Teilenummer 123 wird zu 345 ...

    Nun ist es häufig so, dass die neue Teilenummer irgendwann wieder zu einer der Alten wird; und genau diese Datensätze möchte ich herausfiltern. Dabei kann es bis zu zehn Ersetzungsschritte geben.

    Für Tipps wäre ich sehr dankbar.

    Heiko

  • #2
    Hallo!<br>
    Wenn Du die Tabelle z.B. als Paradox etc. hasst kannst Du Sie abscannen. Hier helfen die Funktionen setfilter und locate (beide sind in der Delphi HIlfe dokumentiert) um die "nachfolgenden" Artikelnummern zu finden.<br>
    Wenn die Daten auf einem SQL Server vorliegen solltest Du das nachverfolgen der Artikelnummern per SQL Befehlen realisieren.<br>
    <br>
    Wenn Dir das nicht hilft: Bitte etwas mehr Input welche Datenbank, welche Zugriffsart auf die Daten...
    <br>
    BYE BERN

    Comment


    • #3
      Hallo Bernd,

      ich benuzte einen ADS Server (Advantage Database S.) als Datenbank und greife über ein eigenes Dataset zu.

      Das mit den Findkey und Locate ist schon klar, das klappt auch gut und schnell; allerdings nur, wenn sich ein Teil nur EINMAL ersetzt.

      Habe ich eine Ersetzngskette ( 1 wird zu 2. 2 zu 3, 3 zu 4 und 4 wieder zu 2 [...]) wird es für mich problematisch.

      Noch Tipps??

      Heik

      Comment


      • #4
        Hallo!<br>
        Ahhh. Das Problem ist die Rekursion an sich oder?<br>
        Du brauchst:<br>
        Eine globale Variable für den Pfad (Artikelersetzungen) eine TStringlist ist da brauchbar (Variable sei mal MyList genannt)<br>
        Zum zweiten eine Funktion (Der Code ist nicht geprüft sondern nur hier mal so hingetippt)<br>
        function SucheRekusiveErsetzung ( Artikelnummer : String ) : boolean<br>
        if mylist.indexof ( Artikelnummer ) <> -1 then begin<br>
        result := true;<br>
        exit;<br>
        end<br>
        if locate ( Artikelnummer ) then begin<br>
        MyList.add ( Artikelnummer );<br>
        Artikelnummer = datensatz.neueArtikelnummer<br>
        result := SucheRekursiveErsetzung ( Artikelnummer )<br>
        end<br>
        else begin<br>
        result := false;<br>
        end<br>
        end<br>
        <br>
        Nach jedem Aufruf muß MyList.clear aufgerufen werden.<br>
        BYE BERN

        Comment

        Working...
        X