Code: Alles auswählen.
SPLIT zeile AT trennzeichzen INTO:...
Code: Alles auswählen.
data:
lt_string type stringtab,
lt_match type match_result_tab.
field-symbols:
<ld_string> type string,
<ls_match> type match_result.
* Zuerst mal alle trennzeichzen entfernen die zwischen zwei " stehen
FIND ALL OCCURRENCES OF REGEX '"[^"]*"?' IN zeile RESULTS lt_match.
loop at lt_match assigning <ls_match>.
REPLACE ALL OCCURRENCES OF trennzeichzen IN zeile+<ls_match>-offset(<ls_match>-length) WITH cl_abap_charutilities=>cr_lf+1.
* Um Speicher zu schonen gleich die Ergebnisse weglöschen
delete lt_match.
endloop.
SPLIT zeile AT trennzeichzen INTO TABLE lt_string.
*jetzt die trennzeichzen wiederherstellen
LOOP AT lt_string assigning <ld_string>.
REPLACE ALL OCCURRENCES OF cl_abap_charutilities=>cr_lf+1 IN <ld_string> WITH trennzeichzen.
* Damit die unschönen " auch noch weg sind
REPLACE ALL OCCURRENCES OF '"' IN <ld_string> WITH space.
ENDLOOP.
Code: Alles auswählen.
data:
ld_length type i,
lt_match type match_result_tab.
field-symbols:
<ls_match01> type match_result,
<ls_match02> type match_result.
FIND ALL OCCURRENCES OF '"' IN zeile RESULTS lt_match.
loop at lt_match assigning <ls_match01>.
* Zwei Fundstellen ergeben die Länge des Textes unter "
read table lt_match assigning <ls_match02> index 2.
if sy-subrc eq 0.
ld_length = <ls_match02>-offset - <ls_match01>-offset.
else.
ld_length = strlen( zeile ) - <ls_match01>-offset.
endif.
REPLACE ALL OCCURRENCES OF trennzeichzen IN zeile+<ls_match01>-offset(ld_length) WITH cl_abap_charutilities=>cr_lf+1.
* Beide bereits verarbeitete Ergebnisse wieder löschen.
delete lt_match index 1.
delete lt_match index 1.
endloop.