Replace and condense
Replace replaces characters within a string. If a character is substituted with a space, you can use Condense to remove the space.
REPLACE '.' WITH ',' INTO w_tmpstr
Example:
w_matnr = '3617203-100'
REPLACE '-' WITH '' INTO w_matnr.
CONDENSE w_matnr NO-GAPS.
w_matnr will now contain: 3617203100
Concatenating
CONCATENATE f1 ... fn INTO g.
Addition:
... SEPARATED BY h
Example:
CONCATENATE 'Der er sket en fejl i opdateringen'
ITAB-ID ITAB-HKONT ITAB-DMBTR INTO ERRTXT
SEPARATED BY SPACE.
SPACE is an ABAP keyword.
Substrings and Formatted Write and Move
You can use either WRITE or MOVE.
Using WRITE the format of the target field will be the same as when you write to a list. That means that the settings in the user's master record for decimal point and date are taking into account.
If you use MOVE, the decimal point is always a periode.
Syntax:
move t1+offset(length) to t2
write t1+offset(length) to t2
Example:
data: t1(10) type c, t2(10) type c.
t1 = '0123456789'.
move t1+3(5) to t2.
t2 will contain 34567
Instead of move you could have used write. In this example the result would have been the same.
Removing leading/trailing characters.
SHIFT myvar left deleting leading '0'.
SHIFT myvar right deleting trailing '0
Search for a string within a string
String1 = 'This is a string'.
SEARCH String1 for 'is'.
If the search string is found SY-SUBRC = 0
SY-FDPOS = 5 because the strinmg "is" starts at offset 5.
You can also use the Relational Operators for Character-Like Fields
CO, CN, CA, NA .... see the ABAP documentation for further informat
Word wrapping/Split
You can use the fucntion module SWA_STRING_SPLIT to split a tring into
smaller strings or use function module SWA_STRING_SPLIT
-----
>Does someone know how to word wrap fields from one internal table to
>a field in another internal table, when the fields have a different
>lengths ?
>E.g.
>Table 1 has a field with a line length of 50 characters, and I want
>to place each line in table one in one or more lines in table 2 that
>has a field length of 10:
>table1-field1 = 'This is a very long line that should be wrapped'
>should be
>table2-Field1:
>sy-tabix = 1: This is a
>sy-tabix = 2: very long
>sy-tabix = 3: line that
>sy-tabix = 4: should be
>sy-tabix = 5: wrapped
This example shows how to split the text in a field of one internal
table and place it into a field in another internal table that has
a shorter size
REPORT z_hfa_test .
DATA:
* Table containing texts that has to be split
BEGIN OF it_longstrings OCCURS 0,
line TYPE string,
END OF it_longstrings,
* Output table from function SWA_STRING_SPLIT
it_string_components LIKE swastrtab OCCURS 0 WITH HEADER LINE,
* Table containg the resukting strings
BEGIN OF it_shortstrings OCCURS 0,
line(10) TYPE c,
END OF it_shortstrings,
start-of-selection.
* Add some lines to it_longstrings
it_longstrings-line = '123456789012345 Hallo this is a very long'.
APPEND it_longstrings.
it_longstrings-line = 'line, that has to be split.'.
APPEND it_longstrings.
it_longstrings-line = 'The line has to be split into lines of 10
characters'.
APPEND it_longstrings.
* Split each line of it_longstrings into lines with length 10
* The resuklting lines are palced in table it_string_components
LOOP AT it_longstrings.
CLEAR it_string_components. REFRESH it_string_components.
CALL FUNCTION 'SWA_STRING_SPLIT'
EXPORTING
input_string = it_longstrings-line
max_component_length = 10
* TERMINATING_SEPARATORS =
* OPENING_SEPARATORS =
TABLES
string_components = it_string_components
* EXCEPTIONS
* MAX_COMPONENT_LENGTH_INVALID = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Add the lines to table
LOOP AT it_string_components.
it_shortstrings-line = it_string_components-str.
APPEND it_shortstrings.
ENDLOOP.
ENDLOOP.
END-OF-SELECTION.
LOOP AT it_shortstrings.
WRITE: / it_shortstrings-line.
ENDLOOP.
7. Using CA - Contains any (CO, CN, NA)
belob = '300120.00'.
if belob CA '.'.
l_pos = sy-fdpos.
move mystring+l_pos to mydec.
if mydec CO '.0'.
move mystring+0(l_pos) to mystring2.
endif.
endif.
Splitting delimited string
Instead of placing the substring ind l_output, it could be palced in an
internal
table using this syntax:
SPLIT f AT g INTO TABLE itab.
Each substring will be placed in its own table row. In the example below, the table would have 5 rows.
Note that all output fields must be of type char or string
REPORT YDK8HENFR_TEST1 line-size 80.
data: l_string(132) type c.
data: begin of l_output,
name(40) type c,
age(10) type c,
address(40) type c,
city(40) type c,
zipcode(4) type c,
end of l_output.
start-of-selection.
l_string = 'John;28;My street;My city;3000'.
split l_string at ';' into l_output-name
l_output-age
l_output-address
l_output-city
l_output-zipcode.
write: / l_output-name.
write: / l_output-age.
write: / l_output-address.
write: / l_output-city.
write: / l_output-zipc
No comments:
Post a Comment