Feldinhalte konvertieren

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

Feldinhalte konvertieren

Beitrag von Mrs. Hilflos (Specialist / 225 / 0 / 0 ) »
Hallo,
kann mir jemand sagen, wie ich einen Character-Wert in den dazugehörigen Hexadezimal-Wert umwandeln kann?
:cry:
Danke im voraus.
Ciao
Eure Mrs. Hilflos

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


Beitrag von Azreal (Specialist / 182 / 1 / 0 ) »
Hi,

probier mal folgendes:

Code: Alles auswählen.

DATA: lv_Hex type x, lv_Char type c. 

lv_Char = 'A'.
move lv_char to lv_hex.
write lv_hex.
hoffe ich konnte der dame in not helfen :wink:

Gruß Azreal

Nochmals Problem zum Konvertieren

Beitrag von Mrs. Hilflos (Specialist / 225 / 0 / 0 ) »
Hi,
erst einmal danke für die schnelle Antwort.
Leider hat sie nicht geholfen. Ich formuliere mein Problem mal genauer. Ich möchte eine Excel-Datei einlesen, die im Format Txt (getrennt durch Tabs) gespeichert wurde. Wenn ich diese Datei zeilenweise in eine Stringvariable einlese, erhalte ich im Debugger als Zeichen für den Tab einmal '/h/' oder '#'. An dieses Zeichen möchte ich rankommen, damit ich den String danach aufteilen kann. '#' scheint hexadezimal wohl '09' zu sein. Ich komme aber einfach nicht an dieses Trennzeichen ran.
Vielleicht hat dazu jemand eine Lösung.
Danke.
Gruß
Mrs. Hilflos :roll:

Beitrag von black_adept (Top Expert / 4158 / 136 / 959 ) »
Hallo,

ich würde mal folgendes vorschlagen:

1.) Benutze einen der Bausteine WS_UPLOAD, GUI_UPLOAD, UPLOAD und setze da den parameter FILETYPE auf den Wert DAT.
Damit wird ein durch TAB getrenntes File feldweise in deine Tabelle gestellt.

2.) Wenn die Datei auf dem Backend liegt und du somit obige Bausteine nicht zur Verfügung hast tut es folgende Anweisung:

Code: Alles auswählen.

DATA: tab TYPE x VALUE '09'.
SPLIT zeile AT tab INTO TABLE splittab.
live long and prosper
Stefan
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von Mrs. Hilflos (Specialist / 225 / 0 / 0 ) »
Hi Stefan,
danke, für die Tipps.
Der FuBa WS_Upload hat leider nicht funktioniert. Problem dabei ist auch, dass er eine Struktur nimmt in die er einliest. Was zur Folge hat, dass er immer die Felder der Struktur mit der vordefinierten Länge füllt, auch wenn das entsprechende Feld mit weniger Zeichen belegt ist.
Die zweite Variante habe ich nach endlosem Rumprobieren dann auch herausgefunden. Trotzdem vielen Dank für die Mühe.
In den unendlichen Weiten von ABAP gibt es noch einiges zu entdecken.

peace and long life 8)
Mrs. Hilflos

Hexa-Werte Tab-Stop

Beitrag von meinrad ( / / 0 / 3 ) »
Hallo,
Wenn Du eine Ahnung hast, welches Hexa-zeichen Du erwartest und Du einen String splitten willst, dann geht das recht einfach.
Die enzelne ZEile der internen Tablee muss nur groß genug gewählt werden.
DATA TAB_STOP TYPE X VALUE '09'.

SPLIT T01-ZEILE AT TAB_STOP INTO SPLIT_FELD1
SPLIT_FELD2 ... .

Nun noch eine Ausführung zu Hexa-werten:

(Release 4.5B )

Mir ist keine Möglichkeit bekannt,ohne Aufwand Felder vom irgendeinem Typ in Hexa-Felder (und umgekehrt) zu zerlegen/zu übertragen ohne dass die SAP-Konvertieungsregeln greifen. d.h.
DATA: C_FELD(2) TYPE C Value 'G',
X_FELD(2) TYPE X.

X_FELD = C_FELD. "geht nicht !

Da muss man den Hexawert "4720" mit Tricks reinbringen.
Ich habe mir im Rahmen eines Test mit Float-Zahlen zuerst eine ASCII-Code-Tabelle selbst-aufgebaut.
DATA: BEGIN OF ASCII_TAB OCCURS 256,
NUMC(3) TYPE N, "Werte 000-255
DEC(2) TYPE P, "Werte 000-255 , voranstehendes in Grün
HEX_VIS(2) TYPE C, "Hexa-wert sichtbar/ausdruckbar mit MOD /DIV
HEX_C(1) TYPE C, "Hexawert vom TYP C für Vergleich: IF
HEX(1) TYPE X, "Hexawert
CONTROL(3) TYPE C, "Für ACK, BEL, CR, LF FF (Zukunft)
GRAPHIC(1) TYPE C, "Buchstaben Ziffern Sonderzeichen (Zukunft)
END OF ASCII_TAB.

