SAPфорум.RU
https://www.sapboard.ru/forum/

Перенос данных Excel => SAP
https://www.sapboard.ru/forum/viewtopic.php?f=13&t=7143
Страница 2 из 2

Автор:  Besa [ Ср, сен 12 2018, 17:21 ]
Заголовок сообщения:  Re: Перенос данных Excel => SAP

Igor_Beruk написал(а):
Здравствуйте,коллеги! Может кто поможет или подскажет,может кто сталкивался. Такая ситуация. Есть csv файл,в самих полях которого могут присутствовать ';' - при считывании во внутреннюю таблицу стандартными ФМ происходит неверная интерпритация из-за этого. Как это обойти?

В смысле "как обойти"? :roll:
Представьте что это не стандартный Фм, а Ваш собственный, вот у Вас есть строка которую нужно распарсить, где по условию ";" является разделителем, как Вы сами поймете что является разделителем, а что нет? Что Вам говорит на этот счет источник который собрал такой файл?

Автор:  Igor_Beruk [ Ср, сен 12 2018, 18:09 ]
Заголовок сообщения:  Re: Перенос данных Excel => SAP

Ну,смотрите

есть,например,такие данные

1;2;3;;"";NULL;"NULL";Тест;"Тест";"""Тест""";"Verknüpfung Général Ää Öö Üü Ёё Русский текст ""Key=Value"";<1>;'';''";2017-01-10 12:12:43.331

если просто вставить их в текстовый файлик и сохранить как test.csv

то получится

field0 1
field1 2
field2 3
field3
field4
field5
field6 NULL
field7 Тест
field8 Тест
field9 "Тест"
field10 Verknüpfung Général Ää Öö Üü Ёё Русский текст "Key=Value";<1>;'';''
field11 10.01.2017 12:12:43


если я в сапе забираю этот csv файлик к примеру через gui_download он у меня преобразуется изначально в одну строку эту
1;2;3;;"";NULL;"NULL";Тест;"Тест";"""Тест""";"Verknüpfung Général Ää Öö Üü Ёё Русский текст ""Key=Value"";<1>;'';''";2017-01-10 12:12:43.331
а когда я пытаюсь его выгрузить ,например, через 'TEXT_CONVERT_CSV_TO_SAP' то уже например field10 выгружается неправильно - потому что внутри него самого есть ';'.

т.е. у меня ; может быть помимо разделителя полей в csv при выгрузке еще в любом месте


и изначально я имею файлик csv скажем так - такой какой мне нужно. Но как мне потом его распарсить так-чтобы знать какое значение к какому полю принадлежало изначально,ведь у меня забирается все в одну строку,и по умолчанию поля в csv разделяются ;. А у меня внутри самих полей могут быть ;. Понимаете меня?

Автор:  Besa [ Чт, сен 13 2018, 08:00 ]
Заголовок сообщения:  Re: Перенос данных Excel => SAP

Понятно, логика завязана на символ "
Есть еще пара Фм-ов, но они также не понимают это.

Как вариант, сохранить csv в xls и загрузить.

TEXT_CONVERT_XLS_TO_SAP не обязательно (не суть), можно эксель грузить и через cl_gui_frontend_services=>gui_upload и через ALSM_EXCEL_TO_INTERNAL_TABLE например.

UPD: Не знаю, это фитча парсера экселя или особенности самого формата. С другой стороны, что если мне надо будет получить данные и распарсить именно строго по разделителю символа ; и при этом не учитывать последовательность отрытых/закрытых символов "

Code:
types:
  begin of ty_csv,
    field1  type text255,
    field2  type text255,
    field3  type text255,
    field4  type text255,
    field5  type text255,
    field6  type text255,
    field7  type text255,
    field8  type text255,
    field9  type text255,
    field10 type text255,
    field11 type text255,
    field12 type text255,
  end of ty_csv.
data lv_rawdata type pbeu0_t_raw_data.
data lv_file    type string.
data lt_csv type standard table of ty_csv.
data lt_excel type standard table of ty_csv.
data lv_file_ type rlgrap-filename.

break-point.

lv_file = 'C:\Users---\Documents\SAP\SAP GUI\1.xls'.
"lv_file = 'C:\Users\---\Documents\SAP\SAP GUI\1.txt'.
"lv_file = 'C:\Users\---\Documents\SAP\SAP GUI\1.csv'.

* upload data from file into rawdata
call function 'GUI_UPLOAD'
  exporting
    filename                = lv_file
    filetype                = 'ASC'
  tables
    data_tab                = lv_rawdata
  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
    others                  = 10.
if sy-subrc = 0.
**   convert data - fill internal table with data
*  call function 'HR_BE_CONVERT_CSV_TO_TAB'
*    exporting
*      it_tab_raw_data      = lv_rawdata
*    tables
*      p_tab_converted_data = lt_csv
*    exceptions
*      conversion_failed    = 1
*      others               = 2.
*  call function 'TEXT_CONVERT_CSV_TO_SAP'
*    exporting
**     I_FIELD_SEPERATOR    = ';'
**     I_LINE_HEADER        =
*      i_tab_raw_data       = lv_rawdata
**     I_FILENAME           =
*    tables
*      i_tab_converted_data = lt_csv
** EXCEPTIONS
**     CONVERSION_FAILED    = 1
**     OTHERS               = 2
*    .
*  if sy-subrc <> 0.
** Implement suitable error handling here
*  endif.

  lv_file_ = lv_file.

  call function 'TEXT_CONVERT_XLS_TO_SAP'
    exporting
*     I_FIELD_SEPERATOR    =
*     I_LINE_HEADER        =
      i_tab_raw_data       = lv_rawdata
      i_filename           = lv_file_
    tables
      i_tab_converted_data = lt_excel
* EXCEPTIONS
*     CONVERSION_FAILED    = 1
*     OTHERS               = 2
    .
  if sy-subrc <> 0.
* Implement suitable error handling here
  endif.
endif.

break-point.

Автор:  Besa [ Чт, сен 13 2018, 08:32 ]
Заголовок сообщения:  Re: Перенос данных Excel => SAP

https://ru.wikipedia.org/wiki/CSV
Цитата:
Значения, содержащие зарезервированные символы (двойная кавычка, запятая, точка с запятой, новая строка) обрамляются двойными кавычками ("). Если в значении встречаются кавычки — они представляются в файле в виде двух кавычек подряд.

Автор:  Besa [ Чт, сен 13 2018, 08:53 ]
Заголовок сообщения:  Re: Перенос данных Excel => SAP

Во, вот это работает, так и думал, что где то в классах сделали.

cl_rsda_csv_converter

Код скопируйте отсюда, на строке 52 укажите Ваш separator - ';' и data : lw_struct type ztest_struc типизируйте как надо.
https://gist.github.com/viksingh/c794ef0ee5cdbafa1d76

Автор:  Besa [ Чт, сен 13 2018, 08:59 ]
Заголовок сообщения:  Re: Перенос данных Excel => SAP

Этот Фм тоже проверил, работает как надо
Code:
    call function 'RSDS_CONVERT_CSV'

Автор:  Igor_Beruk [ Чт, сен 13 2018, 10:10 ]
Заголовок сообщения:  Re: Перенос данных Excel => SAP

Спасибо,Вам,огромное! Все работает! СПАСИБО!Я ИДИЁТ, УБЕЙТЕ МИНЯ КТО-НИБУДЬ!

Страница 2 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/