04-08-2010 9:37 PM
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
04-08-2010 9:54 PM
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
04-08-2010 10:05 PM
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
04-08-2010 10:06 PM
I have checked the option with OPEN DATASET and TRANSFER statements as well.
Unfortunately it doesn't help.