Code: Alles auswählen.
TYPES : BEGIN OF ty_line,
spaltex TYPE c LENGTH 40,
spaltey type c length 5.
TYPES : END OF ty_line.
DATA line_tab TYPE TABLE OF ty_line.
APPEND INITIAL LINE TO line_tab ASSIGNING FIELD-SYMBOL(<line>).
<line>-spaltex = '12*'.
APPEND INITIAL LINE TO line_tab ASSIGNING <line>.
<line>-spaltex = '1234567*'.
APPEND INITIAL LINE TO line_tab ASSIGNING <line>.
<line>-spaltex = '345*'.
APPEND INITIAL LINE TO line_tab ASSIGNING <line>.
<line>-spaltex = '345767*'.
APPEND INITIAL LINE TO line_tab ASSIGNING <line>.
<line>-spaltex = '9876*'.
write : / 'Vor dem Sort'.
LOOP AT line_tab ASSIGNING <line>.
WRITE : / <line>-spaltex.
SHIFT <line>-spaltex RIGHT DELETING TRAILING space.
ENDLOOP.
SORT line_tab BY spaltex DESCENDING.
write : / 'Nach dem Sort'.
LOOP AT line_tab ASSIGNING <line>.
SHIFT <line>-spaltex LEFT DELETING LEADING space.
WRITE : / <line>-spaltex.
ENDLOOP.
Folgende Benutzer bedankten sich beim Autor edwin für den Beitrag:
a-dead-trousers
Wie genau funktioniert das... Habe shift noch nie verwendet... hmm .. kannst du das mal erklären? Also wieso funktioniert der Sort in diesem fall? Was macht das shift mit den Feldern / der Tabelle, dass es dann funktioniert?
Das SHIFT "verschiebt" den Inhalt im Zielfeld um eine gewisse Anzahl nach links oder rechts. Da nun die Leerzeichen VORNE stehen und diese laut Codepage (z.B. ISO-8859-1) eine niedrigere Wertigkeit haben als andere Zeichen, funktioniert die Sortierung nun so, als ob man nach der Länge sortieren würde. Man sollte sich aber im Klaren sein, dass trotzdem zusätzlich noch die Sortierung der gleich langen Wörter nach dem Alphabet erfolgt, was je nach Aufgabenstellung gewünscht oder nicht gewünscht sein könnte.
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
SaskuAc
Code: Alles auswählen.
'1234567* ' -> ' 1234567*'
'12* ' -> ' 12*'
'3456* ' -> ' 3456*'
'98765* ' -> ' 98765*'
😊