2007 Apr 26 8:10 AM
Hi,
if i have a String like 'M[ey]er' how could i extract all information that is not within the brackets so it would give me 'Mer' then ?
Thanks,
2007 Apr 26 8:31 AM
SPLIT string at '[' into x1 x2.
SPLIT x2 at ']' into x3 x4.
concatenate x1 x4 into x5 then x5 will contain the required string 'Mer'
Hi,
Following is the code in addition to what all has been said by others
data : string(20),
string1(20),
string2(20),
string3(20),
string4(20),
del value '[',
del2 value ']'.
string = 'M[ey]er'.
split string at del into string1 string2.
*write / string1.
split string2 at del2 into string3 string4.
*write / string4.
concatenate string1 string4 into string1.
write / string1. "Gives you Mer
2007 Apr 26 8:14 AM
u can use keyword
SPLIT 'PRABHU' at 'R' into x1 x2 .
http://help.sap.com/saphelp_47x200/helpdata/en/fc/eb3400358411d1829f0000e829fbfe/frameset.htm
after that u can use concatenate keyword to get into single field.
Regards
Prabhu
2007 Apr 26 8:31 AM
SPLIT string at '[' into x1 x2.
SPLIT x2 at ']' into x3 x4.
concatenate x1 x4 into x5 then x5 will contain the required string 'Mer'
2007 Apr 26 9:05 AM
thank you, here is what i got:
DATA:
w_string TYPE string ,
w_sub_string TYPE string,
w_int TYPE i,
zaehl TYPE i,
w_char,
w_counter TYPE i,
fl_flag.
w_string = i_s2.
w_int = STRLEN( w_string ).
w_counter = 0.
DO w_int TIMES.
zaehl = zaehl + 1.
w_char = w_string+w_counter(1).
IF w_char EQ '['.
zaehl = zaehl - 1.
WRITE:/ zaehl.
CLEAR fl_flag.
ENDIF.
IF fl_flag = 'X'.
CONCATENATE w_sub_string w_char INTO w_sub_string.
ENDIF.
IF w_char EQ ']'.
zaehl = 0.
fl_flag = 'X'.
ENDIF.
w_counter = w_counter + 1.
ENDDO.
WRITE:/ zaehl.
i_s2 = w_sub_string.
ENDFORM.Now how do i have to adapt the code that i can do the following:
If i have the string 'Jose[ph]M[ue]ller' then i want to get '[][ph][?][ue][]'.
I will surely reward points generously!
2007 Apr 26 9:16 AM
data str type string.
data str1 type string.
data str2 type string.
data str3 type string.
data str4 type string.
data str5 type string.
str = 'p[riya]nk'.
split str at '[' into str1 str2.
write : / str1, str2.
split str2 at ']' into str3 str4.
write 😕 str3, str4.
if strlen( str1 ) = 1.
str1 = '?'.
else.
str1 = '*'.
endif.
if strlen( str4 ) = 1.
str4 = '?'.
else.
str4 = '*'.
endif.
concatenate str1 '[' str3 ']' str4 into str5.
write 😕 str5.
Message was edited by:
Priyank Jain
2007 Apr 26 9:57 AM
HI..
Just paste this code..
data:
w_string type string value 'ram[mohan]hh[rao]kk[nagam]',
w_len type i,
w_cnt type i.
data:
w_output type string,
w_temp type string.
data:
itab like standard table of w_string with header line.
replace all occurrences of '[' in w_string with ']'.
<b>split w_string at ']' into table itab.</b>
<b>loop at itab .</b>
w_cnt = sy-tabix mod 2.
if w_cnt eq 1.
w_temp = '[*]'.
else.
w_temp = itab.
endif.
<b>concatenate w_output w_temp into w_output.</b>
clear w_temp.
<b>endloop.</b>
<b>write: w_output.</b>
2007 Apr 26 9:58 AM
Thank you, but i am on 4.6 so "all occurrences" wont work, sorry!
2007 Apr 26 10:27 AM
Hi..
try with this..<b>without replace</b> stmt..
data:
w_string(50) type C value 'ram[mohan]hh[rao]kk[nagam]',
w_len type i,
w_cnt type i.
data:
w_output type string ,
w_temp type string.
data:
itab like standard table of w_string with header line.
w_len = strlen( w_string ).
do w_len times.
w_cnt = sy-index - 1.
if w_string+w_cnt(1) eq '['.
w_string+w_cnt(1) = ']'.
endif.
enddo.
<b>split w_string at ']' into table itab.</b>
<b>loop at itab .</b>
w_cnt = sy-tabix mod 2.
if w_cnt eq 1.
w_temp = '[*]'.
else.
w_temp = itab.
endif.
concatenate w_output w_temp into w_output.
clear w_temp.
<b>endloop.
write w_output.</b>
2007 Apr 26 10:34 AM
Hi Rammohan,
this is quite close to what i need, thank you! Could you adjust it once more for me ?
What i need is when i have 'ram[mohan]hh[rao]k[nagam]'. The desired output would be '[][mohan][][rao][?][nagam]'.
Where do i need to change coding ?
Thank you for your help!
2007 Apr 26 10:49 AM
Hi Clemens Leider ,
Now paste this code...modified..solves ur problem..
data:
w_string(50) type C value 'ram[mohan]hh[rao]k[nagam]',
w_len type i,
w_cnt type i.
data:
w_output type string ,
w_temp type string.
data:
itab like standard table of w_string with header line.
w_len = strlen( w_string ).
do w_len times.
w_cnt = sy-index - 1.
if w_string+w_cnt(1) eq '['.
w_string+w_cnt(1) = ']'.
endif.
enddo.
split w_string at ']' into table itab.
loop at itab .
w_cnt = sy-tabix mod 2.
if w_cnt eq 1.
<b>w_len = strlen( itab ).
if w_len = 1.
w_temp = '[?]'.
else.
w_temp = '[*]'.
endif.</b>
else.
w_temp = itab.
endif.
concatenate w_output w_temp into w_output.
clear w_temp.
endloop.
write: w_output.
2007 Apr 26 10:53 AM
Thank you very much, now it works as i wanted it to, but one last question remains - how to use this logic with a string rather than type c ?
2007 Apr 26 10:55 AM
2007 Apr 26 10:58 AM
Hi, i am afraid it doesnt because i get an error stating that at writing positions at fields of type string or xstring no offsetlenght is allowed - it refers to:
if w_string+w_cnt(1) eq '['.
w_string+w_cnt(1) = ']'.
endif.
can you help me ?
2007 Apr 26 11:09 AM
Hi,
not to hijack the thread but see if this helps: Modified version of Ram's code
REPORT ZTEST.
data:
w_string type string value 'ram[mohan]hh[rao]k[nagam]',
*w_string(50) type c value 'ram[mohan]hh[rao]k[nagam]',
w_len type i,
w_cnt type i.
data:
w_output type string ,
w_temp type string.
data:
itab like standard table of w_string with header line.
w_len = strlen( w_string ).
*do w_len times.
*w_cnt = sy-index - 1.
*
*if w_string+w_cnt(1) eq '['.
*w_string+w_cnt(1) = ']'.
*endif.
*
*enddo.
translate w_string using '[]'.
split w_string at ']' into table itab.
loop at itab .
w_cnt = sy-tabix mod 2.
if w_cnt eq 1.
w_len = strlen( itab ).
if w_len = 1.
w_temp = '[?]'.
else.
w_temp = '[*]'.
endif.
else.
w_temp = itab.
endif.
concatenate w_output w_temp into w_output.
clear w_temp.
endloop.
write: w_output.
2007 Apr 26 11:15 AM
Hi ,
Modified <b>...works with string</b> also...
data:
w_string type string value 'ram[mohan]hh[rao]kkk[ram]h[nagam]',
w_len type i,
w_cnt type i.
data:
w_output type string ,
w_temp type string.
data:
itab like standard table of w_string with header line.
translate w_string to upper case.
w_len = strlen( w_string ).
do w_len times.
w_cnt = sy-index - 1.
if w_string+w_cnt(1) na sy-abcde.
concatenate w_temp ']' into w_temp.
else.
concatenate w_temp w_string+w_cnt(1) into w_temp.
endif.
enddo.
w_string = w_temp.
split w_string at ']' into table itab.
loop at itab .
w_cnt = sy-tabix mod 2.
if w_cnt eq 1.
w_len = strlen( itab ).
if w_len = 1.
w_temp = '[?]'.
else.
w_temp = '[*]'.
endif.
else.
w_temp = itab.
endif.
concatenate w_output w_temp into w_output.
clear w_temp.
endloop.
write: w_output.
2007 Apr 26 9:52 AM
Hi,
Following is the code in addition to what all has been said by others
data : string(20),
string1(20),
string2(20),
string3(20),
string4(20),
del value '[',
del2 value ']'.
string = 'M[ey]er'.
split string at del into string1 string2.
*write / string1.
split string2 at del2 into string3 string4.
*write / string4.
concatenate string1 string4 into string1.
write / string1. "Gives you Mer
2007 Apr 26 9:56 AM
Hi does this function also respect that there can be more than one [xyz] in a string ?
2007 Apr 26 10:01 AM
Try this:
REPORT ZTEST.
data: v_name type string value 'Me[yjghje]r'.
data: str1 type string.
data: str2 type string.
data: dummy type string.
split v_name at '[' into dummy str1.
split str1 at ']' into str2 dummy.
concatenate '[' str2 ']' into str2.
replace all occurrences of str2 in v_name with ''.
write:/ v_name.
| User | Count |
|---|---|
| 6 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |