LOOP AT

Getting started ... Alles für einen gelungenen Start.
53 Beiträge • Seite 1 von 4 (current) Nächste
53 Beiträge Seite 1 von 4 (current) Nächste

LOOP AT

Beitrag von cuncon (Specialist / 143 / 98 / 1 ) »
Hallo zusammen,

kann jemand mir helfen, einen LOOP AT Befehl durch einen anderen schnelleren Befehl zu ersetzen? Mein Code ist folgendes:

LOOP AT iconf_out.
IF iconf_out-atbez CS zzbkmerk-atnam1.
itab-modgr = iconf_out-atwrt.
ENDIF.
ENDLOOP.

Ich möchte statt LOOP AT ein READ TABLE ersetzen, weil ich denke, dass READ TABLE schneller ist. Aber ich bin über CS gestolpert.
zB: READ TABLE iconf_out WITH KEY atbez CS zzbkmerk-atnam1. (zzbkmerk-atnam1 ist nur ein Teil von atbez)
Dann gibt es einen Fehler bei CS. Hat jemand eine Idee, wie man das macht? Es muss nicht unbedingt READ TABLE Befehl sein. Es kann auch anderen Befehl sein. Hauptsache ist es schneller als LOOP AT.

Vielen Dank für jede Antwort.

cuncon

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


Re: LOOP AT

Beitrag von 4byte (Specialist / 124 / 37 / 35 ) »
Hey cuncon,

ich gehe mal davon aus, dass deine itab eine Standard Tabelle ist, d.h. sie wird in beiden Fällen eh linear durchsucht, egal ob mit loop oder mit read. Ein Perfomancevorteil durch READ TABLE bekommst du durch den Zusatz BINARY SEARCH(Wenn die Tabelle davor sortiert wurde. Sonst ist das Ergebnis :mrgreen: )

Ein Vergleich mit 'CS' usw. ist in READ Anweisungen nicht möglich soweit ich weiß.

Ich nehme bei großen ITAB, über die ich loopen muss um Daten zu ändern, gerne Feldsymbole.(Allgemein verwende ich gerne Feldsymbole :D )

Grüße 4byte

Folgende Benutzer bedankten sich beim Autor 4byte für den Beitrag:
cuncon

Es gibt 10 Menschen die binär verstehen :)

Re: LOOP AT

Beitrag von cuncon (Specialist / 143 / 98 / 1 ) »
4byte hat geschrieben:Hey cuncon,

ich gehe mal davon aus, dass deine itab eine Standard Tabelle ist, d.h. sie wird in beiden Fällen eh linear durchsucht, egal ob mit loop oder mit read. Ein Perfomancevorteil durch READ TABLE bekommst du durch den Zusatz BINARY SEARCH(Wenn die Tabelle davor sortiert wurde. Sonst ist das Ergebnis :mrgreen: )

Ein Vergleich mit 'CS' usw. ist in READ Anweisungen nicht möglich soweit ich weiß.

Ich nehme bei großen ITAB, über die ich loopen muss um Daten zu ändern, gerne Feldsymbole.(Allgemein verwende ich gerne Feldsymbole :D )

Grüße 4byte
Hi 4byte,

vielen Dank für die schnelle Antwort. Ich habe den Befehl FIND zzbkmerk-atnam1 IN TABLE iconf_out benutzt. Wird es schneller als LOOP AT? Auf jeden Fall ist der Code kürzer.

cuncon

Re: LOOP AT

Beitrag von 4byte (Specialist / 124 / 37 / 35 ) »
Hey Cuncon,

cuncon hat geschrieben: Wird es schneller als LOOP AT?
cuncon

das weiß ich leider nicht. Ich habe die Anweisung bis jetzt nicht mal gekannt :D
cuncon hat geschrieben: Auf jeden Fall ist der Code kürzer.
cuncon
Ein bisschen ist er kürzer :D

Schreib doch einen Testreport für beide Möglichkeiten und lasse es durch die TA SE30 / SAT laufen, dann siehst du vll welche Möglichkeit schneller ist.
(Aber bitte mit vielen Einträgen in der ITAB :) )

Oder vll weiß jemand aus dem Forum die Antwort ???


Grüße 4byte

Folgende Benutzer bedankten sich beim Autor 4byte für den Beitrag:
cuncon

Es gibt 10 Menschen die binär verstehen :)

Re: LOOP AT

Beitrag von cuncon (Specialist / 143 / 98 / 1 ) »
4byte hat geschrieben:Hey Cuncon,

cuncon hat geschrieben: Wird es schneller als LOOP AT?
cuncon

