String in Soli-Tabelle umwandeln

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

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

String in Soli-Tabelle umwandeln

Beitrag von gs3rr4 (ForumUser / 59 / 22 / 0 ) »
Hallo zusammen!

Ich versuche einen String (mehr als 300 Zeichen) in ein SOLI_TAB Format zu bringen. Ziel ist es, einen in einer Text-Box erfassten Text per Mail zu versenden.

Leider war ich noch nicht zufrieden, nachdem ich mehrere (SO_STRING_TO_TAB, cl_document_bcs=>string_to_soli, SCMS_STRING_TO_FTEXT, ...) Funktionsbausteine/Methoden getestet habe. Da mein String länger als 255 Zeichen (eine Zeilenlänger der SOLI_TAB) ist, bricht er diesen dort immer ab. In der Mail ist an diesen Stellen dann ein ungewünschter Zeilenumbruch. Dies dann auch teilweise mitten in einem Wort.

Im Netz habe ich leider keine Lösung für das Problem gefunden.. also habe ich mich selbst daran gemacht, eine Methode zu schreiben:

Code: Alles auswählen.

    DATA:
      l_length TYPE i,
      l_string TYPE string,
      l_result TYPE match_result,
      ls_soli  TYPE soli.

    l_string = i_string.

    WHILE strlen( l_string ) > 1.
      FIND FIRST OCCURRENCE OF REGEX '##+' IN l_string RESULTS l_result RESPECTING CASE.
      IF sy-subrc <> 0.
        ls_soli-line = l_string.
        APPEND ls_soli TO rt_soli.
        EXIT.
      ENDIF.
      l_length = l_result-offset + l_result-length.
      ls_soli-line = l_string(l_length).
      l_string = l_string+l_length.
      APPEND ls_soli TO rt_soli.
      CLEAR: ls_soli, l_result.
    ENDWHILE.
Wenn ich die Methode so teste, dann funktioniert auch alles. Aber sobald ich sie in meinem Programm aufrufe, gibt er gleich im ersten Schleifendurchlauf nen sy-subrc = 4 aus.
Ich habe schon den Text aus dem Debugger kopiert und beim Testen der Methode eingefügt.. funktioniert wie gewollt.

Ich kann mir jetzt nur noch vorstellen, dass es evtl. etwas mit der Länge des Strings zu tun hat?
Hat vielleicht jmd ne Idee? Bin am verzweifeln.
Ich nehmen auch gerne nen FuBa, falls es einen gibt, der das ordentlich macht.

LG!

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


Re: String in Soli-Tabelle umwandeln

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
Die Methode cl_document_bcs=>string_to_soli ist korrekt und sollte verwendet werden.
An allen Stellen in denen du im Text einen Zeilenumbruch haben möchtest musst du händisch ein CR+LF (CL_ABAP_CHAR_UTILITIES=>CR_LF) einfügen. Die Zeilenlänge vom 255 hat KEINEN Einfluss auf das Abscheiden der Wörter oder das Auftauchen von Zeilenumbrüchen in der Mail. Die SOLI wird intern als "Stream" verarbeitet, sprich es werden am Ende alle Zeilen 1:1 in die Mail bzw. den Anhang übertragen OHNE spezielle Zeichen zwischen den Zeilen. Die Inhaltslänge gibt dabei an ab welchem Zeichen der entstehende Stream am Ende abgeschnitten wird, sodass verbleibende Leerzeichen in der letzten Zeile der SOLI nicht mitübertragen werden.

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

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: String in Soli-Tabelle umwandeln

Beitrag von gs3rr4 (ForumUser / 59 / 22 / 0 ) »
Ich hab das Problem noch nicht lösen können.
Wie genau kann mir denn dieses Attribut CL_ABAP_CHAR_UTILITIES=>CR_LF weiterhelfen?
Im Prinzip will ich ja Zeilenumbrüche mit meiner Methode bauen.
Ob ich das jetzt mit dem Attribut mache oder es so löse wie ich das getan habe sei mal dahingestellt.

