Komma durch Punkt ersetzen

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
10 Beiträge • Seite 1 von 1
10 Beiträge Seite 1 von 1

Komma durch Punkt ersetzen

Beitrag von Barney (Specialist / 104 / 20 / 9 ) »
Hallo,

ich habe ein Programm geerbt und darf nun im fremden Code korrigieren. Aus Zeitgründen will ich natürlich nur so wenig wie nötig rumfummeln...

Es geht um eine Formroutine, in der offenbar ein Komma durch einen Punkt ersetzt werden soll. Dabei wird p_str als string übergeben. Inhaltlich ist eine Zahl, aber wie gesagt: ich will da kein großes Rad drehen müssen.

Mein Vorgänger hatte folgenden interessanten Ansatz:

Code: Alles auswählen.

  
    DATA: len   TYPE i,
        part1 LIKE gv_string1,
        part2 LIKE gv_string1.

  CHECK p_str IS NOT INITIAL.
  REPLACE ',' IN p_str WITH ''.
  REPLACE ALL OCCURRENCES OF '.' IN p_str WITH ''.
  len = strlen( p_str ).
  len = len - 2.
  part1 = p_str(len).
  part2 = p_str+len(2).
  CONCATENATE part1 '.' part2 INTO p_str.
Wenn nun p_str = 1 ist, dumpt die Routine verständlicher weise, denn die Länge ist 1 und 1-2 = -1 und part1 = p_str(-1) ist kein gute Idee.

Mein Ansatz wäre jetzt folgender:

Code: Alles auswählen.

  data lf_dcpfm type XUDCPFM.                 

  SELECT SINGLE dcpfm FROM usr01              
                      INTO lf_dcpfm           
                     WHERE bname EQ sy-uname. 

  IF lf_dcpfm IS INITIAL. "German format      

    REPLACE '.' IN p_str WITH ''.             
    REPLACE ',' IN p_str WITH '.'.            

  ELSEIF lf_dcpfm EQ 'X'. "English Format     
    REPLACE ',' IN p_str WITH ''.             
  ENDIF.                                      
In beiden Fälle sollte die Ausgabe 1234.56 sein.

Wenn ich ehrlich bin, weiß ich nicht, ob es intelligentere Ansätze gäbe. Habt Ihr vielleicht geschicktere Ideen?

Tot ziens

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


Re: Komma durch Punkt ersetzen

Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
Ich hätte drei reguläre Ausdrücke anzubieten:
replace all occurrences of regex '(\d)[,\.](\d)\z' in l_string with '$1.$2\0'.
replace all occurrences of regex '(\d*)(\D*)' in l_string with '$1'.
replace all occurrences of regex '(\d\d)\z' in l_string with '.$1'.
Jedoch mehr als 2 Kommastellen verursachen einen Fehler.

Re: Komma durch Punkt ersetzen

Beitrag von Barney (Specialist / 104 / 20 / 9 ) »
Dele hat geschrieben:
Jedoch mehr als 2 Kommastellen verursachen einen Fehler.
Dann hätten wir bei Vietnamesischen D_ONG ein Problem... :D

P.S.: Wieso macht die Forensoftware aus dem Wort D_ONG >>SPAM<<?

Re: Komma durch Punkt ersetzen

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Barney hat geschrieben:
Dele hat geschrieben: P.S.: Wieso macht die Forensoftware aus dem Wort D_ONG >>SPAM<<?
Weil das ein unanständiges Wort im englischen ist! ;)
Gruß,
der Matze

Re: Komma durch Punkt ersetzen

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Moin Barney,
ich kenne diese "Umwandelei" von den Sapscript formularen.
Die beste Möglichkeit das Problem in den Griff zu bekommen :
http://www.abapforum.com/forum/viewtopi ... =1&t=19101
lg Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Komma durch Punkt ersetzen

Beitrag von black_adept (Top Expert / 4086 / 126 / 940 ) »
Barney hat geschrieben:

Code: Alles auswählen.

    REPLACE '.' IN p_str WITH ''.             
    REPLACE ',' IN p_str WITH '.'. 
Ich fürchte das 1. Replace funktioniert nicht, - der Punkt wird dabei in ein Leerzeichen umgewandelt. Du müsstest `` anstatt ' ' verwenden oder nachher noch ein Condense anwenden.

Alternative Idee mittels des Translate Befehls anstatt der 2 Replace-Statements und anschließendem Condense:

Code: Alles auswählen.

Translate p_str using ',.. '.
Condense p_str no-gaps.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Komma durch Punkt ersetzen

Beitrag von Barney (Specialist / 104 / 20 / 9 ) »
Hallo Stefan,

erstmal Danke für den Tipp. Letzendlich scheint es ein Geschmacksfrage zu sein, ob man TRANSLATE oder REPLACE nimmt. Wobei das TRANSLATE in einer Zeile etwas eleganter aussieht. Aber die Notwendigkeit für eine Fallunterscheidung zwischer deutsche vs. englische Notation bleibt auch hier bestehen, wenn ich das richtig sehe.
black_adept hat geschrieben:
Barney hat geschrieben:

Code: Alles auswählen.

    REPLACE '.' IN p_str WITH ''.             
    REPLACE ',' IN p_str WITH '.'. 
