PDA

Ver la Versión Completa : SPLIT INTO no funciona...sabeis porque??


Driau
21/10/09, 09:57:16
He estado provando esto:

LOOP AT it_fichero.

SPLIT it_fichero AT '#' INTO: l_campo1 l_campo2 l_campo3 l_campo4 l_campo5 l_campo6 l_campo7.

APPEND it_datos.

ENDLOOP.

El efecto (no deseado) es que no separa nada y lo mete todo en el campo l_campo1.

Las variables de tipo l_campoX estan declaradas así:

DATA: l_campo1 TYPE string,
l_campo2 TYPE string,
l_campo3 TYPE string,
l_campo4 TYPE string,
l_campo5 TYPE string,
l_campo6 TYPE string,
l_campo7 TYPE string,
l_campo8 TYPE string,
l_campo9 TYPE string,
l_campo10 TYPE string,
l_campo11 TYPE string,
l_campo12 TYPE string,
l_campo13 TYPE string,
l_campo14 TYPE string,
l_campo15 TYPE string.

Alguna idea???

El contenido de una linea cualquiera es: 20080930#1#1#22#ABONO DEV. No.#2950,22#H

Gracias de antemano.

jtristan
21/10/09, 10:25:47
He probado el código y me surgen unas dudas.
¿Estás recorriendo una tabla interna y asignando el valor del workaera al split. Sin embargo, el compilador me dice que sólo puedes hacerlo con tipos de datos como string. ¿Por qué no pruebas a pasar el contenido del workarea a un string y se lo pasas al split?
Haciéndolo así la separación me la ha hecho correctamente.

Un saludo.

Driau
21/10/09, 10:38:47
He probado esto como me has dicho:

LOOP AT it_fichero.

l_linia = it_fichero-linia.
SPLIT l_linia AT '#' INTO: l_campo1 l_campo2 l_campo3 l_campo4 l_campo5 l_campo6 l_campo7.

ENDLOOP.

Pero sigo igual.... :confused:

ivan888
21/10/09, 11:27:41
Hola,

creo que te sobran los dos puntos detrás del split.

Saludos

ivan888
21/10/09, 11:29:11
quiría decir detrás del INTO.

Driau
21/10/09, 12:51:42
Por mas que lo intento..acaba metiéndolo todo en el primer campo.

ernestoacostacuba
21/10/09, 13:52:53
Antes que nada, si las subcadenas que vas a extraer de la cadena general, tienen una longitud estàndard, tienes que declarar las variables donde vas a "splitear" de tipo C con la longitud que tienen.
En tu caso, la cadena general està compuesta de 7 subcadenas divididas por el sìmbolo "#".
La declaraciòn de variables deberìa ser asì:


DATA: l_campo1(8) TYPE c,
l_campo2 TYPE c,
l_campo3 TYPE c,
l_campo4(2) TYPE c,
l_campo5(14) TYPE c,
l_campo6(7) TYPE c,
l_campo7 TYPE c.

Luego, cuando vayas a hacer el SPLIT (supongamos que la cadena general se llama CAD_GRAL):

SPLIT cad_gral AT '#' INTO l_campo1
l_campo2
l_campo3
l_campo4
l_campo5
l_campo6
l_campo7.


Espero te sirva.

Driau
21/10/09, 14:03:42
El problema es que yo he declarado las variables así:

l_campo1 TYPE string,
l_campo2 TYPE string,
l_campo3 TYPE string,
l_campo4 TYPE string,
l_campo5 TYPE string,
l_campo6 TYPE string,
l_campo7 TYPE string,
l_campo8 TYPE string,
l_campo9 TYPE string,
l_campo10 TYPE string,
l_campo11 TYPE string,
l_campo12 TYPE string,
l_campo13 TYPE string,
l_campo14 TYPE string,
l_campo15 TYPE string.

Y lo he hecho asó porque no se cuantos campos me llegaran ni con que longitud. Lo que pretendo hacer es poder importar en SAP cualquier fichero de texto separado por '#' y luego tratarlo a mi gusto.

