ralf.wenzel hat geschrieben: ↑30.10.2024 10:00Weil ich ein Freund der Kürze bin. Und der ist ja gut zu lesen wenn man den anständig formatiert.
Code: Alles auswählen.
zielstruc = VALUE #( BASE CORRESPONDING #( quellstruc )
field1 = switch #( quellstruc-field1 when 'B' then 'B'
else 'P' )
).
Code: Alles auswählen.
zielstruc = SWITCH #( quellstruc-field1 WHEN 'B' THEN CORRESPONDING #( quellstruc MAPPING field1 = B )
ELSE CORRESPONDING #( quellstruc MAPPING field1 = P ) ).
Code: Alles auswählen.
zielstruc = CORRESPONDING #( quellstruc ).
IF zielstruc-field1 <> 'B'.
zielstruc-field1= 'P'.
ENDIF.
Code: Alles auswählen.
zielstruc = CORRESPONDING #( quellstruc ).
REPLACE REGEX '[^B]' IN zielstruc-field1 WITH 'P'.
Was "leichter lesbar" ist, ist Ansichtssache. Ich zum Beispiel kenne mich mit regulären Ausdrücken nicht aus und würde daher bei Deinem zweiten Vorschlag zu kämpfen haben. Da finde ich meinblack_adept hat geschrieben: ↑30.10.2024 00:47@Ralf: Rein aus Interesse. Du hast mit deiner Frage gezeigt, dass es selbst für langjährig ABAP Erfahrene manchmal kompliziert ist einen komplexeren Ausdruck korrekt zu implementieren. Was spricht eigentlich dagegen eines der deutlich lesbareren Konstrukte (...) zu verwenden.
Code: Alles auswählen.
zielstruc = SWITCH #( quellstruc-field1 WHEN 'B' THEN CORRESPONDING #( quellstruc MAPPING field1 = B )
ELSE CORRESPONDING #( quellstruc MAPPING field1 = P ) ).
Glücklicherweise habe ich ja noch einen 1. Vorschlag angeboten, der trivial ist.DeathAndPain hat geschrieben: ↑30.10.2024 16:25Was "leichter lesbar" ist, ist Ansichtssache. Ich zum Beispiel kenne mich mit regulären Ausdrücken nicht aus und würde daher bei Deinem zweiten Vorschlag zu kämpfen haben.
Hast du deinen Vorschlag mal ausprobiert? M.E. darf man beim Mapping keine Konstanten verwenden sondern bei MAPPING t1 = s1 müssten t1 und s1 jeweils Felder der Ziel- bzw. Quellstruktur sein.DeathAndPain hat geschrieben: ↑30.10.2024 16:25Da finde ich meinerheblich leichter zu lesen.Code: Alles auswählen.
zielstruc = SWITCH #( quellstruc-field1 WHEN 'B' THEN CORRESPONDING #( quellstruc MAPPING field1 = B ) ELSE CORRESPONDING #( quellstruc MAPPING field1 = P ) ).
Ich hab den mit VALUE genommen, weil ich diverse Konstanten noch vergeben musste (was mir zum Fragezeitpunkt nicht klar war)
Richtig, und wenn Du Dir Ralfs Originalpost anschaust, dann suggeriert dieses, dass es in der Struktur eine Spalte B bzw. P gibt (field1 natürlich auch). Ansonsten wäre es ein Missverständnis hinsichtlich der Frage, was Ralf gemeint hat und kein ABAP-syntaktisches Problem. Mein Lösungsansatz für die Problemstellung, dynamisch abhängig vom Wert einer Spalte der Quelltabelle eine Spalte hierhin oder dorthin zu mappen, funktioniert; es muss nur ggf. der Spaltenname in meiner Lösung angepasst werden.black_adept hat geschrieben: ↑30.10.2024 19:28Hast du deinen Vorschlag mal ausprobiert? M.E. darf man beim Mapping keine Konstanten verwenden sondern bei MAPPING t1 = s1 müssten t1 und s1 jeweils Felder der Ziel- bzw. Quellstruktur sein.DeathAndPain hat geschrieben: ↑30.10.2024 16:25Da finde ich meinerheblich leichter zu lesen.Code: Alles auswählen.
zielstruc = SWITCH #( quellstruc-field1 WHEN 'B' THEN CORRESPONDING #( quellstruc MAPPING field1 = B ) ELSE CORRESPONDING #( quellstruc MAPPING field1 = P ) ).
Nein, es gibt eine Spalte field1, die entweder mit 'B' oder 'P' gefüllt werden soll. Ich hielt das für offensichtlich.DeathAndPain hat geschrieben: ↑30.10.2024 20:32Richtig, und wenn Du Dir Ralfs Originalpost anschaust, dann suggeriert dieses, dass es in der Struktur eine Spalte B bzw. P gibt (field1 natürlich auch).
Code: Alles auswählen.
zielstruc = CORRESPONDING #( quellstruc MAPPING field1 = switch #( quellstruc-field1
when 'B' then 'B'
else 'P' ) ).
Loriot: "Ach, was?"DeathAndPain hat geschrieben: ↑30.10.2024 20:49Ok, dann hattest Du die Syntax des CORRESPONDING-Konstrukts komplett missverstanden.
Code: Alles auswählen.
zielstruc = corresponding #(
quellstruc mapping
field1 = default cond #(
when quellstruc-field1 = 'B' then 'B'
else 'P'
)
).
Code: Alles auswählen.
data(lv_field1) = quellstruc-field1.
zielstruc = corresponding #(
quellstruc mapping
field1 = default cond #(
when lv_field1 = 'B' then 'B'
else 'P'
)
).