Einträge zählen interne Tabelle

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

Einträge zählen interne Tabelle

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Hallo,

ich bin gerade an einem Programm dran, bei dem ich die gleichen Nummernfolgen in einer internen Tabelle zählen lassen möchte.

Also ich möchte wissen, wieviele Einträge habe ich in meiner Tabelle die die Ziffernfolge DE888677 haben z.B. und diesen Wert möchte ich dann in das entsprechende Feld rechts von der internen Tabelle schreiben. Z.B. die Ziffernfolge DE888677 kommt 50 mal vor in der internen Tabelle. Die Ziffernfolge DE777555 kommt 20 mal vor usw.

Die interne Tabelle habe ich vorher nach den Nummern sortieren lassen. Somit stehen nun gleiche Nummern in einer Folge.

Ich bin schon mal an einer Schleife dran, glaube aber dass das Ganze zu kompliziert ist und leider funktioniert es auch noch nicht ganz wie ich mir das vorstelle.

Also :

Code: Alles auswählen.


Data: gt_itab type table of ty_tab
         gs_itab type ty_tab
        gt_merk type table of ty_tab
        gs_merk type ty_tab
        gt_ausgabe type table of ty_tab
       gs_ausgabe type ty_tab
       lv_anz type i.


Loop at gt_itab into gs_itab
        if sy-tabix = 1.
        gs_merk = gs_itab.
        lv_anz = 1.
        else.
        if gs_itab-wert = gs_merk-wert 
        lv_anz = lv_anz + 1.
        else.
        gs_merk = gs_itab.
        gs_ausgabe-wert = gs_merk-wert.
        gs_ausgabe-anzahl = lv_anz.
        append gs_ausgabe to gt_ausgabe.
        endif.
        endif.

Leider funktioniert das Ganze so nicht, aber im Ansatz sollte es so richtig sein. Irgendwelche Verbesserungsvorschläge oder Ideen wie es anders gelöst werden könnte?

Vielen Dank im Voraus.

L0w-Rider

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


Re: Einträge zählen interne Tabelle

Beitrag von nickname8 (Specialist / 134 / 17 / 19 ) »
Sowas?
Hab grad kein SAP-System zur Hand, aber in die Richtung sollte es gehen...

Code: Alles auswählen.

types:
 beginn of ty_count,
  wert type string,
  count type i,
end of ty_count.  

data: 
  lt_count  type hashed table of ty_count with unique key wert,
  lr_count  type reference of ty_count,
  ls_count  type ty_count.

sort gt_itab by wert.
LOOP AT gt_itab into gs_itab.
  read table  lt_count reference into lr_count with table key wert = gs_itab-wert.
  if sy-subrc ne 0.
    clear ls_count.
    ls_count-wert = gs_itab-wert.
    insert ls_count into table lt_count reference into lr_count.
  endif.
  lr_count->count = lr_count->count + 1. 
endloop.
Oder ohne hashed table und dann mit einer struktur, in der man count immer hochzählt und nur beim ändern des wertes appended.
Zuletzt geändert von nickname8 am 09.11.2018 12:27, insgesamt 1-mal geändert.

Re: Einträge zählen interne Tabelle

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
Doku lesen zu den Befehlen "AT NEW" und "SUM"
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Einträge zählen interne Tabelle

Beitrag von mfromg (ForumUser / 17 / 11 / 0 ) »
Eine weitere elegante Möglichkeit bietet der Collect-Befehl.
Hier ein kleines Demo-Programm (es geht hier nicht um den Sinn, sondern um den Coollect-Befehl)

Code: Alles auswählen.

types: begin of ty_spras,
         spras type spras,
         count type i,
       end of ty_spras.
types: ty_spras_tab type standard table of ty_spras.

data: ls_ty_spras type ty_spras.
data: lt_ty_spras type ty_spras_tab.
data: ls_006t type t006t.

select * from t006t into ls_006t.
  move ls_006t-spras to ls_ty_spras-spras.
  move 1             to ls_ty_spras-count.
  collect ls_ty_spras into lt_ty_spras.
endselect.

Re: Einträge zählen interne Tabelle

