* Sollen in Texten mit dem ABAP-Befehl REPLACE Strings bzw.* Stringbestandteile ausgetauscht werden, so ergibt sich die* Schwierigkeit, dass der Befehl* REPLACE pattern LENGTH len* WITH repl_string* INTO field.* Zwar 'pattern' nur in der angegebenen Länge 'len' überprüft,* der Austausch allerdings immer das komplette Feld 'repl_string'* beinhaltet. Also, wenn z.B. pattern = '1234567890' und len = 5 und* repl_string = 'abcdefghijk' ist, wird im Feld* field = '0023012345x789000123' die Stelle '12345' zwar richtig* gefunden, dass Ergebnis im Feld 'field' sieht allerdings nachher* so aus: field = '00230abcdefghijkx789000123'. Es ist also die* komplette Länge des repl_string eingefügt worden.* Um das zu umgehen ist der Austauschwert zur Laufzeit dynamisch* zu definieren. Es soll also immer ein String in der angegeben Länge* durch einen in der angegebenen Länge ausgetauscht werden. Dadurch* werden auch enthaltene Leerzeichen erhalten.PARAMETERS: str_alt TYPE char32, " ab CHAR33 fehlen zu viele TYPES! str_lang TYPE i, " in dieser angegeben Länge austauschen str_neu TYPE char32. " neuer String<snip>* Hilfskonstruktion für dynamische Typ-Erstellung* notwendig, da der REPLACE-Befehl immer die komplette Stringlänge* von str_neu reinschreiben würde DATA: data_typ_austausch(6). MOVE str_lang TO data_typ_austausch. SHIFT data_typ_austausch RIGHT DELETING TRAILING ' '. OVERLAY data_typ_austausch WITH '000000'. data_typ_austausch(4) = 'CHAR'.* 'data_typ_austausch' enthält jetzt CHAR001 bis CHAR032 DATA: dref_data TYPE REF TO data. IF data_typ_austausch = 'CHAR02'.* einige wenige Types gibt es nicht, daher dann like DATA: char02(2). CREATE DATA dref_data LIKE char02. ELSEIF data_typ_austausch = 'CHAR04'. DATA: char04(4). CREATE DATA dref_data LIKE char04. ELSEIF data_typ_austausch = 'CHAR06'. DATA: char06(6). CREATE DATA dref_data LIKE char06. ELSEIF data_typ_austausch = 'CHAR09'. DATA: char09(9). CREATE DATA dref_data LIKE char09. ELSE. CREATE DATA dref_data TYPE (data_typ_austausch). ENDIF. FIELD-SYMBOLS: <neuer_string> TYPE ANY.* <neuer_string> bekommt jetzt den Typ CHAR01 bis CHAR32 ASSIGN dref_data->* TO <neuer_string>. MOVE str_neu TO <neuer_string>.<snip> REPLACE str_alt LENGTH str_lang WITH <neuer_string> INTO lines_gd-tdline.
Wenn Sie uns hier eine Nachricht hinterlassen, nehmen wir schnellstmöglich Kontakt zu Ihnen auf.
Firma
Name
Telefon
E-Mail
Betreff
Nachricht