dynamische interne Tabelle dynamisch sortieren

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

dynamische interne Tabelle dynamisch sortieren

Beitrag von Gast ( / / 0 / 3 ) »
Hallo,

brauche dringend Hilfe. Folgendes Problem:

Ich erzeuge in einem Programm eine interne Tabelle dynamisch. Soweit so gut. Nun möchte ich dieses Tabelle später sortieren anhand der ersten 10 Spalten deren Namen ich ja so nicht kenne - da dynamisch und jedesmal evtl eine andere Struktur hat. Gibt es hier eine Möglichkeit dynamisch zu sortieren. Ich hätte auch noch eine interne Tabelle die die DDIC Feldnamen enthält. Aber irgendwie finde ich keine Lösung.

Danke im Voraus für Eure Hilfe.

Martin

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von Hermann ( / / 0 / 3 ) »
Dynamisch sortieren kann man schon, z.B.:

Code: Alles auswählen.

sort int_tab by ('KEY_FELD1').
Das ist aber auch releaseabhängig.
Man kann sich überlegen, ob vielleicht auch eine sorted table sinnvoll eingesetzt werden kann. Dann wird automatisch sortiert.

Hermann

Beitrag von schuessler (ForumUser / 55 / 0 / 0 ) »
Danke für die Rasche Antwort!
Werde es mal ausprobieren. Gibt es noch eine andere Möglichkeit.

Martin
Gruss

Martin

Beitrag von Hermann ( / / 0 / 3 ) »
Es gibt vielleicht noch eine andere Möglichkeit, die habe ich bisher aber selbst noch nicht ausprobiert.
Man könnte bei einer internen Tabelle mit Kopfzeile vielleicht auch folgendes machen:

Code: Alles auswählen.

assign component 'FELD1' of structure inttab to <feld>.

sort inttab by <feld>.
Das mußt Du aber selbst ausprobieren und damit ein bißchen experimentieren. Wie gesagt, ich habe es selbst noch nicht ausprobiert.

Hermann

Beitrag von Gast ( / / 0 / 3 ) »
Oder mal die F1-Hilfe zu SORT lesen.
Wenn Du sowieso nur nach den ersten 10 Feldern aufsteigend sortieren willst, kannst Du BY ... ganz weglassen.

Beitrag von schuessler (ForumUser / 55 / 0 / 0 ) »
Hallo Gast!

Danke für de informative Hilfe :evil: .

Ich suche baer einer möglichkeit wie ich eine während der Laufzeit dynamisch erzeugte Tabelle sortieren kann deren Feldnamen ich nicht kenne. Ich glaube nicht dass SORT so einfach dies bewältigt.

Bitte in Zukunft qualifizierte Aussagen. Davon lebt so ein Forum.

Danke!
Gruss

Martin

Beitrag von Gast ( / / 0 / 3 ) »
schuessler hat geschrieben:Hallo Gast!

Danke für de informative Hilfe :evil: .
Auf Deiner Tastatur fehlt die F1-Taste?
Bitte in Zukunft qualifizierte Aussagen. Davon lebt so ein Forum.
Jeder blamiert sich eben so gut er kann.

Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) »
schuessler hat geschrieben:Ich glaube nicht dass SORT so einfach dies bewältigt.
Seit wann ist das denn eine Glaubensfrage?

Beitrag von schuessler (ForumUser / 55 / 0 / 0 ) »
Also vielleicht habe ich mich etwas missverständlich ausgedrückt. Ich versuchs nochmal zu erläutern:

Die Tabelle (itab) ist als field-symbol definiert, d.h. ich habe keine Feld-Variable und ich kenne die Struktur der Tabelle nicht, so ist für mich ein fester SORT BY ... nicht möglich.
Ich müsste also erst die Felder meiner Struktur ermitteln was ich auch tue. Diese Information schreibe ich in eine zweite interne Tabelle (itab2), da ich diese später für die Kopfausgabe benutze. Diese Felder der itab2 möchte ich jetzt in den SORT-Befehl integrieren, dynamisch versteht sich. Ist dies ohne LOOP und ASSIGN möglich? Z.B. über

sort itab by (itab2-feld[1])
(itab2-feld[2])
...
Gruss