das weiß ich leider nicht. Ich habe die Anweisung bis jetzt nicht mal gekannt :D
cuncon hat geschrieben: Auf jeden Fall ist der Code kürzer.
cuncon
Ein bisschen ist er kürzer :D

Schreib doch einen Testreport für beide Möglichkeiten und lasse es durch die TA SE30 / SAT laufen, dann siehst du vll welche Möglichkeit schneller ist.
(Aber bitte mit vielen Einträgen in der ITAB :) )

Oder vll weiß jemand aus dem Forum die Antwort ???


Grüße 4byte
der Code ist nicht nur kürzer, auch bei Debuggen auch viel kürzer (weil ich die Schleife nicht mehr durchführen muss). Nur ich weiß nicht ob der Befehl FIND schneller als LOOP AT ist.

cuncon

Re: LOOP AT

Beitrag von cuncon (Specialist / 143 / 98 / 1 ) »
cuncon hat geschrieben:
4byte hat geschrieben:Hey Cuncon,

cuncon hat geschrieben: Wird es schneller als LOOP AT?
cuncon

das weiß ich leider nicht. Ich habe die Anweisung bis jetzt nicht mal gekannt :D
cuncon hat geschrieben: Auf jeden Fall ist der Code kürzer.
cuncon
Ein bisschen ist er kürzer :D

Schreib doch einen Testreport für beide Möglichkeiten und lasse es durch die TA SE30 / SAT laufen, dann siehst du vll welche Möglichkeit schneller ist.
(Aber bitte mit vielen Einträgen in der ITAB :) )

Oder vll weiß jemand aus dem Forum die Antwort ???


Grüße 4byte
der Code ist nicht nur kürzer, auch bei Debuggen auch viel kürzer (weil ich die Schleife nicht mehr durchführen muss). Nur ich weiß nicht ob der Befehl FIND schneller als LOOP AT ist.

cuncon
Sorry, ich habe gerade gemerkt, dass man den Befehl LOOP AT durch FIND nicht ersetzen kann, weil man am Ende anderes Ergebnis bekommt. Bei LOOP AT kann man die gefundene Zeile abfangen, aber bei FIND nicht

cuncon

Re: LOOP AT

Beitrag von 4byte (Specialist / 124 / 37 / 35 ) »
hey cuncon,
cuncon hat geschrieben:

Sorry, ich habe gerade gemerkt, dass man den Befehl LOOP AT durch FIND nicht ersetzen kann, weil man am Ende anderes Ergebnis bekommt. Bei LOOP AT kann man die gefundene Zeile abfangen, aber bei FIND nicht

cuncon
was willst du denn jetzt eigentlich machen? Sollen Einträge nur gefunden werden? Sollen die Einträge bearbeitet werden wenn sie gefunden werden?? Mit Find hast du die indexe der gefundenen Zeilen. Danach kannst du dann ein Read Table machen. Aber das macht doch kein Sinn. Dann kannst du gleich über die Tabelle mit einer Where Bediengung loopen. Als Arbeitsbereich nimmst du ein Feldymbol und weißt dem Feldsymbol den neuen Wert zu. Dadruch spart man sich auch das Modify und schnell ist es auch noch :)
Zuletzt geändert von 4byte am 01.02.2018 12:05, insgesamt 1-mal geändert.

Folgende Benutzer bedankten sich beim Autor 4byte für den Beitrag:
cuncon

Es gibt 10 Menschen die binär verstehen :)

Re: LOOP AT

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Zunächst einmal solltest du wissen, ob du eine oder mehrere Zeilen suchst (davon hängt nämlich ab, ob du READ TABLE oder LOOP AT nimmst). Grundsätzlich wird ein LOOP schneller, wenn du mit sortierten Tabellen arbeitest (man kann durchaus auch Sekundärschlüssel verwenden), damit ersparst du dir Sortiererei. Ein Zugriff mit CS ist natürlich blöd, weil der sich nicht auf einen kompletten Feldinhalt bezieht.

Wenn du einen LOOP nimmst, obwohl du nur einen Satz suchst (weil du z. B. CS nimmst), solltest du mit EXIT rausspringen, weil du ja weißt, dass du keinen weiteren Satz suchen wirst.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: LOOP AT

Beitrag von Daniel (Specialist / 314 / 68 / 44 ) »
ralf.wenzel hat geschrieben:Grundsätzlich wird ein LOOP schneller, wenn du mit sortierten Tabellen arbeitest
NEIN! Nur wenn man den KEY auch sinnvoll verwenden kann.

Der FIND ALL OCCURRENCES liefert auch eine Tabelle mit den
Fundstellen zurück. Das ist bei großen Tabellen um einiges
schneller als ein LOOP.

Folgende Benutzer bedankten sich beim Autor Daniel für den Beitrag:
cuncon