Gracias por la paciencia!

DavidXD_XD
21/10/09, 14:41:42
Hola, posiblemente ese caracter aparentemente se vea como #, pero puede ser un tabulador.

Aver si estas ideas pueden ayudar, como el primer campo es una letra crea una variable y agarra el septimo caracter en esa variable q creaste, ahora separalos por esa variable

SPLIT cad_gral AT l_var INTO l_campo1
l_campo2
l_campo3
l_campo4
l_campo5
l_campo6
l_campo7.

Donde l_var es la variable q creaste ... nos cuentas como t fue :D

mysmb2
21/10/09, 21:24:18
concuerdo con DavidXD_XD revisa este post te puede ayudar con el caracter #

http://www.mundosap.com/foro/showthread.php?t=32920

Saludos

ic_man_777
22/10/09, 01:38:24
Me pregunto como tendrás declarada esa tabla interna de it_fichero y cómo es que la llenas.

http://hugo-dc.pastebin.com/f37f314bc

Saludos:)

SAPING
24/02/11, 23:15:07
tengo el mismo problema...levanto un txt con OPEN DATASET, lo coloco en una tabla tipo CHAR1024, cuando hago el loop de esa tabla, coloco el registro en una variable del mismo tipo y realizo el SPLIT:
SPLIT cad_gral AT '#' INTO l_campo1
l_campo2
l_campo3
l_campo4
l_campo5
l_campo6
l_campo7.

Y no le encuentro la vuelta.
Prove subir el archivo en modo BIN como ASC. Hacer el DATASET por BINARY MODE, TEXT MODE.... pero nada...
El archivo lo levanta, pero como una cadena de este tipo que comentan, separado por #.

- ya estoy tirando la toalla, si me pueden salvar.... graciassss

Tu amo
25/02/11, 00:03:48
Es porque el '#' no es un '#'. Lo mas probable es que sea un caracter no representable como un tabulador o salto de linea

Ariel-StaFe
27/04/12, 20:04:02
Tengo el mismo problema, tengo que leer un padron separado por tabs.
El split no funciona para eso ?.
Porque encima hay campos que no son fijos. son de longitur variables.
Alguno me tira una idea ?
Muchas gracias...

Ariel-StaFe
28/04/12, 22:38:53
Gente.
Ya tengo la respuesta para leer el archivo desde disco con gui_upload
Post -
http://www.mundosap.com/foro/showthread.php?t=5445

Me faltaria como hacerlo desde el servidor.
Si alguien lo sabe.. desde ya muchas gracias.
Ss

ballan
30/04/12, 14:21:19
Para hacerlo desde servidor seria lo mismo

Al final lo que haces mas o menos es

OPEN DATASET

DO

READ DATASET INTO LINEA

.
.
.


Podrias coger la variable LINEA y hacer un split LINEA INTO...

Ariel-StaFe
02/05/12, 13:39:33
Correcto. Intenté eso pero el Split no me separa por tabulador.
Muchas gracias.
Sigo buscando la manera de resolverlo
Saludos

Ariel-StaFe
02/05/12, 15:27:10
Gente.. para los que lo necesiten.. encontre la forma de separar con SPLIT cuando el string está separado por tabulador.

SPLIT w_registro AT cl_abap_char_utilities=>horizontal_tab
INTO campo1 campo2 etc.

Saludos

irving rodea coron
07/01/22, 19:46:41
los caracteres # pueden no ser '#' sino que se un salto de linea o tabulador para obtener en el debug revisa que el valor hexadecimal sea el mismo si no puedes utilizar estos metodos para obtener los valores del # salto de linea o '#' tabulador

DATA lv_crlf(2).
DATA lv_saltol TYPE c.
DATA lv_x(1).


lv_crlf = cl_abap_char_utilities=>cr_lf."Obtencion de valores de salto de linea y tabulador
lv_saltol = lv_crlf+1(1).
lv_x = cl_abap_char_utilities=>horizontal_tab."Obtencion de valores de tabulador


y haces tu split con el valor obtenido:)