Beitrag von nickname8 (Specialist / 134 / 17 / 19 ) »
IIIhhhh, Gruppenstufenwechsel und COLLECT. ;-)

Wenn du ein neues SAP Release hast, guck dir mal die GROUPING-Funktionalität von LOOPs an. Das ist eigentlich genau für sowas gebaut.

LG

Re: Einträge zählen interne Tabelle

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
"At end of" würde funktionieren, aber leider habe ich zwei Kriterien und da funktioniert es leider nicht, da das zweite Kriterium dann immer *** bekommt.

Gibt es sowas wie AT END OF auch mit zweit Kriterien??

Oder eine andere Möglichkeit.

Also ich möchte nach Ziffern DE224555 und Buchstabenfolge D22 sortieren.

Re: Einträge zählen interne Tabelle

Beitrag von deejey (Specialist / 422 / 129 / 45 ) »
na das ist jetzt aber ziemlich gedengelt, da musst du eigene Sortfelder für alle Konstellationen bauen und nach denen sortieren

Re: Einträge zählen interne Tabelle

Beitrag von DeathAndPain (Top Expert / 1944 / 257 / 413 ) »
Wenn Du kein Affentheater mit irgendwelchen Sonderfunktionen des LOOP-Befehls machen möchtest, dann geht durchaus auch Dein Ansatz, es "zu Fuß" aufzusummieren. Nur gefällt mir Dein Code nicht, da er viel zu umständlich ist, erkennbar auch an überflüssigen Feldern wie lv_anz. Kein Wunder, dass Du Dir damit eine (unnötige) Komplexität einhandelst, durch die der Code nicht fehlerfrei funktioniert.

Hier ist eine einfache Lösung in alter Syntax:

Code: Alles auswählen.

Data: gt_itab type table of ty_tab,
        gs_itab type ty_tab,
      gs_merk type ty_tab,
      gt_ausgabe type table of ty_tab,
      gs_ausgabe type ty_tab.


clear gs_merk. " unter der Maßgabe, dass es keine Zeile in gt_itab mit initialem wert gibt
Loop at gt_itab into gs_itab
  if gs_itab-wert <> gs_merk-wert.

    if sy-tabix > 1.
      append gs_ausgabe to gt_ausgabe.
    endif.

    clear gs_ausgabe.
    gs_ausgabe-wert = gs_itab-wert.
  endif.

  add 1 to gs_ausgabe-anzahl.

endloop.
append gs_ausgabe to gt_ausgabe.
Sollte Dein SAP-Release schon 7.40 oder höher sein, dann sag das bitte immer dazu, da es dann schönere und modernere Syntaxformen gibt. (Die alte Syntax funktioniert da aber auch.)

Re: Einträge zählen interne Tabelle

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
L0w-RiDer hat geschrieben:"At end of" würde funktionieren, aber leider habe ich zwei Kriterien und da funktioniert es leider nicht, da das zweite Kriterium dann immer *** bekommt.
Gibt es sowas wie AT END OF auch mit zweit Kriterien??
Die "alten" Gruppenstufen funktionieren "von links nach rechts". Das heißt wenn man in der Struktur fünf Felder hat und mit AT das dritte Feld anspricht, werden auch Änderungen in den zwei Feldern links davon als Gruppenstufenwechsel erkannt.
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: Einträge zählen interne Tabelle

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
okay, es passt jetzt :)
danke.

Re: Einträge zählen interne Tabelle

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
hmm wenn ich mit Loop gt_itab into gs_itab Group by wert.

Dann sortiert mir der Loop es automatisch, aber wie könnte ich nun die Gruppeneinträge zählen lassen?

Re: Einträge zählen interne Tabelle

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
L0w-RiDer hat geschrieben:hmm wenn ich mit Loop gt_itab into gs_itab Group by wert.

Dann sortiert mir der Loop es automatisch, aber wie könnte ich nun die Gruppeneinträge zählen lassen?
Schau dir mal den Zusatz GROUP SIZE bei LOOP AT ... GROUP BY an.
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: Einträge zählen interne Tabelle

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
LOOP AT spfli_tab INTO wa
GROUP BY ( key1 = wa-carrid key2 = wa-airpfrom
index = GROUP INDEX size = GROUP SIZE )
WITHOUT MEMBERS
INTO DATA(keysplus).

