Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

itab

Former Member
0 Likes
1,222

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?

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,186

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

13 REPLIES 13
Read only

naimesh_patel
Active Contributor
0 Likes
1,186

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

Read only

Former Member
0 Likes
1,186

hi Ravi,

Loop that internal table and put them in to another internal table ...

loop at itab.

split at '|' into itab-f1.....

endloop.

Read only

Former Member
0 Likes
1,187

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

Read only

0 Likes
1,186

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.

Read only

0 Likes
1,186

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

Read only

0 Likes
1,186

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?

Read only

0 Likes
1,186

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.

Read only

Former Member
0 Likes
1,186

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

Read only

Former Member
0 Likes
1,186

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

Read only

0 Likes
1,186

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.

Read only

Former Member
0 Likes
1,186
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.
Read only

oliver
Active Contributor
0 Likes
1,186

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

Read only

Former Member
0 Likes
1,186

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.