Code: Alles auswählen.
loop at itab assigning <fs1>.
if <fs2> is assigned and <fs3> is assigned.
* Hier kannst du jetzt deine Sachen machen. <fs1>,<fs2> und <fs3> sind 3 aufeinanderfolgende Zeilen, wobei <fs1> die am weitesten unten stehende Zeile ist
endif.
* direkt vor dem Endloop ein bisschen Assignmentspielerei um die nächste Zeile vorzubereiten.
if <fs2> is assigned>.
assign <fs2> to <fs3>.
endif.
assign <fs1> to <fs2>.
endloop.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag (Insgesamt 2):
DeathAndPain • Barney
Die CASE-Lösung habe ich auch favorisiert, bis ich auf die mit dem NS/CS gekommen bin. Die ist viel kürzer und wenn man einmal begriffen hat, wie sie funktioniert, IMHO auch besser lesbar.
Wenn man das mit den Feldsymbolen einmal begriffen hat und weiss wie sie funktionieren, .......DeathAndPain hat geschrieben:Ob das die richtige Konsequenz ist... in diesem Falle macht sich das ganz gut, aber in vielen Fällen machen Feldsymbole den Code eher unübersichtlich. Meistens ist es besser lesbar und verständlich, wenn man mit diskreten Variablen arbeitet (was auch hier möglich, in diesem speziellen Fall aber nicht überlegen gewesen wäre).
Natürlich gibt es auch Situationen, in denen man an Feldsymbolen nicht vorbeikommt.
Jeder Programmierer ist von sich selbst überzeugt sein Code sei der Beste.Unit605 hat geschrieben:Deine Postings klingen so, als ob immer nur Deine Loesung, die beste Loesung und best lesbare Loesung ist.
Ist dieser Thread hier nicht das beste Gegenbeispiel? Kürzer wird der Code bei Verwendung von Feldsymbolen allemal, weil man sich nämlich den INSERT oder MODIFY-Befehl spart. Aber er wird eben in vielen Fällen auch um Größenordnungen schlechter nachvollziehbar, insbesondere für andere Menschen als denjenigen, der den Code geschrieben hat, und da sage ich ganz klar, dass mir der Preis zu hoch ist.Die Postings von DeathAndPain erinnern mich ein wenig an die Demoszene, möglichst viel in möglichst wenig Code zu erreichen.
Code: Alles auswählen.
REPORT.
data: begin of watab,
id type n length 2,
value type c,
end of watab.
data: itab like standard table of watab.
perform append_itab
using: '_', '_', 'X', '_', '_', 'X', 'X', '_', '_', '_', 'X', '_'.
loop at itab assigning field-symbol(<wa>)
from 2 to lines( itab ) - 1
where value = abap_true.
FIND all occurrences of '_' in table itab
from sy-tabix - 1 to sy-tabix + 1
match count sy-index.
if sy-index = 2.
write: /01 sy-tabix.
endif.
endloop.
form append_itab using i_value type c.
append initial line to itab assigning field-symbol(<wa>).
<wa>-id = lines( itab ) + 1.
<wa>-value = i_value.
endform.