So hab ich es nun gefunden.

ich Loope über meine interne Tabelle (spfli_tab ) in eine Struktur (wa) und dann gruppiere ich. Was meinen die hier bei diesem Beispiel mit key1 oder key2?? also die Spalten/Felder nach denen gruppiert werden soll?

Re: Einträge zählen interne Tabelle

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
L0w-RiDer hat geschrieben:LOOP AT spfli_tab INTO wa
GROUP BY ( key1 = wa-carrid key2 = wa-airpfrom
index = GROUP INDEX size = GROUP SIZE )
WITHOUT MEMBERS
INTO DATA(keysplus).

So hab ich es nun gefunden.

ich Loope über meine interne Tabelle (spfli_tab ) in eine Struktur (wa) und dann gruppiere ich. Was meinen die hier bei diesem Beispiel mit key1 oder key2?? also die Spalten/Felder nach denen gruppiert werden soll?
Die Felder "key1", "key2" usw. sind die Namen der Felder in der Struktur die die Gruppenstufe identifizieren. Mit "index" hat man einen Zähler die wievielte Gruppe gerade durchlaufen wird und mit "size" die Anzahl der Elemete in der Gruppe.
Umgelegt auf deine Tabelle im Ausgangspost:

Code: Alles auswählen.

LOOP AT gt_itab ASSIGNING FIELD-SYMBOL(<ls_itab>)
  GROUP BY ( wert_gruppe = <ls_itab>-wert index = group index size = group size ) ASSIGNING FIELD-SYMBOL(<ls_itab_group>).
  
* Beispiele für die Verwendung
  WRITE <ls_itab_group>-wert_gruppe. "Der aktuelle Wert, entspricht gt_itab-wert.
  WRITE <ls_itab_group>-index. "Der aktuelle Index der Gruppe
  WRITE <ls_itab_group>-size. "Die anzahl der Einträge in der Gruppe
  
* Die "Anzahl" in das erste Tabellenfeld der ursprünglichen Tabelle schreiben
  LOOP AT GROUP <ls_itab_group> ASSIGNING FIELD-SYMBOL(<ls_itab_member>).
    <ls_itab_member>-anzahl = <ls_itab_group>-size.
    exit.
  ENDLOOP.
ENDLOOP.
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

Seite 1 von 1

Vergleichbare Themen

6
Antw.
10567
Views
Einträge einer Tabelle zählen ...
von anonymizer2002 » 14.09.2007 14:31 • Verfasst in ABAP® für Anfänger
1
Antw.
1010
Views
Error beiDelete Tausender Einträge von die Interne Tabelle
von Wess » 12.11.2018 11:03 • Verfasst in ABAP Objects®
3
Antw.
1703
Views
verschiedene Werte zählen aus interne Tab
von zwiback » 26.08.2005 15:30 • Verfasst in ABAP® für Anfänger
1
Antw.
2529
Views
2 interne Tabellen vergleichen, Einträge löschen
von supermario73 » 07.02.2007 10:46 • Verfasst in ABAP® Core
4
Antw.
1080
Views

Aktuelle Forenbeiträge

Trennen Strasse und Hausnummer
vor 35 Minuten von payten 13 / 10230
Eclipse - warum/wann verwendet ihr es [nicht]
vor 54 Minuten von ewx 23 / 1817
Dialog-Container mit Toolbar/Status
vor 15 Stunden von DeathAndPain gelöst 22 / 3209
Daten an Tabelle binden
vor 20 Stunden von Lukas Sanders 2 / 1071
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 638

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

Trennen Strasse und Hausnummer
vor 35 Minuten von payten 13 / 10230
Eclipse - warum/wann verwendet ihr es [nicht]
vor 54 Minuten von ewx 23 / 1817
Dialog-Container mit Toolbar/Status
vor 15 Stunden von DeathAndPain gelöst 22 / 3209
Daten an Tabelle binden
vor 20 Stunden von Lukas Sanders 2 / 1071
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 638

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2633
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9218