SAP Jobsuche bei DV-Treff
Pado
  • Pado
  • SAP Forum - Profi Thema Starter
vor 2 Jahre
Hallo SAP-Experten,

ich hoffe ein ABAP-Spezialist kann mir hier weiterhelfen:

ein Kundenprogramm zur Verbuchung einer Schnittstelle liest eine CSV-Datei in ABAP-Strukturen ein (OPEN/READ DATASET) und verbucht über Batch-Input. Eigentlich ganz easy.

Seit Neuestem kommen auch Datensätze, in denen Gebühren weggefallen sind, wodurch in der CSV-Datei nach einem Komma im letzten Zeichen nichts mehr steht. Importiert wird aber an dieser Stelle eine Raute '#', und zwar irgendwie als "Ersatzzeichen" für nichts. Diese Raute führt jetzt dazu, dass ein MOVE-Befehl von einer CHAR-Variablen in eine P-Variable (gepackte Zahl mit Komma usw.) zu einem Kurzdump führt, weil der Wert '0.0#' nicht als Zahl interpretiert werden kann.

Allerdings lässt sich das scheinbar nicht ohne Weiteres korrigieren. Die Raute lässt sich nämlich nicht wie ein normales Zeichen verwenden. Wenn ich die Raute loswerden will, funktionieren Befehle wie TRANSLATE, REPLACE, CS usw. nicht.

Beispielsweise springt das System nicht in die Ausführung bei

If lv_fee CS '#'.

Irgendwie hat diese Raute eine spezielle Funktion. Weiß vielleicht jemand von Euch, welche, und wie ich die Raute aus der Variablen rauskriegen kann?

Ich bin für jeden Tipp dankbar!

Beste Grüße

Rado


Beste Grüße

Rado

Förderer

wreichelt
vor 2 Jahre
Hallo Rado,

Ein # Zeichen in einem ABAP String kann auf ein Sonderzeichen oder ein unsichtbares Zeichen im String deuten. Ein REPLACE hilft hier dann nicht weiter. Das Zeichen # kann für verschiedene Werte stehen. Zum Beispiel für einen NULL Wert, CR_LF, NEWLINE oder auch FORM_FEED usw.

Mit Hilfe der Klasse cl_abap_char_utilities lassen sich folgende Zeichen löschen:

HORIZONTAL_TAB

VERTICAL_TAB

NEWLINE

CR_LF

FORM_FEED

BACKSPACE

REPLACE ALL OCCURRENCES OF CL_ABAP_CHAR_UTILITIES=>CR_LF IN l_temptext WITH ''.

REPLACE ALL OCCURRENCES OF CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB IN l_temptext WITH ''.

REPLACE ALL OCCURRENCES OF CL_ABAP_CHAR_UTILITIES=>VERTICAL_TAB IN l_temptext WITH ''.

REPLACE ALL OCCURRENCES OF CL_ABAP_CHAR_UTILITIES=>NEWLINE IN l_temptext WITH ''.

REPLACE ALL OCCURRENCES OF CL_ABAP_CHAR_UTILITIES=>FORM_FEED IN l_temptext WITH ''.

REPLACE ALL OCCURRENCES OF CL_ABAP_CHAR_UTILITIES=>BACKSPACE IN l_temptext WITH ''.

Gruß Wolfgang

Pado
  • Pado
  • SAP Forum - Profi Thema Starter
vor 2 Jahre
Hi Wolfgang,

vielen Dank für die schnelle Antwort. Auf diese Klasse bin ich kurz nach meinem Post gestoßen, und hatte insbsondere die Hoffnung auf "CR-LF". Aber leider hat das mit keinem der angegebenen Zeichen funktioniert. Sowas Hartnäckiges...

Danke und beste Grüße

Rado

Zitat von: wreichelt 

Hallo Rado,

Ein # Zeichen in einem ABAP String kann auf ein Sonderzeichen oder ein unsichtbares Zeichen im String deuten. Ein REPLACE hilft hier dann nicht weiter. Das Zeichen # kann für verschiedene Werte stehen. Zum Beispiel für einen NULL Wert, CR_LF, NEWLINE oder auch FORM_FEED usw.

Mit Hilfe der Klasse cl_abap_char_utilities lassen sich folgende Zeichen löschen:

HORIZONTAL_TAB

VERTICAL_TAB

NEWLINE

CR_LF

FORM_FEED

BACKSPACE

REPLACE ALL OCCURRENCES OF CL_ABAP_CHAR_UTILITIES=>CR_LF IN l_temptext WITH ''.

REPLACE ALL OCCURRENCES OF CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB IN l_temptext WITH ''.

REPLACE ALL OCCURRENCES OF CL_ABAP_CHAR_UTILITIES=>VERTICAL_TAB IN l_temptext WITH ''.

REPLACE ALL OCCURRENCES OF CL_ABAP_CHAR_UTILITIES=>NEWLINE IN l_temptext WITH ''.

REPLACE ALL OCCURRENCES OF CL_ABAP_CHAR_UTILITIES=>FORM_FEED IN l_temptext WITH ''.

REPLACE ALL OCCURRENCES OF CL_ABAP_CHAR_UTILITIES=>BACKSPACE IN l_temptext WITH ''.

Gruß Wolfgang


Beste Grüße

Rado

wreichelt
vor 2 Jahre
Hallo Rado,

.vielleicht so, nur aus dem Leerzeichen dann eine Null

* alle Vorkommen, die nicht [a-zA-Z0-9_] entsprechen, durch '_' ersetzen

REPLACE ALL OCCURRENCES OF REGEX '[^\w]+' IN lv_string WITH '_'.

Gruß Wolfgang