Code: Alles auswählen.
clear: zahler, zielstring.
do.
concatenate
zielstring
quellstringA+zaehler(1)
into zielstring.
concatenate
zielstring
quellstringB+zaehler(1)
into zielstring.
add 1 to zaehler.
enddo.
Ralf war schneller, trotzdem noch ein lauffähiges Testprogramm:ralf.wenzel hat geschrieben:Man kann auch einfach eine Laufvariable in einer do-Schleife nehmen und sowas wie
Code: Alles auswählen.
DATA: g_string1 TYPE string,
g_string2 TYPE string,
g_erg TYPE string,
g_len1 TYPE i,
g_len2 TYPE i,
g_pos TYPE i.
PARAMETERS p_strg1 TYPE c LENGTH 1024 DEFAULT 'ACEGIK'.
PARAMETERS p_strg2 TYPE c LENGTH 1024 DEFAULT 'BDFHJL'.
START-OF-SELECTION.
* Strings übernehmen
g_string1 = p_strg1.
g_string2 = p_strg2.
* Länge der Strings übernehmen
g_len1 = STRLEN( g_string1 ).
g_len2 = STRLEN( g_string2 ).
DO g_len1 TIMES.
* Postion String bestimmen
g_pos = sy-index - 1.
* Zeichen aus String1 übernehmen
CONCATENATE g_erg
g_string1+g_pos(1)
INTO g_erg.
* Gibt es noch Zeichen in String2?
IF sy-index <= g_len2.
CONCATENATE g_erg
g_string2+g_pos(1)
INTO g_erg.
ENDIF.
ENDDO.
* Wenn String2 länger als String1 dann hier noch den rest übernehmen
IF g_len1 < g_len2.
* Restlänge bestimmen
g_pos = g_len2 - g_len1.
CONCATENATE g_erg
g_string2+g_len1(g_pos)
INTO g_erg.
ENDIF.
* Ergebnis ausgeben
WRITE: / g_erg.
Ich hoffe, im Arbeitsleben kommentierst du deine Programme besser. Das werden eine Menge Entwickler nicht verstehen; die Welt ist voller ABAP-Programmierer, die mit (für deine Maßstäbe) sehr einfachen Mitteln arbeiten.Dele hat geschrieben:replace all occurrences of regex '(.{1,1})' in string1 with '$0@' .
replace all occurrences of regex '(.{1,1})' in string2 with '$0@' .
overlay string1+1 with string2 only '@'.
Wie immer man solche Aussagen bewerten möchte... Unter einem mangelnden Ego scheinst du ja nicht zu leiden.Ralf hat geschrieben:Dementsprechend kommentiere ich so viel, wie nötig, damit auch ein weniger begabter Programmierer meine Konstrukte verstehen kann.
Ab welchen Release gibt es den Zusatz regex '(.{1,1})' für den Replace Befehl? In einem ECC 5.0 gibt es einen Syntax-Fehler: Das Wort "REGEX" ist reserviert.Dele hat geschrieben:replace all occurrences of regex '(.{1,1})' in string1 with '$0@' .
replace all occurrences of regex '(.{1,1})' in string2 with '$0@' .
Ja, das geht auch.Frage - kann ich (.{1,1}) auch durch (.) ersetzen um es noch einfacher zu machen?
Weiß ich nicht genau - auf jeden Fall ab ECC 6.0.Ab welchen Release gibt es den Zusatz regex '(.{1,1})' für den Replace Befehl? In einem ECC 5.0 gibt es einen Syntax-Fehler: Das Wort "REGEX" ist reserviert.