Application Development 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: 

Upload tab-delimited file from the application server to an internal table

0 Kudos

Hello SAPients.

I'm using OPEN DATASET..., READ DATASET..., CLOSE DATASET to upload a file from the application server (SunOS). I'm working with SAP 4.6C. I'm trying to upload a tab-delimited file to an internal table but when I try load it the fields are not correctly separated, in fact, they are all misplaced and the table shows '#' where supposedly there was a tab.

I tried to SPLIT the line using as separator a variable with reference to CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB but for some reason that class doesn't exist in my system.

Do you know what I'm doing wrong? or Do you know a better method to upload a tab-delimited file into an internal table?

Thank you in advance for your help.

1 ACCEPTED SOLUTION

Former Member
0 Kudos

why can't do define the tab inside your program

like c_tab type x value '09' which is equivalent to CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.

I guess there is no class defination inside your program,anyway you can use above solution.

Mark it if it helps..

Regards,

Sunil

3 REPLIES 3

Former Member
0 Kudos

why can't do define the tab inside your program

like c_tab type x value '09' which is equivalent to CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.

I guess there is no class defination inside your program,anyway you can use above solution.

Mark it if it helps..

Regards,

Sunil

Former Member
0 Kudos

Define some variable/constant of type X. Assign ascii char 09 (tab) to it. and use this to split your data.

Hope this helps...

Former Member
0 Kudos

Try:

REPORT ztest MESSAGE-ID 00.

PARAMETER: p_file LIKE rlgrap-filename   OBLIGATORY.

DATA: BEGIN OF data_tab OCCURS 0,
      data(4096),
      END   OF data_tab.

DATA: BEGIN OF vendor_file_x OCCURS 0.
* LFA1 Data
DATA: mandt  LIKE bgr00-mandt,
      lifnr  LIKE blf00-lifnr,
      anred  LIKE blfa1-anred,
      bahns  LIKE blfa1-bahns,
      bbbnr  LIKE blfa1-bbbnr,
      bbsnr  LIKE blfa1-bbsnr,
      begru  LIKE blfa1-begru,
      brsch  LIKE blfa1-brsch,
      bubkz  LIKE blfa1-bubkz,
      datlt  LIKE blfa1-datlt,
      dtams  LIKE blfa1-dtams,
      dtaws  LIKE blfa1-dtaws,
      erdat  LIKE  lfa1-erdat,
      ernam  LIKE  lfa1-ernam,
      esrnr  LIKE blfa1-esrnr,
      konzs  LIKE blfa1-konzs,
      ktokk  LIKE  lfa1-ktokk,
      kunnr  LIKE blfa1-kunnr,
      land1  LIKE blfa1-land1,
      lnrza  LIKE blfa1-lnrza,
      loevm  LIKE blfa1-loevm,
      name1  LIKE blfa1-name1,
      name2  LIKE blfa1-name2,
      name3  LIKE blfa1-name3,
      name4  LIKE blfa1-name4,
      ort01  LIKE blfa1-ort01,
      ort02  LIKE blfa1-ort02,
      pfach  LIKE blfa1-pfach,
      pstl2  LIKE blfa1-pstl2,
      pstlz  LIKE blfa1-pstlz,
      regio  LIKE blfa1-regio,
      sortl  LIKE blfa1-sortl,
      sperr  LIKE blfa1-sperr,
      sperm  LIKE blfa1-sperm,
      spras  LIKE blfa1-spras,
      stcd1  LIKE blfa1-stcd1,
      stcd2  LIKE blfa1-stcd2,
      stkza  LIKE blfa1-stkza,
      stkzu  LIKE blfa1-stkzu,
      stras  LIKE blfa1-stras,
      telbx  LIKE blfa1-telbx,
      telf1  LIKE blfa1-telf1,
      telf2  LIKE blfa1-telf2,
      telfx  LIKE blfa1-telfx,
      teltx  LIKE blfa1-teltx,
      telx1  LIKE blfa1-telx1,
      xcpdk  LIKE  lfa1-xcpdk,
      xzemp  LIKE blfa1-xzemp,
      vbund  LIKE blfa1-vbund,
      fiskn  LIKE blfa1-fiskn,
      stceg  LIKE blfa1-stceg,
      stkzn  LIKE blfa1-stkzn,
      sperq  LIKE blfa1-sperq,
      adrnr  LIKE  lfa1-adrnr,
      mcod1  LIKE  lfa1-mcod1,
      mcod2  LIKE  lfa1-mcod2,
      mcod3  LIKE  lfa1-mcod3,
      gbort  LIKE blfa1-gbort,
      gbdat  LIKE blfa1-gbdat,
      sexkz  LIKE blfa1-sexkz,
      kraus  LIKE blfa1-kraus,
      revdb  LIKE blfa1-revdb,
      qssys  LIKE blfa1-qssys,
      ktock  LIKE blfa1-ktock,
      pfort  LIKE blfa1-pfort,
      werks  LIKE blfa1-werks,
      ltsna  LIKE blfa1-ltsna,
      werkr  LIKE blfa1-werkr,
      plkal  LIKE  lfa1-plkal,
      duefl  LIKE  lfa1-duefl,
      txjcd  LIKE blfa1-txjcd,
      sperz  LIKE  lfa1-sperz,
      scacd  LIKE blfa1-scacd,
      sfrgr  LIKE blfa1-sfrgr,
      lzone  LIKE blfa1-lzone,
      xlfza  LIKE  lfa1-xlfza,
      dlgrp  LIKE blfa1-dlgrp,
      fityp  LIKE blfa1-fityp,
      stcdt  LIKE blfa1-stcdt,
      regss  LIKE blfa1-regss,
      actss  LIKE blfa1-actss,
      stcd3  LIKE blfa1-stcd3,
      stcd4  LIKE blfa1-stcd4,
      ipisp  LIKE blfa1-ipisp,
      taxbs  LIKE blfa1-taxbs,
      profs  LIKE blfa1-profs,
      stgdl  LIKE blfa1-stgdl,
      emnfr  LIKE blfa1-emnfr,
      lfurl  LIKE blfa1-lfurl,
      j_1kfrepre  LIKE blfa1-j_1kfrepre,
      j_1kftbus   LIKE blfa1-j_1kftbus,
      j_1kftind   LIKE blfa1-j_1kftind,
      confs  LIKE  lfa1-confs,
      updat  LIKE  lfa1-updat,
      uptim  LIKE  lfa1-uptim,
      nodel  LIKE blfa1-nodel.
