interene Tabelle nach Länge des Inhalts sortieren

Getting started ... Alles für einen gelungenen Start.
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

interene Tabelle nach Länge des Inhalts sortieren

Beitrag von Basler84 (ForumUser / 60 / 31 / 0 ) »
Hallo zusammen,

ich wollte fragen ob es eine Funktion gibt eine interne Tabelle nach der Länge des Inhalts der Felder einer Spalte zu sortieren.

Bsp:

Spalte X:
1234567*
12*
3456*
98765*

gewünschtes Ergebnis nach Sort:
1234567*
98765*
3456*
12*

es geht wie gesagt nur um die Länge des Feldes. könnte natürlich loopen und eine Hilfstabelle füllen aber vll. gehts ja besser.

Beste Grüße
Basler

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


Re: interene Tabelle nach Länge des Inhalts sortieren

Beitrag von deejey (Specialist / 418 / 128 / 45 ) »
Kann nicht ohne Hilfskonstrukt gehen, ich würde so aus der Hüfte geschossen eine Dummyspalte einbauen, Loop drüber und Länge reinballern, dann SORT descending danach.

Folgende Benutzer bedankten sich beim Autor deejey für den Beitrag:
Basler84


Re: interene Tabelle nach Länge des Inhalts sortieren

Beitrag von Basler84 (ForumUser / 60 / 31 / 0 ) »
Ja genau so hab ichs mal gemacht. Das hatte ich mit dem loop und der Hilfstabelle gemeint. Hatte nur die Hoffnung, dass es da vielleicht was schickeres gibt... :)

Re: interene Tabelle nach Länge des Inhalts sortieren

Beitrag von deejey (Specialist / 418 / 128 / 45 ) »
So eine Funktion gibt es nicht, du brauchst aber auch keine Hilfdtabelle, nimmst einfach die Originaltabelle und haust noch eine Spalte rein

Re: interene Tabelle nach Länge des Inhalts sortieren

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Die Alternative wäre, ein Sortierverfahren (Bubble Sort oder welches auch immer) selber zu programmieren, Zeilen zu vergleichen und anhand dessen hoch- oder runterzuschieben. Das dürfte aber weder kürzer noch performanter werden, ganz im Gegenteil.

Re: interene Tabelle nach Länge des Inhalts sortieren

Beitrag von edwin (Specialist / 300 / 9 / 68 ) »
Hi, wenn deine Spalte feste Länge hat, dann kannst auch zuerst den Inhalt nach rechts schieben, sortieren und dann wieder zurück 😊 .
Bsp:

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


Re: interene Tabelle nach Länge des Inhalts sortieren

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Das ist ein ziemlich gerissener Ansatz! Ich glaube zwar nicht, dass er schneller ist, aber er ist trotzdem gerissen!

Re: interene Tabelle nach Länge des Inhalts sortieren

Beitrag von SaskuAc (Specialist / 321 / 37 / 43 ) »
edwin hat geschrieben:
09.10.2019 18:15
Hi, wenn deine Spalte feste Länge hat, dann kannst auch zuerst den Inhalt nach rechts schieben, sortieren und dann wieder zurück 😊 .
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?

Re: interene Tabelle nach Länge des Inhalts sortieren

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
SaskuAc hat geschrieben:
10.10.2019 13:08
edwin hat geschrieben:
09.10.2019 18:15
Hi, wenn deine Spalte feste Länge hat, dann kannst auch zuerst den Inhalt nach rechts schieben, sortieren und dann wieder zurück 😊 .
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

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: interene Tabelle nach Länge des Inhalts sortieren

Beitrag von edwin (Specialist / 300 / 9 / 68 ) »
Hi,
"shift right deleting trailing space"
Inhalt rechts schieben mit Löschung "angehängter" Leerzeichen
Bsp:
'1234567* ' -> ' 1234567*'
"shift left deleting leading space"
Inhalt links schieben mit Löschung führender Leerzeichen
Bsp:
' 1234567*' -> '1234567* '
am besten du schaust mal die ABAP Hilfe zu shift an
wenn du nun die "geschobenen" Daten anschaust, siehst du, dass jetzt die Sortierung, wie von dir gewünscht funktioniert:

Code: Alles auswählen.

'1234567*      ' -> '      1234567*'
'12*           ' -> '           12*'
'3456*         ' -> '         3456*'
'98765*        ' -> '        98765*'
sort descending -> Sort absteigend damit auch automatisch der Länge nach absteigend, oder sort ascending damit auch automatisch der Länge nach aufsteigend. (Auch hier wieder: schau dir die Hilfe zu sort an).

Jetzt musst du nur noch die Daten in die ursprüngliche Form bringen mit
Shift left.

Voraussetzung ist natürlich, dass keine führenden Leerzeichen in den Ausgangsdaten vorkommen.

/Edwin

Folgende Benutzer bedankten sich beim Autor edwin für den Beitrag:
SaskuAc


Re: interene Tabelle nach Länge des Inhalts sortieren

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
Irgendwie mag ich Edwins Lösung. Sie ist zwar vom Grundsatz her falsch aber sollte für die meisten Fälle, die man in freier Wildbahn antrifft, funktionieren. 😜
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: interene Tabelle nach Länge des Inhalts sortieren

Beitrag von edwin (Specialist / 300 / 9 / 68 ) »
black_adept hat geschrieben:
10.10.2019 15:37
Sie ist zwar vom Grundsatz her falsch
😊

Seite 1 von 1

Vergleichbare Themen

9
Antw.
3402
Views
Löschen des Inhalts in der Tabelle
von kaim77 » 08.01.2014 18:05 • Verfasst in ABAP® für Anfänger
1
Antw.
1446
Views
Tabelle sortieren
von Chrisba » 18.04.2007 09:06 • Verfasst in ABAP® für Anfänger
6
Antw.
319
Views
Tabelle sortieren
von ralf.wenzel » 22.08.2022 13:28 • Verfasst in ABAP® Core
1
Antw.
1860
Views
Kommentarfeld in Länge 400 in Tabelle und auf Screen - wie?
von MindMOB » 28.06.2007 13:25 • Verfasst in ABAP® für Anfänger
11
Antw.
3367
Views
interne Tabelle sortieren?
von b0rsti » 10.06.2008 13:07 • Verfasst in ABAP® für Anfänger

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.

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141