Ich fürchte das 1. Replace funktioniert nicht, - der Punkt wird dabei in ein Leerzeichen umgewandelt. Du müsstest `` anstatt ' ' verwenden oder nachher noch ein Condense anwenden.
Zu Deiner Befürchtung, dass der erste Replace nicht funktioniert, kann ich sagen, dass im Test mein Conding genau das gemacht hat, was tun sollte. Nun weiß ich nicht, was Du mit
Du müsstest `` anstatt ' ' verwenden
meintest. Vielleicht wird das im Text falsch dargestellt: ich nutze die "normalen" Hochkommata bzw. einfachen Anführungszeichen. Was wäre der Unterschied zu ´´?

Tot ziens

Re: Komma durch Punkt ersetzen

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
`` ist ein String während '' eine Zeichenfolge darstellt.
Der Unterschied ist, dass bei Ersterem LEERZEICHEN am ENDE berücksichtigt werden und bei Zweiterem nicht.

Code: Alles auswählen.

CONCATENATE 'Test   ' 'Test   ' INTO ld_test. "= 'TestTest'
CONCATENATE `Test   ` `Test   ` INTO ld_test. "= `Test   Test   `
Es stimmt schon, dass das bei deinem Beispiel kein Problem macht.

Code: Alles auswählen.

REPLACE '.' IN p_str WITH ''.
* ist gleich wie
REPLACE '.' IN p_str WITH ``.
Aber wenn man wirklich etwas mit einem Leerzeichen ersetzen möchte muss man das mit `` machen.

Code: Alles auswählen.

REPLACE '.' IN p_str WITH ` `.
* ist NICHT gleich wie
REPLACE '.' IN p_str WITH ' '.
lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Barney

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Komma durch Punkt ersetzen

Beitrag von Barney (Specialist / 104 / 20 / 9 ) »
Barney hat geschrieben:
Aber die Notwendigkeit für eine Fallunterscheidung zwischer deutsche vs. englische Notation bleibt auch hier bestehen, wenn ich das richtig sehe.


Denkfehler meinerseits: intern interessiert sich SAP gar nicht für Notation.

Re: Komma durch Punkt ersetzen

Beitrag von Barney (Specialist / 104 / 20 / 9 ) »
So, weil das Feld im Ausgabeformat selber wieder ein Currencyfeld mit Verknüpfung auf eine Währung ist, reicht in meinem Fall eine einfache Komma-Punkt-Ersetzung nicht aus. Beim Japanischen Yen wurde der Wert in der Liste mit Faktor 100 angezeigt... :-(

Meine Lösung sieht nun wie folgt aus:

Code: Alles auswählen.

DATA lf_curr       TYPE zmm_netpr_old.
  DATA lf_temp_value TYPE p DECIMALS 5.
  DATA lf_value      TYPE p DECIMALS 5.
  DATA lf_waers      TYPE waers.
  DATA lf_currdec    TYPE currdec.
  DATA lf_decimals   TYPE i.

  SELECT SINGLE waers FROM tcurc
                      INTO lf_waers
                     WHERE waers EQ p_waers.

  IF sy-subrc IS INITIAL.
    SELECT SINGLE currdec FROM tcurx
                          INTO lf_currdec
                         WHERE currkey EQ lf_waers.

    IF sy-subrc IS INITIAL.
      lf_decimals = 2 - lf_currdec.
    ELSE.
      lf_currdec = 2.
      lf_decimals = 0.
    ENDIF.

*--------------------------------------------------------------------*
* in the end the format of the value should be 1234567.89
*--------------------------------------------------------------------*
    IF p_dcpfm IS INITIAL. "German format

      TRANSLATE p_str USING ',.. '.
      CONDENSE p_str NO-GAPS.

    ELSEIF p_dcpfm EQ 'X'. "English format

      TRANSLATE p_str USING ', '.
      CONDENSE p_str NO-GAPS.

    ELSEIF p_dcpfm EQ 'Y'. "whatever format

      TRANSLATE p_str USING ',.'.
      CONDENSE p_str NO-GAPS.

    ENDIF.  " IF p_dcpfm IS INITIAL.

    lf_temp_value = p_str.

    CATCH SYSTEM-EXCEPTIONS conversion_errors = 1.
      lf_curr = lf_temp_value / 10 ** lf_decimals.
    ENDCATCH.
    IF sy-subrc IS INITIAL.

      MOVE lf_curr TO p_str.
      CONDENSE p_str NO-GAPS.

    ENDIF.

  ENDIF. "IF sy-subrc IS INITIAL.
Sie berücksichtigt, dass z.B. der Yen keine Dezimalstellen hat.

Tot ziens

Seite 1 von 1

Vergleichbare Themen

1
Antw.
8428
Views
Komma & Punkt bei Convertierung
von RiffRaff » 10.03.2005 16:50 • Verfasst in ABAP® Core
3
Antw.
2422
Views
Excel Benutzereinstellung Komma Punkt
von HH_ABAP » 18.09.2018 09:39 • Verfasst in ABAP® für Anfänger
16
Antw.
1514
Views
Dynpro Eingabe von Zahl mit Komma
von stony007_de » 19.01.2022 08:32 • Verfasst in ABAP® für Anfänger
10
Antw.
3474
Views
Komma etc. in Tabulator in int. Tabelle konvertieren
von macler » 14.08.2006 16:32 • Verfasst in ABAP® Core
12
Antw.
6225
Views
Zeichenkette nach komma holen
von derkano » 22.06.2011 22:48 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Daten an Tabelle binden
vor 14 Stunden von Bright4.5 1 / 303
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1943
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8546