Code: Alles auswählen.
Die Umwandlung eines Strings in eine Struktur kommt z.B. auch oft bei der IDOC-Verarbeitung vor. Dort liegen die Daten in einem DATA-Feld mit üblicherweise 2000 Character-Länge. Die ersten 18 Char die MATNR, dann 4 Char für die VKORG usw. Wenn jetzt nicht nur Characterfelder in der Struktur enthalten sind funktioniert ein einfacher MOVE unter Unicode nicht mehr.
** MOVE i_zsctapos-data TO i_strudv09.
* In Unicode muss gecasted werden
FIELD-SYMBOLS: <zppstdv09> TYPE zppstdv09.
ASSIGN i_zsctapos-data TO <zppstdv09> CASTING.
i_strudv09 = <zppstdv09>.
Code: Alles auswählen.
neue_Struktur = String.
move-corresponding neue_Struktur into alte_Struktur.
Code: Alles auswählen.
Types: Begin of ty_struc,
Feld1 type c lenght 12,
Feld2 type p (15),
Feld3 type p(12),
Feld4 type d(5),
Feld5 type n(10),
end of ty_struc.
data: ls_struc type ty_struc,
Var1 type lchr length 1000.
Var1 = '1232141231241355hddfze5tdhfdhdvb'.
FIELD-SYMBOLS: <fs_struc> type ty_struc.
ASSIGN Var1 to <fs_struc> CASTING.
ls_struc = <fs_struc>.
" ls_struc = Var1 <--------- Dies ist ja nicht mehr möglich, wegen Unicode.
L0w-RiDer braucht es aber in die entgegengesetzte Richtung.wreichelt hat geschrieben:ein gepacktes Feld kann mittels Write...to...exponent 0 in ein Char-Feld geschrieben werden.
RTTI bzw. CL_ABAP_TYPEDESCR und die zugehörigen Subklassen.L0w-RiDer hat geschrieben:Alternative gefragt:
Ich habe nun eine Struktur in der nun auch in gewissen Feldern Hexadezimale Werte vorkommen. Könnte ich z.B. drüber loopen oder mit READ oder ähnliches abfragen ob darin das Feld z.B. Packed ist und es dann umwandeln lassen vom Hexadezimalen Wert in den Ursprungswert. Ist sowas in der Richtung möglich?
Code: Alles auswählen.
loop at lt_fkkdefrev assigning <fs_fkkdefrev>.
check sy-tabix <> 1.
clear sy-subrc.
while sy-subrc = 0.
assign component sy-index of structure <fs_fkkdefrev> to field-symbol(<ld_feld>).
check sy-subrc = 0.
CL_ABAP_DATADESCR=>DESCRIBE_BY_DATA(<ld_feld>)
ENDWHILE.
endloop.