DATA: ...
* TRICK !! Strucktur über den zu untersuchenden Bereich legen !!!
BEGIN OF ERGEBNIS_STRUC,
FLOAT TYPE F,
END OF ERGEBNIS_STRUC,
* Tabelle, in der das zu Untersuchende Feld als Array von Bytes liegt
BEGIN OF ERGEBNIS_BYTE OCCURS 8,
BYTE,
END OF ERGEBNIS_BYTE.

*Aufbau einer ASCII-CODE-TABELLE
DO 256 TIMES.
ASCII_TAB-DEC = SY-INDEX - 1.
ASCII_TAB-HEX = SY-INDEX - 1.
ASCII_TAB-NUMC = SY-INDEX - 1.
X_DIV = ASCII_TAB-DEC DIV 16.
X_MOD = ASCII_TAB-DEC MOD 16.
BYTE_C = X_DIV.
IF X_DIV > 9.
CASE X_DIV.
WHEN 10.
BYTE_C = 'A'.
WHEN 11.
BYTE_C = 'B'.
WHEN 12.
...
WHEN 15.
BYTE_C = 'F'.
ENDCASE.
ENDIF.
ASCII_TAB-HEX_VIS(1) = BYTE_C. "1. Halbyte sichtbar in 1. Byte

BYTE_C = X_MOD.
IF X_MOD > 9.
CASE X_MOD.
WHEN 10.
BYTE_C = 'A'.
...
WHEN 15.
BYTE_C = 'F'.
ENDCASE.
ENDIF.
ASCII_TAB-HEX_VIS+1(1) = BYTE_C. "2. Halbyte sichtbar in 2. Byte
ASCII_TAB-HEX_C(1) = ASCII_TAB+8(1).
APPEND ASCII_TAB.
ENDDO.


* Übertragung in Struktur, um mit OFFSET Zugriff auf ein einzelnes Byte
* zu ermöglich
ERGEBNIS_STRUC-FLOAT = ERGEBNIS_FLOAT.
DO 8 TIMES. "FELDLÄNGE TIMES hier 8
H_IX = SY-INDEX - 1.
ERGEBNIS_BYTE-BYTE = ERGEBNIS_STRUC+H_IX(1).
APPEND ERGEBNIS_BYTE. "Tabelle von 1-Byte-Feldern
ENDDO.

---
WRITE:/
'Float Intern Hexadecimal per Programm byteweise aufbereitet:',
' "'.
LOOP AT ERGEBNIS_BYTE. "Loop über Jedes einzelne Byte (hier 8)
LOOP AT ASCII_TAB WHERE
* Vergleich von Characterfeldern, aber jedes möglicher BIT-Muster (256)
HEX_C = ERGEBNIS_BYTE-BYTE.
ENDLOOP.
IF SY-SUBRC NE 0.
WRITE 'FUNZT NICHT'.
ELSE.
WRITE ASCII_TAB-HEX_VIS.
ENDIF.
ENDLOOP.

So kann man jedes beliebige Feld auf Hexa-werte hin untersuchen.
(Geringe Anpassung)

Gruß Meinrad

Re: Hexa-Werte Tab-Stop

Beitrag von dks ( / / 0 / 3 ) »
Hallo Meinrad,

ich schreibe nur ein paar Zeilen weil ich nicht weiß ob es Dich noch über dieses Forum gibt?
Hätte ein paar sehr Intressante Fragen.

Gruß dks


Wenn Du eine Ahnung hast, welches Hexa-zeichen Du erwartest und Du einen String splitten willst, dann geht das recht einfach.
Die enzelne ZEile der internen Tablee muss nur groß genug gewählt werden.
DATA TAB_STOP TYPE X VALUE '09'.

SPLIT T01-ZEILE AT TAB_STOP INTO SPLIT_FELD1
SPLIT_FELD2 ... .

Nun noch eine Ausführung zu Hexa-werten:

(Release 4.5B )

Mir ist keine Möglichkeit bekannt,ohne Aufwand Felder vom irgendeinem Typ in Hexa-Felder (und umgekehrt) zu zerlegen/zu übertragen ohne dass die SAP-Konvertieungsregeln greifen. d.h.
DATA: C_FELD(2) TYPE C Value 'G',
X_FELD(2) TYPE X.

X_FELD = C_FELD. "geht nicht !

