REPLACE Sonderzeichen mit blank

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
7 Beiträge • Seite 1 von 1
7 Beiträge Seite 1 von 1

REPLACE Sonderzeichen mit blank

Beitrag von Foppa (ForumUser / 26 / 1 / 0 ) »
Hallo,

ich habe folgendes Problemchen. Und zwar bekomme ich Zeilenketten, die z.B. das Zeichen \n beinhalten aber eigentlich normaler Text ist. Es kommt nur vor, daß diese Zeilen in Excel bzw. Access landen und dann ein Zeilenumbruch fabriziert wird.

Also habe ich versucht mit Replace das Zeichen mit einem Leerzeichen danach entsprechend umzusetzen.

Wenn ich jetzt z.B.

Code: Alles auswählen.

REPLACE ALL OCCURRENCES OF '\' IN LINE WITH '\ ' 
nutze, wird das Leerzeichen ignoriert.
Nutze ich ich die veraltete Syntax mit

Code: Alles auswählen.

REPLACE '\' WITH '\ ' INTO line. 
wird es korrekt umgesetzt aber leider nur ein einzelnes Zeichen.

Hat irgendjemand eine Idee? Der Text, den ich betrachte ist vom Typ string.
Gruß,
Foppa

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von Thomas R. (Expert / 755 / 78 / 34 ) »
Hallo Foppa,
auf die Schnelle nur die unschöne Lösung des zweistufigen Ersetzens:

REPLACE ALL OCCURRENCES OF '\' IN LINE WITH '\ #'.
REPLACE ALL OCCURRENCES OF '#' IN LINE WITH space.

sofern # in dem Text nicht vorkommen kann. Sonst muß ein anderes Zeichen gewählt.

MfG
Thomas R.

Beitrag von Foppa (ForumUser / 26 / 1 / 0 ) »
Hallo Thomas,

über die Lösung hatte ich auch schon nachgedacht aber mich hat in dem Zusammenhang die Auswahl des "Dummy" Zeichens etwas gestört, da so ein Zeichen ja auch evtl. im Text dann vorkommen kann.

Gruß,
Foppa

Beitrag von Thomas R. (Expert / 755 / 78 / 34 ) »
Hallo Foppa,
es gibt bestimmt eine elegantere Lösung, nur die habe ich nicht parat...
Aber hier im Forum kennt bestimmt jemand eine elegantere Lösung. Nur, wenn es mal schnell gehen muss tut es oft die "dumme Lösung".

MfG
Thomas R.

Re: REPLACE Sonderzeichen mit blank

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
Foppa hat geschrieben: Hat irgendjemand eine Idee? Der Text, den ich betrachte ist vom Typ string.
Aus der Hilfe:
Für das Ersetzen von zeichenartigen Unterfolgen oder das Ersetzen durch Inhalte, die schließende Leerzeichen enthalten, müssen sub_string bzw. new den Datentyp string haben.
Wenn ich das richtig verstehe müsste dann:

Code: Alles auswählen.

DATA: sub type string value '\',
      new type string value '\ ',
      line type string. "Das hast du ja schon

REPLACE ALL OCCURRENCES OF sub IN line WITH new.
das machen was du suchst.
Gruß Hendrik

Beitrag von Thomas R. (Expert / 755 / 78 / 34 ) »
Hallo Hendrik,
das hatte ich auf die schnelle auch versucht und es mißlang mir (620).

Hast Du eine Ahnung warum bzw. hast Du Dein Beispiel getestet? (Bei mir läuft es mal wieder nicht) :(

MfG
Thomas R.

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
Thomas R. hat geschrieben:Hast Du eine Ahnung warum bzw. hast Du Dein Beispiel getestet?
Mein Beispiel war ungetestet. Hab es gerade ausprobiert und es funktioniert nicht.
Das Problem ist, dass in der Anweisung

Code: Alles auswählen.

DATA: new TYPE SRTING VALUE '\ '.
an new nur der Backslash zugwiesen wird, das Leerzeichen wir ignoriert.

Auch eine direkte Zuweisung funktioniert nicht, da das schließende Leerzeichen ebenfalls ignoriert wird.

Code: Alles auswählen.

new = '\ '.
MOVE '\  TO new.
Nach ein wenig Ausprobieren hab ich aber einen Weg gefunden der funktioniert:

Code: Alles auswählen.

 
DATA: sub TYPE string VALUE '\',
      new TYPE string VALUE '\ ',
      line TYPE string VALUE '\n\hallo\test\was weiß ich\'.


WRITE: / 'Vor Replace ohne Translate:', 30 line.
REPLACE ALL OCCURRENCES OF SUBSTRING sub IN line WITH new .
WRITE: / 'Nach Replace ohne Translate:', 30 line.


* Hier wird das schließende Leerzeichen in new erzeugt
new = '\x'.
TRANSLATE new using 'x '.


WRITE: /,/ 'Vor Replace mit Translate:', 30 line.
REPLACE ALL OCCURRENCES OF SUBSTRING sub IN line WITH new .
WRITE: / 'Nach Replace mit Translate:', 30 line.
Der Trick liegt hierbei beim Translate. Nur auf diesem Weg habe ich in new ein schließendes Leerzeichen hineinbekommen.

Wenn du das Beispiel mal debuggst und dann auf HEX-Anzeige umschaltest (Die Lupe neben der Variable) siehst du den Unterschied. (Das Leerzeichen wird mit 20 dargestellt)
Gruß Hendrik

Seite 1 von 1

Vergleichbare Themen

6
Antw.
1253
Views
Datumsfeld auf Blank setzen
von Tron » 16.05.2019 13:29 • Verfasst in ABAP® Core
0
Antw.
808
Views
Kundenauftragsposition mit Kontierungstyp ' ' (blank)
von SAPCOFI » 12.12.2006 15:43 • Verfasst in Financials
0
Antw.
1215
Views
3
Antw.
3175
Views
0,00 wird im ALV Grid als Blank dargestellt
von Guest » 23.06.2005 15:27 • Verfasst in Dialogprogrammierung
4
Antw.
1874
Views
Write Datenfeld 'length' standard 00, Feld soll Blank bleibe
von dorenthe » 23.01.2012 22:07 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1599
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8206