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 файл,в самих полях которого могут присутствовать ';' - при считывании во внутреннюю таблицу стандартными ФМ происходит неверная интерпритация из-за этого. Как это обойти? В смысле "как обойти"? Представьте что это не стандартный Фм, а Ваш собственный, вот у Вас есть строка которую нужно распарсить, где по условию ";" является разделителем, как Вы сами поймете что является разделителем, а что нет? Что Вам говорит на этот счет источник который собрал такой файл? |
Автор: | 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/ |