Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => Тема начата: Y_Y от Октябрь 30, 2012, 09:10:51 am
-
Загружаю файл с помощью GUI_UPLOAD:
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_file
filetype = 'ASC'
"HAS_FIELD_SEPARATOR = 'X'
codepage = '1504'
TABLES
data_tab = gt_datatab "ITBL_IN_RECORD[]
EXCEPTIONS
file_open_error = 1
OTHERS = 2.
В итоге строка выглядит так:
30#КЕМЕРОВО#1#ФИЛИАЛ N 11 АКБ МОСОБЛБАНК ОАО##043207757#30101810000000000757
Пытаюсь разделить:
SPLIT gs_string AT space INTO gs_uploadtxt-fielda "(2)
gs_uploadtxt-ort01 "(35)
gs_uploadtxt-fieldc "(1)
gs_uploadtxt-banka "(60)
gs_uploadtxt-fielde "(1)
gs_uploadtxt-bankl "(15)
gs_uploadtxt-brnch. "(40).
Но разделяется некорректно. Экспериментировала с HAS_FIELD_SEPARATOR: там было и ' ' , и ' ' , и 'X', в последних двух случаех вообще разделять переставало. пыталась вместо спейс вставить стринговую переменную - та же ситуация.
Что делать чтобы всё корректно отработало?
-
п.с. он в данном случае разделяет по пробелу, а нужно чтобы по '#'
пыталась вместо space подставить и '#' и стринговую переменную со значением '#' - не разделяет
-
п.с. он в данном случае разделяет по пробелу, а нужно чтобы по '#'
пыталась вместо space подставить и '#' и стринговую переменную со значением '#' - не разделяет
Ну это вообще-то не '#' это скорее всего или табуляция или еще что-то, смотря какой был выбран разделитель формата, а вообще вы в целом не правильно используете этот модуль для загрузки данных.
-
а что именно неправильно?
и как мне указать разделение именно по табуляции?
-
фмник говорит что формат должен быть таков:
(HAS_FIELD_SEPARATOR) TYPE CHAR01 DEFAULT SPACE
но по сути никакие символы типа ; Z и т.д. не подставляются
что делать если как раз по пробелу то мне разделять и не нужно?
-
Типа такая есть внутренняя таблица
DATA: BEGIN OF gt_matnr OCCURS 1,
numpos LIKE mseg-zeile,
matnr LIKE mseg-matnr,
erfmg LIKE mseg-erfmg,
exbwr LIKE mseg-exbwr,
END OF gt_matnr.
Файл с разделителем табуляция, будет тогда загружен так. Раскладка по полям тоже будет автоматически, само собой поля в файле должны быть в той же последовательности, что они описаны во внутренней таблице.
DATA: l_filename TYPE string,
l_filelength1 LIKE sy-tabix.
l_filename = p_file_m.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = l_filename
filetype = 'ASC'
has_field_separator = cl_abap_char_utilities=>horizontal_tab
dat_mode = 'X'
IMPORTING
filelength = l_filelength1
TABLES
data_tab = gt_matnr
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
-
не работает, как в случаях со всеми другими подставленными в has_field_separator значениями:
в строке остается только значение первого столбца. всё
то есть если с разделителем по умолчанию ' ' или вообще без оного (закомменчен) строка выглядела так:
30#КЕМЕРОВО#1#ФИЛИАЛ N 11 АКБ МОСОБЛБАНК ОАО##043207757#30101810000000000757
сейчас она выглядит так:
30
-
В общем путём долгих мытаний вставили cl_abap_char_utilities=>horizontal_tab
в сплит и всё заработало :)
-
В общем путём долгих мытаний вставили cl_abap_char_utilities=>horizontal_tab
в сплит и всё заработало :)
А зачем? Если сразу можно принять в нужные поля?
-
Системы под рукой пока нет, ибо в отпуске, поэтому, если ошибусь в названии, то главный подправит... Сейчас рекомендуют использовать методы класса CL_GUI_FRONTEND_SERVICES, т.е. указанная ф-ция GUI_UPLOAD там просто "обернута" методом. ;)
-
А зачем? Если сразу можно принять в нужные поля?
Первый раз общаюсь с этой функцией, так и не сообразить сразу
-
Первый раз общаюсь с этой функцией, так и не сообразить сразу
Ну чуть выше я привел пример как это сделать...