Aber ich bekomme ja erst garkeinen schreibzugriff auf den String (habe ich das Gefühl).
Ich habe mal ein neues Programm erstellt wo ich nur meine Methode aufrufe. Dort habe ich dann einen String übergeben, der länger als 255 Zeichen ist.
Du hast Recht, es liegt nicht daran, denn dieser String wird korrekt verarbeitet.

Es muss also irgendwie daran liegen, dass ich den Text aus dem TextEdit hole, kann das vielleicht sein?

Re: String in Soli-Tabelle umwandeln

Beitrag von JHM (Top Expert / 1189 / 1 / 196 ) »
gs3rr4 hat geschrieben:Es muss also irgendwie daran liegen, dass ich den Text aus dem TextEdit hole, kann das vielleicht sein?
Wie holst du dir den String aus dem TextEdit (cl_gui_textedit)?
Mittels GET_TEXTSTREAM() bekommst du doch auch die Zeilenumbrüche des TextEdit mitgeliefert (text as string with carrige retruns and linefeeds).
Den String packst du in die von ADT genannte Methode: cl_document_bcs=>string_to_soli( ) und hast deine SOLI-Tab


Wobei du dir das mWn sparen könntest wenn du dir den TextEdit-Inhalt mittels GET_TEXT_AS_STREAM() direkt in die SOLI-Tab holst (text as stream with carrige retruns and linefeeds).

Code: Alles auswählen.

FIND FIRST OCCURRENCE OF REGEX '##+' IN l_string RESULTS l_result RESPECTING CASE.
Hier versuchst du doch genau die CR/LFs zu entfernen ;-) Schau dir mal den String als Hex-Werte im Debugger an. Dort werden CR/LF als # dargestellt, da sie keine Druckbaren sind.
Gruß Hendrik

Re: String in Soli-Tabelle umwandeln

Beitrag von gs3rr4 (ForumUser / 59 / 22 / 0 ) »
Den String aus dem TextEdit bekommen ich so:

Code: Alles auswählen.

    go_editor->get_textstream(
      IMPORTING
        text = l_text ).

    cl_gui_cfw=>flush( ).
Genau, ich versuche die zu entfernen, weil ich diesen Zeilenumbruch umgehen will. Der kommt mit allen hier genannten Methoden, weil eine Zeile in der soli_tab nur 255 Zeilen umfasst, automatisch.
Auch GET_TEXT_AS_STREAM() bringt das gleiche Ergebnis:

Bild

Und hier die Mail aus der SOST:

Bild

Wie man dort gut sehen kann wird das Wort "Beleg" beim zweiten e abgeschnitten.

Re: String in Soli-Tabelle umwandeln

Beitrag von gs3rr4 (ForumUser / 59 / 22 / 0 ) »
Okay ich habe gerade einen Hinweis aus einem anderen Forum bekommen.

Ich hole jetzt den Text mittels GET_TEXT_AS_R3TABLE aus dem TextEdit.
Funktioniert. :O

Seite 1 von 1

Vergleichbare Themen

1
Antw.
4571
Views
String -> XString umwandeln
von Kristian » 28.04.2005 09:16 • Verfasst in Basis
0
Antw.
1037
Views
Umwandeln eines XSTRING in STRING
von Kaiwalker » 08.08.2006 09:13 • Verfasst in ABAP® Core
5
Antw.
7431
Views
Umwandeln string <-> xstring OHNE Codepagekonvertierung
von a-dead-trousers » 17.07.2018 15:25 • Verfasst in ABAP® Core
0
Antw.
4604
Views
Datum umwandeln von java.sql.Date in String
von Challana » 22.08.2007 14:27 • Verfasst in Java & SAP®
3
Antw.
1617
Views
Interne Tabelle mit kopfzeile umwandeln
von kaufmann123 » 19.04.2018 11:16 • 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.