Hola amigos, estoy teniendo problemas con algo muy sencillo:
Tengo un archive: prueba.csv
UD00000000;0090000000;50.26
UD00000000;0090000002;45.56
UD00000000;0090000004;300.25-
UD00000000;0090000005;45.26
UD00000000;0090000024;48.15
UA00000000;0090000025;11.17
UA00000000;0090000027;200.58-
UD00000000;0090000030;600.25
UD00000000;0090000031;123.95
UA00000000;0090000032;-201.63
quiero agarrar cada linea y separarla en base al separador ';' y meter el resultado en una table interna, les dejo mi codigo:
Lo que he intentado:
1) al mandar llamado:
CALL FUNCTION 'TEXT_CONVERT_TEX_TO_SAP'
EXPORTING
I_FIELD_SEPERATOR = ';'
i_tab_raw_data = it_tablauncampo[]
TABLES
I_TAB_CONVERTED_DATA = it_tabla[]
EXCEPTIONS
CONVERSION_FAILED = 1
OTHERS = 2.
tambien lo intente sin los [] me marca este error:
Short Text
Type conflict when calling the function module "TEXT_CONVERT_TEX_TO_SAP".
no se por que, si sigo la documentacion.
2) Intente tambien esto:
loop at <fs_xtabla> ASSIGNING <fs_wa2>.
lv_aux2 = <fs_wa2>-f1.
SPLIT lv_aux2 AT CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB INTO TABLE it_tabla.
* BREAK-POINT.
endloop.
Esto me funciono un poco mas, pero el problema es que: mi archive (cada linea) tiene separacion con un punto y coma, no con un # entonces me lo separa bien raro.
No encontre como indicarle a la function que el separador era ';'
3) Quise hacerlo manualmente:
loop at <fs_xtabla> ASSIGNING <fs_wa2>.
lv_aux2 = <fs_wa2>-f1.
SPLIT lv_aux2 AT separator INTO lv_aux.
* SPLIT lv_aux2 AT CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB INTO TABLE it_tabla.
* lv_aux2 = <fs_wa2>-f1.
* lv_aux2 = 'aa;bb;cc;dddd;ee;'.
* SPLIT lv_aux2 at separator into lv_aux.
* BREAK-POINT.
endloop.
La variable lv_aux esta declarada como string pero aun asi me marca el siguiente error al checker el codigo (f2) antes de activar:
Unable to interpret "LV_AUX". Possible causes: Incorrect spelling or comma error.
Algun consejo?
Les agradezco, se que es un problema sencillo, pero no me sale.
Gracias.
Tengo un archive: prueba.csv
UD00000000;0090000000;50.26
UD00000000;0090000002;45.56
UD00000000;0090000004;300.25-
UD00000000;0090000005;45.26
UD00000000;0090000024;48.15
UA00000000;0090000025;11.17
UA00000000;0090000027;200.58-
UD00000000;0090000030;600.25
UD00000000;0090000031;123.95
UA00000000;0090000032;-201.63
quiero agarrar cada linea y separarla en base al separador ';' y meter el resultado en una table interna, les dejo mi codigo:
Código:
REPORT Z_JE_CC. *Definimos el tipo de tabla(la estructura) TYPE-POOLS: truxs. types: begin of t_tabla, f1(20) type c, f2(20) type c, f3(20) type c, * f3 type p decimals 3, end of t_tabla. types: begin of t_tabla2, f1(100) type c, * f3 type p decimals 3, end of t_tabla2. data: it_tabla type table of t_tabla, it_tablauncampo TYPE TABLE OF t_tabla2. field-symbols: <fs_tabla> type standard table, <fs_wa> like line of it_tabla, <fs_wa2> like line of it_tablauncampo. SELECTION-SCREEN BEGIN OF BLOCK Pant_Capt WITH FRAME TITLE Text-001. Parameters: p_arch LIKE RLGRAP-FILENAME Obligatory DEFAULT 'c:\temp\prueba.csv'. SELECTION-SCREEN END OF BLOCK Pant_Capt. At Selection-Screen On Value-Request For p_arch. CALL FUNCTION 'F4_FILENAME' EXPORTING PROGRAM_NAME = SY-REPID DYNPRO_NUMBER = SY-DYNNR FIELD_NAME = 'PATH' IMPORTING FILE_NAME = P_arch. *BREAK-POINT. if sy-subrc = 0. clear it_tabla. unassign <fs_tabla>. "Cargamos la tabla de un solo campo. perform Load_Archivo_itab tables it_tablauncampo using p_arch. ASSIGN it_tablauncampo to <fs_tabla>. perform Separar_Tabla tables it_tabla it_tablauncampo. assign it_tabla to <fs_tabla>. BREAK-POINT. else. MESSAGE E398(00) WITH 'Error no se selecciono Archivo'. endif. *&---------------------------------------------------------------------* *& Form LOAD_ARCHIVO_ITAB *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_IT_TABLA text * -->P_P_ARCH text *----------------------------------------------------------------------* FORM LOAD_ARCHIVO_ITAB TABLES P_IT_TABLA "Insert correct name for <...> USING P_P_ARCH. data: lv_xi type i. REFRESH P_IT_TABLA. CALL FUNCTION 'WS_UPLOAD' EXPORTING filename = P_P_ARCH filetype = 'ASC' TABLES data_tab = P_IT_TABLA EXCEPTIONS conversion_error = 1 file_open_error = 2 file_read_error = 3 invalid_table_width = 4 invalid_type = 5 no_batch = 6 unknown_error = 7 OTHERS = 8. IF sy-subrc NE 0. WRITE : ' Error in opening file : ' , P_P_ARCH. STOP. ENDIF. DESCRIBE TABLE P_IT_TABLA lines lv_xi. * BREAK-POINT. ENDFORM. "LOAD_ARCHIVO_ITAB " LOAD_ARCHIVO_ITAB *&---------------------------------------------------------------------* *& Form SEPARAR_TABLA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_IT_TABLE text *----------------------------------------------------------------------* FORM SEPARAR_TABLA TABLES P_IT_TABLA P_it_tablauncampo . "Insert correct name for <...>. field-symbols: <fs_xtabla> type STANDARD TABLE, <fs_xwa> type any. constants: separator(1) type c value ';'. * data: lv_aux(100) type c. data: lv_aux type string, lv_aux2 type string, gt_raw_data TYPE truxs_t_text_data, go_table TYPE REF TO cl_salv_table. * assign p_it_tablauncampo to <fs_xtabla>. assign it_tablauncampo to <fs_xtabla>. break-point. CALL FUNCTION 'TEXT_CONVERT_TEX_TO_SAP' EXPORTING I_FIELD_SEPERATOR = ';' i_tab_raw_data = it_tablauncampo[] TABLES I_TAB_CONVERTED_DATA = it_tabla[] EXCEPTIONS CONVERSION_FAILED = 1 OTHERS = 2. IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. break-point. loop at <fs_xtabla> ASSIGNING <fs_wa2>. lv_aux2 = <fs_wa2>-f1. * SPLIT lv_aux2 AT CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB INTO TABLE it_tabla. * lv_aux2 = <fs_wa2>-f1. * lv_aux2 = 'aa;bb;cc;dddd;ee;'. * SPLIT lv_aux2 at separator into lv_aux. * BREAK-POINT. endloop. TRY. CALL METHOD cl_salv_table=>factory * EXPORTING * LIST_DISPLAY = IF_SALV_C_BOOL_SAP=>FALSE * R_CONTAINER = * CONTAINER_NAME = IMPORTING r_salv_table = go_table CHANGING t_table = it_tabla. CATCH cx_salv_msg . ENDTRY. break-point. go_table->display( ). ENDFORM. " SEPARAR_TABLA
1) al mandar llamado:
CALL FUNCTION 'TEXT_CONVERT_TEX_TO_SAP'
EXPORTING
I_FIELD_SEPERATOR = ';'
i_tab_raw_data = it_tablauncampo[]
TABLES
I_TAB_CONVERTED_DATA = it_tabla[]
EXCEPTIONS
CONVERSION_FAILED = 1
OTHERS = 2.
tambien lo intente sin los [] me marca este error:
Short Text
Type conflict when calling the function module "TEXT_CONVERT_TEX_TO_SAP".
no se por que, si sigo la documentacion.
2) Intente tambien esto:
loop at <fs_xtabla> ASSIGNING <fs_wa2>.
lv_aux2 = <fs_wa2>-f1.
SPLIT lv_aux2 AT CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB INTO TABLE it_tabla.
* BREAK-POINT.
endloop.
Esto me funciono un poco mas, pero el problema es que: mi archive (cada linea) tiene separacion con un punto y coma, no con un # entonces me lo separa bien raro.
No encontre como indicarle a la function que el separador era ';'
3) Quise hacerlo manualmente:
loop at <fs_xtabla> ASSIGNING <fs_wa2>.
lv_aux2 = <fs_wa2>-f1.
SPLIT lv_aux2 AT separator INTO lv_aux.
* SPLIT lv_aux2 AT CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB INTO TABLE it_tabla.
* lv_aux2 = <fs_wa2>-f1.
* lv_aux2 = 'aa;bb;cc;dddd;ee;'.
* SPLIT lv_aux2 at separator into lv_aux.
* BREAK-POINT.
endloop.
La variable lv_aux esta declarada como string pero aun asi me marca el siguiente error al checker el codigo (f2) antes de activar:
Unable to interpret "LV_AUX". Possible causes: Incorrect spelling or comma error.
Algun consejo?
Les agradezco, se que es un problema sencillo, pero no me sale.
Gracias.
Comentario