ePrivacy and GPDR Cookie Consent by Cookie Consent
Willkommen Gast! Um alle Funktionen zu aktivieren müssen Sie sich Anmelden oder Registrieren.

Mitteilung

Icon
Error

Optionen
Gehe zum aktuellsten Beitrag Gehe zum letzten Ungelesenen
Offline Pado  
#1 Geschrieben : Dienstag, 22. März 2022 08:54:19(UTC)
Pado

Beiträge: 51
Mann
Germany
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
Jobangebote

Nehmen Sie an dieser Diskussion teil! SAP FORUM - SAP Community LoginHier registrieren.

Offline wreichelt  
#2 Geschrieben : Dienstag, 22. März 2022 09:35:44(UTC)
wreichelt

Beiträge: 2,717
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
Offline Pado  
#3 Geschrieben : Dienstag, 22. März 2022 10:05:16(UTC)
Pado

Beiträge: 51
Mann
Germany
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 Gehe zum zitierten Beitrag
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
Offline wreichelt  
#4 Geschrieben : Dienstag, 22. März 2022 12:16:19(UTC)
wreichelt

Beiträge: 2,717
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
Benutzer, die gerade dieses Thema lesen
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.

- Impressum / Datenschutz -