Re: LOOP AT

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Daniel hat geschrieben:
ralf.wenzel hat geschrieben:Grundsätzlich wird ein LOOP schneller, wenn du mit sortierten Tabellen arbeitest
NEIN! Nur wenn man den KEY auch sinnvoll verwenden kann.
Naja, das setze ich jetzt mal voraus. Alles, was nicht sinnvoll verwendet wird, ist nicht sinnvoll.



Ralf

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
cuncon

Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: LOOP AT

Beitrag von Daniel (Specialist / 314 / 68 / 44 ) »
Damit scheidet "Grundsätzlich" aus.
Hier wird nach dem Vorkommen von Zeichen gesucht.
Dabei hilft ein Key nicht.

Folgende Benutzer bedankten sich beim Autor Daniel für den Beitrag:
cuncon


Re: LOOP AT

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Daniel hat geschrieben:Damit scheidet "Grundsätzlich" aus.
Hier wird nach dem Vorkommen von Zeichen gesucht.
Dabei hilft ein Key nicht.
Das habe ich ja geschrieben, dass CS dem Vorhaben entgegenwirkt. Aber grundsätzlich (also in den meisten Fällen) beschleunigt das Zugriffe.


Ralf

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
cuncon

Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: LOOP AT

Beitrag von Daniel (Specialist / 314 / 68 / 44 ) »
In den meisten Fällen wird ein LOOP ohne Bedingung ausgeführt.
Da beschleunigt nix.

Folgende Benutzer bedankten sich beim Autor Daniel für den Beitrag:
cuncon


Re: LOOP AT

Beitrag von cuncon (Specialist / 143 / 98 / 1 ) »
Daniel hat geschrieben:In den meisten Fällen wird ein LOOP ohne Bedingung ausgeführt.
Da beschleunigt nix.
Danke, du hast recht. Ich werde die Loop mit WHERE Bedingung einbauen und auch FIELD-Symbold benutzen. Es kann schneller gehen.

Vielen Dank für alle Antworten.

cuncon

Re: LOOP AT

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
cuncon hat geschrieben:
Daniel hat geschrieben:In den meisten Fällen wird ein LOOP ohne Bedingung ausgeführt.
Da beschleunigt nix.
Danke, du hast recht. Ich werde die Loop mit WHERE Bedingung einbauen und auch FIELD-Symbold benutzen. Es kann schneller gehen.
Nein, in einer Standardtabelle geht ein LOOP AT WHERE nicht schneller als ein LOOP AT, weil alle Sätze sequentiell durchlaufen werden (das wurde auch schon geschrieben). Darum verwende ich sie nicht (oder nur in begründeten Ausnahmefällen). LOOP AT WHERE bringt nur was bei Schlüsselzugriffen.

Gleichwohl finde ich LOOP AT WHERE deutlich lesbarer, weil die Bedingung direkt im LOOP steht und nicht in einem IF im LOOP.

Das Feldsymbol bringt was - aber wohl eher bei großen Tabellen.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Vergleichbare Themen

1
Antw.
1484
Views
4
Antw.
3786
Views
LOOP in einem LOOP
von Bjuti » 10.09.2013 15:18 • Verfasst in ABAP® für Anfänger
39
Antw.
8013
Views
Loop
von Kai999 » 27.07.2017 16:15 • Verfasst in ABAP® für Anfänger
34
Antw.
7126
Views
ein loop
von user2008 » 19.07.2017 10:50 • Verfasst in ABAP® für Anfänger
7
Antw.
2467
Views
Loop-Problem
von TobiB » 17.12.2007 13:15 • Verfasst in ABAP® Core

Aktuelle Forenbeiträge

Regex in where
vor einer Stunde von edwin 1 / 22
Programm anlegen mit Vorlage
vor 5 Stunden von DeathAndPain 2 / 81
IT0024 Qualifikationen CP-ID
vor 5 Stunden von DeathAndPain 2 / 324
BUSOBJEKT zu CMIS PHIO ermitteln
vor 7 Stunden von snooga87 1 / 58

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

Regex in where
vor einer Stunde von edwin 1 / 22
Programm anlegen mit Vorlage
vor 5 Stunden von DeathAndPain 2 / 81
IT0024 Qualifikationen CP-ID
vor 5 Stunden von DeathAndPain 2 / 324
BUSOBJEKT zu CMIS PHIO ermitteln
vor 7 Stunden von snooga87 1 / 58

Unbeantwortete Forenbeiträge

Regex in where
vor einer Stunde von edwin 1 / 22
BUSOBJEKT zu CMIS PHIO ermitteln
vor 7 Stunden von snooga87 1 / 58
aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3234