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: 

Problem with writing a structure to file - trailing spaces are lost

Former Member
0 Kudos

Hi Experts,

I have the following requirement. I have a fairly large structure with the fields of CHAR type (but of the different length). Let's say the structure is as follows (simplified for a clarity):


 TYPES: BEGIN OF l_typ_file_row,
          field1(4)          TYPE c,
          field2(10)         TYPE c,
          field3(6)          TYPE c,
        END OF l_typ_file_row.

Then I want to write the content of the structure to the file as a single line, but I need that the line had always fixed length, i.e. (4106)=20 characters (independent of the content of the fields - e.g. if field3 was empty, I would like to have 6 spaces at the end of the line).

To save the file I use the code like the following:


DATA:  ls_dxrawdata TYPE dxrawdata, 
       lt_dxrawdata TYPE STANDARD TABLE OF dxrawdata, 
       ls_single_row TYPE l_typ_file_row.
 
ls_single_row-field1 = 'abcd'.
ls_single_row-field2 = '0123456789'.
ls_single_row-field3 = '      '.          "six spaces
 
ls_dxrawdata-data = ls_single_row.
 
*   Upload to application server
   CALL FUNCTION 'DX_FILE_WRITE'
     EXPORTING
       filename            = lv_filename
       pc                  = ''
     TABLES
       data_tab            = lt_dxrawdata.

Unfortunately the line has only 14 characters - trailing spaces are lost. If I would add another field, e.g. field4 of the type CHAR1 and filled it with e.g. ';' - then the spaces in field3 would be preserved. But I cannot use such a solution, because I have a strictly defined format of the file line.

Do you have any idea how to solve the problem?

I would be very grateful for any suggestions.

Best regards,

Adam Sas

Edited by: AdamSas on Apr 8, 2010 10:38 PM

3 REPLIES 3

ThomasZloch
Active Contributor
0 Kudos

Don't have access to a system now, so guessing a little bit.

For CHAR fields, trailing spaces would be sent to the file, for string fields, trailing spaces are truncated, as far as I remember. So either the move to ls_dxrawdata-data or the function DX_FILE_WRITE is moving the data to a string type field and so the spaces are lost.

Try writing ls_single_row directly to the file via OPEN DATASET and TRANSFER statements.

Thomas

kesavadas_thekkillath
Active Contributor
0 Kudos

even me too dont have a system with me

Can you please try this

ls_single_row-field1 = 'abcd'.

ls_single_row-field2 = '0123456789'.

ls_single_row-field3 = ' '. "six spaces

call method cl_abap_container_utilities=>fill_container_c

exporting

im_value = ls_single_row

importing

ex_container = ls_dxrawdata-data

exceptions

illegal_parameter_type = 1

others = 2.

OPEN DATASET LV_DOS FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.

loop at lt_dxrawdata into ls.

transfer ls to lv_dos.

endloop.

CLOSE DATASET LV_DOS.

Also go through this thread once link:;

Edited by: Keshav.T on Apr 9, 2010 2:35 AM

Former Member
0 Kudos

I have checked the option with OPEN DATASET and TRANSFER statements as well.

Unfortunately it doesn't help.