Проблема с разделением столбцов

Автор Y_Y, Жовтень 30, 2012, 09:10:51 ДП

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

Y_Y

Загружаю файл с помощью 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', в последних двух случаех вообще разделять переставало. пыталась вместо спейс вставить стринговую переменную - та же ситуация.
Что делать чтобы всё корректно отработало?

Y_Y

п.с. он в данном случае разделяет по пробелу, а нужно чтобы по '#'
пыталась вместо space подставить и '#' и стринговую переменную со значением '#' - не разделяет

Uukrul

Цитата: Y_Y від Жовтень 30, 2012, 09:35:37 ДП
п.с. он в данном случае разделяет по пробелу, а нужно чтобы по '#'
пыталась вместо space подставить и '#' и стринговую переменную со значением '#' - не разделяет
Ну это вообще-то не '#' это скорее всего или табуляция или еще что-то, смотря какой был выбран разделитель формата, а вообще вы в целом не правильно используете этот модуль для загрузки данных.

Y_Y

а что именно неправильно?
и как мне указать разделение именно по табуляции?

Y_Y

фмник говорит что формат должен быть таков:
(HAS_FIELD_SEPARATOR) TYPE  CHAR01 DEFAULT SPACE
но по сути никакие символы типа ; Z и т.д. не подставляются
что делать если как раз по пробелу то мне разделять и не нужно?

Uukrul

Типа такая есть внутренняя таблица


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.

Y_Y

не работает, как в случаях со всеми другими подставленными в has_field_separator значениями:
в строке остается только значение первого столбца. всё
то есть если с разделителем по умолчанию ' ' или вообще без оного (закомменчен) строка выглядела так:

30#КЕМЕРОВО#1#ФИЛИАЛ N 11 АКБ МОСОБЛБАНК ОАО##043207757#30101810000000000757

сейчас она выглядит так:

30


Y_Y

В общем путём долгих мытаний вставили cl_abap_char_utilities=>horizontal_tab
в сплит и всё заработало :)

Uukrul

Цитата: Y_Y від Жовтень 30, 2012, 04:47:34 ПП
В общем путём долгих мытаний вставили cl_abap_char_utilities=>horizontal_tab
в сплит и всё заработало :)
А зачем? Если сразу можно принять в нужные поля?

Dmitriy

Системы под рукой пока нет, ибо в отпуске, поэтому, если ошибусь в названии, то главный подправит... Сейчас рекомендуют использовать методы класса CL_GUI_FRONTEND_SERVICES, т.е. указанная ф-ция GUI_UPLOAD там просто "обернута" методом. ;)

Y_Y

Цитата: Uukrul від Жовтень 30, 2012, 05:41:38 ПП
А зачем? Если сразу можно принять в нужные поля?
Первый раз общаюсь с этой функцией, так и не сообразить сразу

Uukrul

Цитата: Y_Y від Жовтень 31, 2012, 08:30:21 ДП
Первый раз общаюсь с этой функцией, так и не сообразить сразу
Ну чуть выше я привел пример как это сделать...