HotTip: Sortierung von Feldgruppen nach Teil-Elementen (Spalten)

11. November 2008 | Von | Kategorie: Tools, Hot-Tips

Artikel HotTip der NEWSolutions: Die folgenden Adress-Informationen wurden in einer Feldgruppe gespeichert. Diese Informationen sollen nach jeder Spalte sortiert werden können. Weiterhin soll es möglich sein in den einzelnen Spalten mit einem Lookup-Befehl gezielt nach einzelnen Werten zu suchen.

Birgitta Hauser

Die folgenden Adress-Informationen wurden in einer Feldgruppe gespeichert.


     Name              Strasse           Land PLZ     Ort
     EDV Beratung      Am Berg 47        DE   88214   Ravensburg
     A&A Friedmann     Hauptstr 70       DE   42781   Haan
     L + P             CARL-ZEISS-STR.   DE   63755   ALZENAU
     abc-Nachhilfe     Tullastr 47       DE   75237   KARLSRUHE
     Mike's Kneipe     Sandstr.128       DE   12623   BERLIN
     Biggi's Lädle     Alexandrastr 9    DE   12623   Berlin
     Meier & Co        Birkenweg 2-8     DE   75125   Karlsruhe
     edv consulting    spandauer str.4   DE   10559   berlin
     Erwin Müller KG   Industriestr.23   DE   63755   Alzenau
     Berger & Sohn     Waldstr. 97       DE   88214   RAVENSBURG

au2_look_IMG_0019_Z_nf_oDiese Informationen sollen nach jeder Spalte sortiert werden können. Weiterhin soll es möglich sein in den einzelnen Spalten mit einem Lookup-Befehl gezielt nach einzelnen Werten zu suchen.

Es stellt sich nun die Frage, wie kann diese Aufgabe am einfachsten gelöst werden?

  • Definition der Feldgruppe
    Die Feldgruppe wird als Datenstruktur-Unterfeld angelegt. Die einzelnen Spalten sind ebenfalls Datenstruktur-Unterfelder, die die Feldgruppe überlagern. Durch die Überlagerung werden die Datenstruktur-Unter-Felder automatisch als Feldgruppen definiert.

    
         D                 DS
         D Adresse                             Dim(10)
         D   Name                              Overlay(Adresse)        like(AdName)
         D   Strasse                           Overlay(Adresse: *Next) like(AdStr)
         D   Land                              Overlay(Adresse: *Next) like(AdLand)
         D   PLZ                               Overlay(Adresse: *Next) like(AdPLZ)
         D   Ort                               Overlay(Adresse: *Next) like(AdOrt)
    
  • Verwendung der Datenstruktur-Feldgruppen-Elemente
    Die Feldgruppen-Elemente, der Spalten, können direkt angesprochen werden.

      
          /Free
             Name(1)    = 'Egon Meier KG';
             Strasse(1) = 'Waldstrasse 22';
    
             If Land(Index) = Land(Index + 1);
             EndIf
    
             For Index=1 to %Elem(PLZ);
                 Dsply PLZ(Index);
             EndFor;
          /End-Free
    
  • Sortierung der Feldgruppe nach Spalten
    Beim Sortieren nach einzelnen Spalten wird nicht nur diese Spalte neu angeordnet, sondern die komplette Datenstruktur.
    
          /Free
             SortA Adresse;  //Sortierung nach Name
             SortA PLZ;      //Sortierung der Feldgruppe Adresse nach Postleitzahl
             SortA Ort;      //Sortierung der Feldgruppe Adresse nach Ort
          /End-Free
    
  • Lookup
    Mit LOOKUP können nur gleiche Elemente verglichen werden. Die anderen Vergleichsoperationen (>, >=, <, <=) erfordern sortierte Feldgruppen, d.h. das Schlüssel-Wort ASCEND oder DESCEND muß in den D-Bestimmungen bei der Feldgruppen-Definition angegeben werden. Diese Schlüssel-Wörter sind bei Feldgruppen-Unterfeldern nicht zulässig.

    
          /Free
             Monitor;
                Dsply Adresse(%Lookup('Karlsruhe': ORT));
             On-Error;
                Dsply 'Nicht gefunden';
             EndMon;
          /End-Free
    
  • Sortierung unabhängig von Gross- und Kleinschreibung
    Die Sortierreihenfolge und Sprachen-Id kann entweder

    • beim Compilieren (CRTRPGMOD / CRTBNDRPG) oder
    • in den H-Bestimmungen (Schlüssel-Wörter SRTSEQ und LANGID) angegeben werden.

    Angaben in den H-Bestimmungen werden durch die Compile-Parameter nicht überschrieben. Unterlassungs-Werte:
    Sortierreihenfolge: *HEX
    Sprachen-Id: *JOBRUN
    Sortierreihenfolge:
    Bei Sortierreihenfolge *HEX wird keine Sortierfolgetabelle verwendet.
    Bei Sortierreihenfolge *LANGIDSHR wird eine Tabelle mit gleicher Wertigkeit verwendet, d.h. das gleiche Wort wird unabhängig von Gross- oder Kleinschreibung gleich bewertet.
    Bei Sortierreihenfolge *LANGIDUNQ wird eine Tabelle mit Zeichen unterschiedlicher Wertigkeit verwendet, d.h. gleiche Wort wird in Gross-Buchstaben anders bewertet als in Kleinbuchstaben.
    Bei Sortierreihenfolge *JOB wird die Sortierreihenfolge des Jobs zur Compile-Zeit verwendet.
    Bei Sortierreihenfolge *JOBRUN wird die Sortierreihenfolge des Jobs zur Laufzeit verwendet.
    Die Auswahl der korrekten Sortierfolgetabelle erfolgt in Verbindung mit angegebenen Sprachen-Id. Schlüssel-Wort ALTSEQ: Das Schlüssel-Wort ALTSEQ gibt an, ob eine alternative Sortierreihenfolge verwendet wird. Wenn ja, ob die Definition innerhalb der Quelle oder extern erfolgt.

    
          H SrtSeq(*LangIdShr) LangId(*JobRun) AltSeq(*Ext)
    

Diese Art der Sortierung von Teil-Elementen einer Feldgruppe ist nicht möglich für:
Qualifizierte Datenstrukturen

  • Datenstrukturen, die als Feldgruppen definiert werden
  • Datenstrukturen, die über Schlüssel-Wort LIKEDS definiert werden

Verwendung
Sortierung von Subfiles nach jedem angezeigten Feld.

Beim Füllen der Subfile werden alle Felder des Subfile-Satzes in die Feldgruppe geladen.

Bei einer anderen Sortierreihenfolge wird die Feldgruppe sortiert und die Subfile aus der Feldgruppe neu gefüllt.

Die Subfile sollte komplett geladen sein, da bei einer Umsortierung u.U. nicht alle Sätze angezeigt werden.

Schlagworte: , , , , , , , , , , , , , , , , , ,

Schreibe einen Kommentar

Sie müssen eingeloggt sein, um einen Kommentar schreiben.