Rechnen mit XStrings

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

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

Rechnen mit XStrings

Beitrag von AverageUser (ForumUser / 3 / 0 / 0 ) »
Hallo!

Ich bastele mir zur Laufzeit zwei hexadezimale Strings und möchte mit diesen Rechnungen durchführen (z.B: simple Addition).

Also so nach dem Prinzip

10 56 32 + 11 09 = 10 67 3B

Ich dachte Strings seien die Länge betreffend variabel bzw. unbgrenzt.
Nun stelle ich aber fest, dass mir der String immer nach 8 Stellen abgeschnitten wird:

31 30 30 30 30 + 35 35 35 35 = 65 65 65 65

An was könnte das liegen bzw. könnt Ihr dieses Verhalten bestätigen?
(Nicht, dass es nur am System liegt...)

Hier ein Code-Beispiel:

Code: Alles auswählen.

INITIALIZATION.
DATA: v_string1 TYPE string VALUE '10000',
v_xstring1 TYPE xstring,
v_string2 TYPE string VALUE '5555',
v_xstring2 TYPE xstring,
v_result TYPE xstring.

START-OF-SELECTION.
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = v_string1
IMPORTING
buffer = v_xstring1.
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = v_string2
IMPORTING
buffer = v_xstring2.

v_result = v_xstring1 + v_xstring2.
BREAK-POINT.
Schaut Euch v_result mal im Debugger an.
Danke Euch!

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


Re: Rechnen mit XStrings

Beitrag von a-dead-trousers (Top Expert / 4351 / 219 / 1166 ) »
Hi!

Intern wird hier (glaube ich) mit Integer gerechnet.
Wobei die 8 Zeichen sehr nach den 8 Byte klingen die für die "Adresse" eines Strings im Speicher reserviert werden.

Ich würde dir aber sowieso empfehlen, anstatt mit String bzw. XString zu rechnen auf DEC auszuweichen.
Nicht nur weil hier mehr Stellen für Berechnungen zur Verfügung stehen (ich glaub bis zu 16) sondern auch weil das Ergebnis aus den Berechnungen klar definiert ist.

Bei deiner Variante wandelt ABAP intern die Datentypen hin und her und bestimmt anhand der "kleinsten Übereinstimmung der Operatoren" die Genauigkeit der Berechnung. Mehr dazu in der ABAP-Hilfe unter "Operatoren".

lg ADT
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: Rechnen mit XStrings

Beitrag von black_adept (Top Expert / 3999 / 110 / 907 ) »
AverageUser hat geschrieben:Hallo!

Ich bastele mir zur Laufzeit zwei hexadezimale Strings und möchte mit diesen Rechnungen durchführen (z.B: simple Addition).
Was soll denn deiner Meinung nach das Ergebnis einer Addition von Strings sein? ABAP ist sehr beschränkt was das Überladen von Operatoren angeht. Und für "+" auf XSTRING ist bestimmt nicht das definiert was du gerade glaubst.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Rechnen mit XStrings

Beitrag von AverageUser (ForumUser / 3 / 0 / 0 ) »
Hallo ADT, hallo black_adept,

Danke für Eure Antworten!

Zur Erklärung: Ich möchte einen Satz in einer Tabelle anhand mehrerer Spaltenwerte suchen. Der Algorithmus der Suche rechnet mit dem "Wert" der gesuchten Zeile sowie den Werten einer Ober- bzw. Untergrenze.
Bei einer Spalte ist das kein Problem. Jedoch soll es - im Extremfall - mit allen Spalten funktionieren.
Die Idee war, die Werte der einzelnen benötigten Spalten in XString zu wandeln (da passt alles rein, Zahlen, Character, Strings, XStrings,...) und die einzelnen XStrings zu konkatenieren.
Man erhält einen langen XString, der den "Wert" der jeweiligen Zeile repräsentiert. Die XStrings sind vergleichbar (sprich, zum rechnen geeinget), da jede Stelle (bzw. jedes Byte) die gleiche Wertigkeit hat.

Ich habe die XString-Strategie nun verworfen und bin auf normale Character-Strings umgesattelt. Das Prinzip bleibt bestehen: Alles umwandeln (in Dezimalwerte diesmal) und konkatenieren.
black_adept hat geschrieben: Was soll denn deiner Meinung nach das Ergebnis einer Addition von Strings sein?
Es sollen die (in Strings gehaltenen) Dezimalwerte addiert werden.
Prinzipiell funktioniert es inzwischen, scheitert jedoch bei zu langen Werten (bzw. zu vielen Spalten).
Grund ist ein Überlauf bei der Berechnung. Wisst Ihr, wie die Laufzeitumgebung intern mit Strings rechnet? Mit packed, integer,...?

Re: Rechnen mit XStrings

Beitrag von AverageUser (ForumUser / 3 / 0 / 0 ) »
Nicht zuletzt hat mich auch Dein Hinweis draufgebracht, ADT.
a-dead-trousers hat geschrieben:Ich würde dir aber sowieso empfehlen, anstatt mit String bzw. XString zu rechnen auf DEC auszuweichen.
Nicht nur weil hier mehr Stellen für Berechnungen zur Verfügung stehen (ich glaub bis zu 16) sondern auch weil das Ergebnis aus den Berechnungen klar definiert ist.
Nur, dass ich die Dezimalzahlen in Strings halte, da ich die Verkettung brauche.

Hab mal einige Berechnungen mit Strings durchgespielt und es scheint, als ob intern mit gepackten Zahlen (p) gerechnet wird.
Ergebnisse bis 31 Stellen sind also möglich ;-)

Seite 1 von 1

Vergleichbare Themen

1
Antw.
1746
Views
Rechnen im ALV?
von schsch » 03.03.2005 08:05 • Verfasst in ABAP Objects®
6
Antw.
5615
Views
Mit Datum Rechnen
von Trulchen » 05.09.2012 08:47 • Verfasst in ABAP® für Anfänger
10
Antw.
8475
Views
Prozent rechnen im ALV
von Kleenmex » 21.05.2008 14:04 • Verfasst in ABAP Objects®
3
Antw.
4636
Views
Rechnen in SapScript?
von LosPablos » 10.05.2005 10:09 • Verfasst in ABAP® Core
1
Antw.
2134
Views
CML Zins auf Zinsertrag rechnen
von actihippo » 24.01.2008 08:14 • Verfasst in Financials

Ü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.