DATA: END   OF vendor_file_x.

FIELD-SYMBOLS:  <field>,
                <field_1>.

DATA: delim          TYPE x        VALUE '09'.

DATA: fld_chk(4096),
      last_char,
      quote_1     TYPE i,
      quote_2     TYPE i,
      fld_lth     TYPE i,
      columns     TYPE i,
      field_end   TYPE i,
      outp_rec    TYPE i,
      extras(3)   TYPE c        VALUE '.,"',
      mixed_no(14) TYPE c        VALUE '1234567890-.,"'.

OPEN DATASET p_file FOR INPUT.

DO.
  READ DATASET p_file INTO data_tab-data.
  IF sy-subrc = 0.
    APPEND data_tab.
  ELSE.
    EXIT.
  ENDIF.
ENDDO.


* count columns in output structure

DO.
  ASSIGN COMPONENT sy-index OF STRUCTURE vendor_file_x TO <field>.
  IF sy-subrc <> 0.
    EXIT.
  ENDIF.
  columns = sy-index.
ENDDO.

* Assign elements of input file to internal table

CLEAR vendor_file_x.
IF columns > 0.
  LOOP AT data_tab.
    DO columns TIMES.
      ASSIGN space TO <field>.
      ASSIGN space TO <field_1>.
      ASSIGN COMPONENT sy-index OF STRUCTURE vendor_file_x TO <field>.
      SEARCH data_tab-data FOR delim.
      IF sy-fdpos > 0.
        field_end = sy-fdpos + 1.
        ASSIGN data_tab-data(sy-fdpos) TO <field_1>.

* Check that numeric fields don't contain any embedded " or ,
        IF <field_1> CO mixed_no AND
           <field_1> CA extras.
          TRANSLATE <field_1> USING '" , '.
          CONDENSE <field_1> NO-GAPS.
        ENDIF.

* If first and last characters are '"', remove both.
        fld_chk = <field_1>.
        IF NOT fld_chk IS INITIAL.
          fld_lth = strlen( fld_chk ) - 1.
          MOVE fld_chk+fld_lth(1) TO last_char.
          IF fld_chk(1) = '"' AND
             last_char = '"'.
            MOVE space TO fld_chk+fld_lth(1).
            SHIFT fld_chk.
            MOVE fld_chk TO <field_1>.
          ENDIF.       " for if fld_chk(1)=" & last_char="
        ENDIF.         " for if not fld_chk is initial

* Replace "" with "
        DO.
          IF fld_chk CS '""'.
            quote_1 = sy-fdpos.
            quote_2 = sy-fdpos + 1.
            MOVE fld_chk+quote_2 TO fld_chk+quote_1.
          ELSE.
            MOVE fld_chk TO <field_1>.
            EXIT.
          ENDIF.
        ENDDO.

        <field> = <field_1>.
      ELSE.
        field_end = 1.
      ENDIF.
      SHIFT data_tab-data LEFT BY field_end PLACES.
    ENDDO.
    APPEND vendor_file_x.
    CLEAR vendor_file_x.
  ENDLOOP.
ENDIF.

CLEAR   data_tab.
REFRESH data_tab.
FREE    data_tab.

Rob