Beiträge: 51  
|
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 Bearbeitet vom Benutzer Dienstag, 22. März 2022 08:54:56(UTC)
| Grund: Falsche Formatierung |
Beste Grüße
Rado
|
|
|
|
|
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
|
|
|
|
Beiträge: 51  
|
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
|
|
|
|
|
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
|
|
|
|
Das Forum wechseln
Du kannst keine neue Themen in diesem Forum eröffnen.
Du kannst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge nicht löschen.
Du darfst deine Beiträge nicht editieren.
Du kannst keine Umfragen in diesem Forum erstellen.
Du kannst nicht an Umfragen teilnehmen.