How to create a Dynamic Internal Table or Array?

Can you create an internal table dynamically? (at run time)

Yes , you can create a Dynamic Internal table .Just chek out this program .

  type-pools : abap.
  field-symbols: <dyn_table> type standard table,
               <dyn_wa>,
               <dyn_field>.
  data: dy_table type ref to data,
      dy_line  type ref to data,
      xfc type lvc_s_fcat,
      ifc type lvc_t_fcat.
  selection-screen begin of block b1 with frame.
parameters: p_table(30) type c default 'T001'.
selection-screen end of block b1.
  start-of-selection.
    perform get_structure.
  perform create_dynamic_itab.      **********Creates a dyanamic internal table**********
  perform get_data.
  perform write_out.
  form get_structure.
  data : idetails type abap_compdescr_tab,
       xdetails type abap_compdescr.
  data : ref_table_des type ref to cl_abap_structdescr.
  * Get the structure of the table.
  ref_table_des ?= 
      cl_abap_typedescr=>describe_by_name( p_table ).
  idetails[] = ref_table_des->components[].
    loop at idetails into xdetails.
    clear xfc.
    xfc-fieldname = xdetails-name .
    xfc-datatype = xdetails-type_kind.
    xfc-inttype = xdetails-type_kind.
    xfc-intlen = xdetails-length.
    xfc-decimals = xdetails-decimals.
    append xfc to ifc.
  endloop.
  endform.
  form create_dynamic_itab.
  * Create dynamic internal table and assign to FS
  call method cl_alv_table_create=>create_dynamic_table
               exporting
                  it_fieldcatalog = ifc
               importing
                  ep_table        = dy_table.
    assign dy_table->* to <dyn_table>.
  * Create dynamic work area and assign to FS
  create data dy_line like line of <dyn_table>.
  assign dy_line->* to <dyn_wa>.
  endform.

  form get_data.
  * Select Data from table.
  select * into table <dyn_table>
             from (p_table).
  endform.
   Write out data from table.
  loop at <dyn_table> into <dyn_wa>.
    do.
      assign component  sy-index 
         of structure <dyn_wa> to <dyn_field>.
      if sy-subrc <> 0.
        exit.
      endif.
      if sy-index = 1.
        write:/ <dyn_field>.
      else.
        write: <dyn_field>.
      endif.
    enddo.
  endloop.


REPORT ZCLUST1 .
*
* Example: how to create a dynamic internal table

* The dynamic internal table stucture
DATA: BEGIN OF STRUCT OCCURS 10,
    FILDNAME(8) TYPE C,
    ABPTYPE TYPE C,
    LENGTH TYPE I,
END OF STRUCT.

* The dynamic program source table
DATA: BEGIN OF INCTABL OCCURS 10,
    LINE(72),
END OF INCTABL.

DATA: LNG TYPE I, TYPESRTING(6).

* Sample dynamic internal table stucture
STRUCT-FILDNAME = 'field1'. STRUCT-ABPTYPE = 'c'. STRUCT-LENGTH = '6'.
APPEND STRUCT. CLEAR STRUCT.

STRUCT-FILDNAME = 'field2'. STRUCT-ABPTYPE = 'd'.
APPEND STRUCT. CLEAR STRUCT.

STRUCT-FILDNAME = 'field3'. STRUCT-ABPTYPE = 'i'.
APPEND STRUCT. CLEAR STRUCT.

* Create the dynamic internal table definition in the dyn. program
INCTABL-LINE = 'program zdynpro.'. APPEND INCTABL.
INCTABL-LINE = 'data: begin of dyntab occurs 10,'. APPEND INCTABL.

LOOP AT STRUCT.
  INCTABL-LINE = STRUCT-FILDNAME.
  LNG = STRLEN( STRUCT-FILDNAME ).

  IF NOT STRUCT-LENGTH IS INITIAL .
      TYPESRTING(1) = '('.
      TYPESRTING+1 = STRUCT-LENGTH.
      TYPESRTING+5 = ')'.
      CONDENSE TYPESRTING NO-GAPS.
      INCTABL-LINE+LNG = TYPESRTING.
  ENDIF.

  INCTABL-LINE+15 = 'type '.
  INCTABL-LINE+21 = STRUCT-ABPTYPE.
  INCTABL-LINE+22 = ','.
  APPEND INCTABL.
ENDLOOP.
INCTABL-LINE = 'end of dyntab. '.
APPEND INCTABL.

* Create the code processes the dynamic internal table
INCTABL-LINE = ' '. APPEND INCTABL.
INCTABL-LINE = 'dyntab-field1 = ''aaaaaa''.'. APPEND INCTABL.
INCTABL-LINE = 'dyntab-field1 = ''19970814''.'. APPEND INCTABL.
INCTABL-LINE = 'dyntab-field1 = 1.'. APPEND INCTABL.
INCTABL-LINE = 'append dyntab.'. APPEND INCTABL.
INCTABL-LINE = ' '. APPEND INCTABL.
INCTABL-LINE = 'loop at dyntab.'. APPEND INCTABL.
INCTABL-LINE = 'write: / dyntab.'. APPEND INCTABL.
INCTABL-LINE = 'endloop.'. APPEND INCTABL.

* Create and run the dynamic program
INSERT REPORT 'zdynpro'(001) FROM INCTABL.
SUBMIT ZDYNPRO.


or Just try out this simpler dynamic internal tables

DATA: itab TYPE STANDARD TABLE OF spfli,
              wa LIKE LINE OF itab.

DATA: line(72) TYPE c,
            list LIKE TABLE OF line(72).

START-OF-SELECTION.
*line = ' CITYFROM CITYTO '.
  line = ' AIRPTO '.
 APPEND line TO list.

SELECT DISTINCT (list)
       INTO CORRESPONDING FIELDS OF TABLE itab
           FROM spfli.

IF sy-subrc EQ 0.
  LOOP AT itab INTO wa.
*     WRITE: / wa-cityfrom, wa-cityto.
       WRITE :/ wa-airpto.
  ENDLOOP.
ENDIF.

Fast Links:
Remove Unwanted String
String Handling in ABAP - Removing Unwanted Char

Get help for your ABAP problems
Do you have a ABAP Question?

ABAP Books
ABAP Programming, Object, Interview Questions, Certification Reference Books

ABAP Tips
ABAP Forum for Discussion and Samples Program Codes for Abapers

Best regards,
SAP Basis, ABAP Programming and Other IMG Stuff
http://www.erpgreat.com

All the site contents are Copyright © www.erpgreat.com and the content authors. All rights reserved.
All product names are trademarks of their respective companies.  The site www.erpgreat.com is in no way affiliated with SAP AG. 
Every effort is made to ensure the content integrity.  Information used on this site is at your own risk. 
 The content on this site may not be reproduced or redistributed without the express written permission of 
www.erpgreat.com or the content authors.