Da muss man den Hexawert "4720" mit Tricks reinbringen.
Ich habe mir im Rahmen eines Test mit Float-Zahlen zuerst eine ASCII-Code-Tabelle selbst-aufgebaut.
DATA: BEGIN OF ASCII_TAB OCCURS 256,
NUMC(3) TYPE N, "Werte 000-255
DEC(2) TYPE P, "Werte 000-255 , voranstehendes in Grün
HEX_VIS(2) TYPE C, "Hexa-wert sichtbar/ausdruckbar mit MOD /DIV
HEX_C(1) TYPE C, "Hexawert vom TYP C für Vergleich: IF
HEX(1) TYPE X, "Hexawert
CONTROL(3) TYPE C, "Für ACK, BEL, CR, LF FF (Zukunft)
GRAPHIC(1) TYPE C, "Buchstaben Ziffern Sonderzeichen (Zukunft)
END OF ASCII_TAB.

DATA: ...
* TRICK !! Strucktur über den zu untersuchenden Bereich legen !!!
BEGIN OF ERGEBNIS_STRUC,
FLOAT TYPE F,
END OF ERGEBNIS_STRUC,
* Tabelle, in der das zu Untersuchende Feld als Array von Bytes liegt
BEGIN OF ERGEBNIS_BYTE OCCURS 8,
BYTE,
END OF ERGEBNIS_BYTE.

*Aufbau einer ASCII-CODE-TABELLE
DO 256 TIMES.
ASCII_TAB-DEC = SY-INDEX - 1.
ASCII_TAB-HEX = SY-INDEX - 1.
ASCII_TAB-NUMC = SY-INDEX - 1.
X_DIV = ASCII_TAB-DEC DIV 16.
X_MOD = ASCII_TAB-DEC MOD 16.
BYTE_C = X_DIV.
IF X_DIV > 9.
CASE X_DIV.
WHEN 10.
BYTE_C = 'A'.
WHEN 11.
BYTE_C = 'B'.
WHEN 12.
...
WHEN 15.
BYTE_C = 'F'.
ENDCASE.
ENDIF.
ASCII_TAB-HEX_VIS(1) = BYTE_C. "1. Halbyte sichtbar in 1. Byte

BYTE_C = X_MOD.
IF X_MOD > 9.
CASE X_MOD.
WHEN 10.
BYTE_C = 'A'.
...
WHEN 15.
BYTE_C = 'F'.
ENDCASE.
ENDIF.
ASCII_TAB-HEX_VIS+1(1) = BYTE_C. "2. Halbyte sichtbar in 2. Byte
ASCII_TAB-HEX_C(1) = ASCII_TAB+8(1).
APPEND ASCII_TAB.
ENDDO.


* Übertragung in Struktur, um mit OFFSET Zugriff auf ein einzelnes Byte
* zu ermöglich
ERGEBNIS_STRUC-FLOAT = ERGEBNIS_FLOAT.
DO 8 TIMES. "FELDLÄNGE TIMES hier 8
H_IX = SY-INDEX - 1.
ERGEBNIS_BYTE-BYTE = ERGEBNIS_STRUC+H_IX(1).
APPEND ERGEBNIS_BYTE. "Tabelle von 1-Byte-Feldern
ENDDO.

---
WRITE:/
'Float Intern Hexadecimal per Programm byteweise aufbereitet:',
' "'.
LOOP AT ERGEBNIS_BYTE. "Loop über Jedes einzelne Byte (hier 8)
LOOP AT ASCII_TAB WHERE
* Vergleich von Characterfeldern, aber jedes möglicher BIT-Muster (256)
HEX_C = ERGEBNIS_BYTE-BYTE.
ENDLOOP.
IF SY-SUBRC NE 0.
WRITE 'FUNZT NICHT'.
ELSE.
WRITE ASCII_TAB-HEX_VIS.
ENDIF.
ENDLOOP.

So kann man jedes beliebige Feld auf Hexa-werte hin untersuchen.
(Geringe Anpassung)

Gruß Meinrad[/quote]

Seite 1 von 1

Vergleichbare Themen

0
Antw.
1553
Views
Append-Struktur Feldinhalte gelöscht!!
von vvu » 02.04.2008 10:13 • Verfasst in ABAP® Core
3
Antw.
1380
Views
Interne Tabellen: Feldinhalte vergleichen
von Mario Reum » 09.10.2019 21:36 • Verfasst in ABAP® Core
5
Antw.
4240
Views
Abweichende Feldinhalte in Duplikaten finden
von Patrick1982 » 09.02.2021 17:43 • Verfasst in ABAP® für Anfänger
2
Antw.
3360
Views
Datum konvertieren
von Trulchen » 21.02.2014 13:28 • Verfasst in ABAP® für Anfänger
3
Antw.
4362
Views
Konvertieren von DEC 23,4 in DEC 23,2 ( CURR )
von thommasj » 25.06.2008 11:06 • Verfasst in ABAP® für Anfänger

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.