Martin

Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) »
schuessler hat geschrieben:Die Tabelle (itab) ist als field-symbol definiert, d.h. ich habe keine Feld-Variable und ich kenne die Struktur der Tabelle nicht, so ist für mich ein fester SORT BY ... nicht möglich.
Das hat ja auch niemand bestritten.
Aber die Laufzeit-Umgebung "kennt" doch mit Sicherheit die Felder, oder?
(Im Debugger mal die itab ansehen, ob da die Felder bekannt sind oder nicht. Aber eigentlich können die Infos allenfalls durch ein ASSIGN ... CASTING verloren gehen.)
Ich müsste also erst die Felder meiner Struktur ermitteln was ich auch tue. Diese Information schreibe ich in eine zweite interne Tabelle (itab2), da ich diese später für die Kopfausgabe benutze.
Diese Felder der itab2 möchte ich jetzt in den SORT-Befehl integrieren, dynamisch versteht sich.
Worauf bezieht sich das "dynamisch" hier?
Darauf, dass immer andere Tabellen mit abweichenden Strukturen übergeben werden, die aufsteigend nach Feld1 Feld2 Feld3 ... sortiert werden sollen?
Auch wenn Du nicht weißt (bzw. nicht ohne etwas Aufwand ermitteln kannst), wie die Felder heißen:
Die Laufzeit-Umgebung weiß es, und ein simples

Code: Alles auswählen.

SORT itab.
macht was Du willst.
Oder heißt dynamisch: Der User darf zur Laufzeit die itab nach seinen Wünschen umsortieren?

Das entspricht zwar nicht mehr Deiner ursprünglichen Frage, aber auch das ist in der F1-Hilfe zu SORT beschrieben.
Mit

Code: Alles auswählen.

SORT itab BY (afield1) (dfield1) DESCENDING 
             (afield2) (dfield2) DESCENDING
             (afield3) (dfield3) DESCENDING
             (afield4) (dfield4) DESCENDING
             (afield5) (dfield5) DESCENDING.
Kann der Anwender dann sogar noch pro Feld zwischen absteigend und aufsteigend wählen.
Du musst dann nur noch die Feldnamen aus der itab2 den geeigneten Variablennamen zuweisen.
(Warum das funktioniert, und welche der Felder afield1 ... afield5 und dfield1 .... dfield5 initial sein müssen, steht auch in der F1-Hilfe zu SORT.)
Erst wenn man auch noch den Zusatz AS TEXT berücksichtigen will, wird die SORT-Anweisung wirklich hässlich.
Ist dies ohne LOOP und ASSIGN möglich? Z.B. über

sort itab by (itab2-feld[1])
(itab2-feld[2])
...
Wenn überhaupt, dann mit

Code: Alles auswählen.

SORT itab BY (itab2[1]-feld) (itab2[2]-feld) ...
Wenn Du dabei itab2[10]-feld verwendest, muss die itab aber auch mindestens 10 Zeilen haben (mit APPEND INITIAL LINE auffüllen).
Oder eben durch Zuweisen an Variablen (oder Komponenten einer flachen Struktur.)

Beitrag von Gast ( / / 0 / 3 ) »
Danke Frank! Das hilft mir wirklich weiter.

Beitrag von Gast ( / / 0 / 3 ) »
Zu früh gefreut, der SORT funktioniert doch nicht.

Code: Alles auswählen.

sort <itab> by (i_cat[4]-fieldname)
[code]               (i_cat[2]-fieldname)
[code]               (i_cat[5]-fieldname).

Hat noch jemand eine Idee.


Seite 1 von 1

Vergleichbare Themen

11
Antw.
3537
Views
interne Tabelle sortieren?
von b0rsti » 10.06.2008 13:07 • Verfasst in ABAP® für Anfänger
12
Antw.
12416
Views
interne Tabelle sortieren
von Marc K. » 21.08.2012 08:18 • Verfasst in ABAP® für Anfänger
3
Antw.
1307
Views
Interne Tabelle nach dynamischer Spalte sortieren
von JanR » 27.10.2020 12:20 • Verfasst in ABAP® für Anfänger
3
Antw.
2278
Views
Dynamische interne Tabelle
von c0lt.seavers » 01.08.2007 09:55 • Verfasst in ABAP® für Anfänger
4
Antw.
6441
Views
Interne Tabelle - dynamische Spaltenabfrage?
von MacLeod » 13.10.2011 11:48 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Daten an Tabelle binden
vor 12 Stunden von Bright4.5 3 / 1485
Regex in where
vor 14 Stunden von tar 6 / 158

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Daten an Tabelle binden
vor 12 Stunden von Bright4.5 3 / 1485
Regex in where
vor 14 Stunden von tar 6 / 158

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821