‎2006 Jul 13 1:18 PM
Hi Experts,
I have one field in ITAB like this.
|1|Item1|ThisisItem1|2|Item2|ThisisItem2|3|Item3|ThisisItem3|.
So i want to extract like: 1 item1 thisisitem1
2 item2 thisisitem2
3 item3 thisisitem3
that means individually i have to extract them and i have to put in different variables..can any body tell me how can we do that?
‎2006 Jul 13 1:26 PM
Hi ravi ,
do as follwos:
split data at '|' into table itab.
loop at itab.
v_temp = sy-tabix mod 3.
case v_temp.
when 0.
itab_new-field1 = itab-data.
append itab_new.
when 1.
itab_new-field2 = itab-data.
when 2.
itab_new-field3 = itab-data.
endcase.
endloop.
Regards,
Ravi
‎2006 Jul 13 1:19 PM
hello,
Split your data as,
SPLIT data at '|' into itab-f11 itab-f12 itab-f21 itab-f22
Then move data to your final table as requried.
like
it_final-f1 = itab-f11.
it_final-f2 = itab-f12.
append it_final.
it_final-f1 = itab-f21.
it_final-f2 = itab-f22.
append it_final.
....
Regards,
Naimesh
‎2006 Jul 13 1:20 PM
hi Ravi,
Loop that internal table and put them in to another internal table ...
loop at itab.
split at '|' into itab-f1.....
endloop.
‎2006 Jul 13 1:26 PM
Hi ravi ,
do as follwos:
split data at '|' into table itab.
loop at itab.
v_temp = sy-tabix mod 3.
case v_temp.
when 0.
itab_new-field1 = itab-data.
append itab_new.
when 1.
itab_new-field2 = itab-data.
when 2.
itab_new-field3 = itab-data.
endcase.
endloop.
Regards,
Ravi
‎2006 Jul 13 1:37 PM
Hi Ravi,
Thanks.But y u have given Sy-tabix mod 3?
Ther may no.of item in the runtime..Then how will we do it..
After splitting i have to update a DB Table.
‎2006 Jul 13 1:52 PM
Hi ravi,
The mod 3 is for saying that your final internal table will have 3 fields and it can handle any number of records.
Regards,
ravi
‎2006 Jul 13 1:59 PM
Yes ravi..u r right.
My final_itab will be having 3 fields like Pnum,Pname and Pdes.
Now ihave itab and final_itab.And separator '|' is in itab.
Now can you give the complte code for the above?
‎2006 Jul 13 3:50 PM
hi ravi,
i am not sure whether the proceedure is correct or not , try this
REPORT YCHATEST.
DATA:BEGIN OF ITAB OCCURS 0,
TEXT(300),
END OF ITAB.
DATA:BEGIN OF ITAB2 OCCURS 0,
COMP(100),
END OF ITAB2.
DATA:BEGIN OF IT_FINAL OCCURS 0,
NUM TYPE I,
TEXT1(25),
TEXT2(25),
END OF IT_FINAL.
DATA:L_TABIX LIKE SY-TABIX,
L_LINES TYPE I.
ITAB-TEXT =
'|1|Item1|ThisisItem1|2|Item2|ThisisItem2|3|Item3|ThisisItem3|'.
APPEND ITAB.
CLEAR ITAB.
LOOP AT ITAB.
SPLIT ITAB-TEXT AT '|' INTO TABLE ITAB2.
ENDLOOP.
DELETE ITAB2 WHERE COMP = SPACE.
DESCRIBE TABLE ITAB2 LINES L_LINES.
LOOP AT ITAB2.
IF SY-TABIX = 1.
L_TABIX = SY-TABIX .
ENDIF.
READ TABLE ITAB2 INDEX L_TABIX.
IT_FINAL-NUM = ITAB2-COMP.
L_TABIX = L_TABIX + 1.
READ TABLE ITAB2 INDEX L_TABIX.
IT_FINAL-TEXT1 = ITAB2-COMP.
L_TABIX = L_TABIX + 1.
READ TABLE ITAB2 INDEX L_TABIX.
IT_FINAL-TEXT2 = ITAB2-COMP.
IF L_TABIX = L_LINES.
APPEND IT_FINAL.
CLEAR IT_FINAL.
EXIT.
ELSE.
L_TABIX = L_TABIX + 1.
ENDIF.
APPEND IT_FINAL.
CLEAR IT_FINAL.
ENDLOOP.
LOOP AT IT_FINAL.
WRITE : / IT_FINAL-NUM , IT_FINAL-TEXT1 , IT_FINAL-TEXT2.
ENDLOOP.
‎2006 Jul 13 1:27 PM
Hai Ravi Kumar
First Split your Data like the following way
data : str type string value '|1|Item1|ThisisItem1|2|Item2|ThisisItem2|3|Item3|ThisisItem3|'.
split str at '|' into itab-f11 itab-f12 itab-f21 itab-f22
Then move data to your final table as requried.
like
itab1-f1 = itab-f11.
itab1-f2 = itab-f12.
append itab1.
itab1-f1 = itab-f21.
itab1-f2 = itab-f22.
append itab1.
Thanks & regards
Sreeni
‎2006 Jul 13 1:28 PM
Hi
Try a code like this:
DATA: BEGIN OF T OCCURS 0,
FIELD(80),
END OF T.
DATA: ITAB(1000) OCCURS 0 WITH HEADER LINE.
DATA: COUNT TYPE I,
LEN TYPE I.
ITAB =
'|1|Item1|ThisisItem1|2|Item2|ThisisItem2|3|Item3|ThisisItem3|'.
APPEND ITAB.
LOOP AT ITAB.
SPLIT ITAB+1 AT '|' INTO TABLE T.
LOOP AT T.
LEN = STRLEN( T-FIELD ).
IF COUNT = 0.
WRITE /.
ENDIF.
WRITE: T-FIELD(LEN).
COUNT = COUNT + 1.
IF COUNT = 3.
COUNT = 0.
ENDIF.
ENDLOOP.
ENDLOOP.
Max
‎2006 Jul 13 1:53 PM
TRy this code bellow:
REPORT zpeluka.
DATA: lc_line(100) TYPE c.
DATA: a(30) TYPE c,
b(100) TYPE c,
i TYPE i.
DATA: BEGIN OF itab2 OCCURS 0,
field1(10),
field2(10),
field3(10),
END OF itab2.
DATA: BEGIN OF itab OCCURS 0,
field(100),
END OF itab.
lc_line =
itab-field =
'|1|Item1|ThisisItem1|2|Item2|ThisisItem2|3|Item3|ThisisItem3|'.
APPEND itab.
LOOP AT itab.
lc_line = itab-field.
SHIFT lc_line LEFT.
DO.
i = sy-index MOD 3.
SPLIT lc_line AT '|' INTO a b.
IF i EQ 0.
itab2-field3 = a.
APPEND itab2.
ELSEIF i EQ 1.
itab2-field1 = a.
ELSEIF i EQ 2.
itab2-field2 = a.
ENDIF.
lc_line = b.
IF lc_line IS INITIAL.
EXIT.
ENDIF.
ENDDO.
ENDLOOP.
‎2006 Jul 13 1:40 PM
REPORT YCHATEST.
DATA:BEGIN OF ITAB OCCURS 0,
TEXT(300),
END OF ITAB.
DATA:BEGIN OF ITAB2 OCCURS 0,
COMP(100),
END OF ITAB2.
ITAB-TEXT =
'|1|Item1|ThisisItem1|2|Item2|ThisisItem2|3|Item3|ThisisItem3|'.
APPEND ITAB.
CLEAR ITAB.
LOOP AT ITAB.
SPLIT ITAB-TEXT AT '|' INTO TABLE ITAB2.
ENDLOOP.
DELETE ITAB2 WHERE COMP = SPACE.
LOOP AT ITAB2.
WRITE : ITAB2-COMP.
ENDLOOP.
‎2006 Jul 13 1:41 PM
Hi Ravi,
here is your code, already tested:
*&---------------------------------------------------------------------*
*& Report ZTEST01
*&---------------------------------------------------------------------*
REPORT ztest01.
TYPES: BEGIN OF ts_result,
f1 TYPE string,
f2 TYPE string,
f3 TYPE string,
END OF ts_result.
DATA: lv_value TYPE string VALUE '|1|Item1|ThisisItem1|2|Item2|ThisisItem2|3|Item3|ThisisItem3|',
lt_itab TYPE TABLE OF string,
ls_itab LIKE LINE OF lt_itab,
lt_result TYPE TABLE OF ts_result,
ls_result TYPE ts_result,
lv_tmp TYPE i.
SPLIT lv_value AT '|' INTO TABLE lt_itab.
* Delete first entry
DELETE lt_itab INDEX 1.
LOOP AT lt_itab
INTO ls_itab.
lv_tmp = sy-tabix MOD 3.
IF lv_tmp EQ 1.
MOVE ls_itab TO ls_result-f1.
ELSEIF lv_tmp EQ 2.
MOVE ls_itab TO ls_result-f2.
ELSEIF lv_tmp EQ 0.
MOVE ls_itab TO ls_result-f3.
APPEND ls_result TO lt_result.
ENDIF.
ENDLOOP.
Regards,
Oliver
‎2006 Jul 13 4:00 PM
Hi Ravi,
Consider this code.
Couldnt make it simpler.
REPORT zztest.
TYPES : BEGIN OF str_test,
fld1(20),
fld2(20),
fld3(20),
END OF str_test.
TYPES : BEGIN OF str_data,
fld1 TYPE string,
cnt TYPE i,
END OF str_data.
DATA : it_final TYPE STANDARD TABLE OF str_test,
wa_final TYPE str_test.
DATA : lcnt TYPE i,
tcnt TYPE i,
indx TYPE i.
DATA : itab TYPE STANDARD TABLE OF str_data,
it_store TYPE STANDARD TABLE OF string WITH HEADER LINE,
it_temp TYPE STANDARD TABLE OF string WITH HEADER LINE,
wa TYPE str_data,
n TYPE i,
str TYPE string,
c(1).
wa-fld1 = '|1|Item1|ThisisItem1|2|Item2|ThisisItem2|3|Item3|ThisisItem3|'.
APPEND wa TO itab.
CLEAR wa.
wa-fld1 = '|4|Item4|ThisisItem4|5|Item5|ThisisItem5|'.
APPEND wa TO itab.
CLEAR wa.
wa-fld1 = '|6|Item6|ThisisItem6|'.
APPEND wa TO itab.
CLEAR wa.
wa-fld1 = '|7|Item7|ThisisItem7|8|Item8|ThisisItem8|9|Item9|ThisisItem9|10|Item10|ThisisItem10|'.
APPEND wa TO itab.
CLEAR wa.
wa-fld1 = '|11|Item11|ThisisItem11|12|Item12|ThisisItem12|13|Item13|ThisisItem13|'.
APPEND wa TO itab.
CLEAR wa.
wa-fld1 = '|14|Item14|ThisisItem14|'.
APPEND wa TO itab.
CLEAR wa.
LOOP AT itab INTO wa.
str = wa-fld1.
CONDENSE str.
n = STRLEN( str ).
DO n TIMES.
c = str.
IF c EQ '|'.
wa-cnt = wa-cnt + 1.
ENDIF.
SHIFT str LEFT BY 1 PLACES.
ENDDO.
DIVIDE wa-cnt BY 3.
MODIFY itab FROM wa INDEX sy-tabix.
CLEAR wa.
ENDLOOP.
LOOP AT itab INTO wa.
DO wa-cnt TIMES.
SPLIT wa-fld1 AT '|' INTO TABLE it_temp.
ENDDO.
LOOP AT it_temp.
IF it_temp EQ space.
DELETE it_temp INDEX sy-tabix.
ENDIF.
ENDLOOP.
APPEND LINES OF it_temp TO it_store .
CLEAR it_temp[].
ENDLOOP.
indx = 1.
DO.
READ TABLE it_store INDEX indx.
IF sy-subrc NE 0.
EXIT.
ENDIF.
tcnt = sy-tabix - 1.
DO 3 TIMES.
lcnt = tcnt + sy-index.
READ TABLE it_store INDEX lcnt.
IF sy-subrc EQ 0.
indx = indx + 1.
IF sy-index EQ 1.
wa_final-fld1 = it_store.
ELSEIF sy-index EQ 2.
wa_final-fld2 = it_store.
ELSEIF sy-index EQ 3.
wa_final-fld3 = it_store.
ENDIF.
ENDIF.
ENDDO.
APPEND wa_final TO it_final.
CLEAR wa_final.
ENDDO.
LOOP AT it_final INTO wa_final.
WRITE : / wa_final-fld1,
wa_final-fld2,
wa_final-fld3.
ENDLOOP.
<b>The output i am getting is.</b>
1 Item1 ThisisItem1
2 Item2 ThisisItem2
3 Item3 ThisisItem3
4 Item4 ThisisItem4
5 Item5 ThisisItem5
6 Item6 ThisisItem6
7 Item7 ThisisItem7
8 Item8 ThisisItem8
9 Item9 ThisisItem9
10 Item10 ThisisItem10
11 Item11 ThisisItem11
12 Item12 ThisisItem12
13 Item13 ThisisItem13
14 Item14 ThisisItem14
Test this and tell if any errors.
Regards,
Arun Sambargi.