Текущее время: Вс, июл 20 2025, 14:20

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Глюк READ DATASET?
СообщениеДобавлено: Ср, мар 21 2007, 12:29 
Ассистент
Ассистент

Зарегистрирован:
Вт, сен 26 2006, 06:57
Сообщения: 47
Всем добрый день.

Встретилась странная ошибка в стандартной программе, потом я написал тестовую программку, которая воспроизводит те же действия по работе с файлом, - и получает те же результаты. :(

По определению из документации система R/3 является Unicode system (ЕСС 6.0, SAP_BASIS 7.00). Тестовая программа читает плоский текстовый файл (в UTF-8 ), но символ end-of-line интерпретируется как-то странно (как '#') - если по документации, то его не должно быть.

Code:
open dataset ds for input in text mode encoding default.
* некоторые действия опущены..
data: line(4096).
* последним символом line всегда оказывается '#'
read dataset ds into line.
* здесь тоже кой-какие действия
close dataset dataset.


Почему так происходит? Может, я что-то не так делаю?
Заранее спасибо за помощь.

Правка: UTF-8)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, мар 21 2007, 13:29 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, авг 22 2005, 14:50
Сообщения: 1285
Откуда: с работы
Пол: Женский
А в каком формате переноса вы загружаете файл на сервер? BIN или ASCII?

А убрать символ # в конце строки можно и не зависеть от форматов:
Code:
  REPLACE ALL OCCURRENCES OF
    cl_abap_char_utilities=>cr_lf(1)   IN buf_str WITH ''.
  REPLACE ALL OCCURRENCES OF
    cl_abap_char_utilities=>cr_lf+1(1) IN buf_str WITH ''.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, мар 21 2007, 13:56 
Ассистент
Ассистент

Зарегистрирован:
Вт, сен 26 2006, 06:57
Сообщения: 47
Цитата:
А в каком формате переноса вы загружаете файл на сервер? BIN или ASCII?

Только что еще раз перепроверил, переношу в формате BIN.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Глюк READ DATASET?
СообщениеДобавлено: Ср, мар 21 2007, 13:56 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
linker написал(а):
но символ end-of-line интерпретируется как-то странно (как '#')


Всё нормально интерпретируется. Вот только на экран, в т.ч. и в отладчике, все непечатные символы отображается как #.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Глюк READ DATASET?
СообщениеДобавлено: Ср, мар 21 2007, 14:02 
Ассистент
Ассистент

Зарегистрирован:
Вт, сен 26 2006, 06:57
Сообщения: 47
sibrin написал:
linker написал(а):
но символ end-of-line интерпретируется как-то странно (как '#')


Всё нормально интерпретируется. Вот только на экран, в т.ч. и в отладчике, все непечатные символы отображается как #.

Дело в том, что я не могу найти в документации, что последний символ в строке будет CR/LF (где-то читал, что для UTF-8 это по идее два 0x0). Поэтому стандартная транзакция OODT падает в дамп. :(


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, мар 21 2007, 14:11 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, авг 22 2005, 14:50
Сообщения: 1285
Откуда: с работы
Пол: Женский
попробуйте как раз в ascii загрузить. У меня такая проблема была. Сейчас смоделировала - действительно, в нумце в конце строки #, в асции таких символов нет


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, мар 21 2007, 14:18 
Ассистент
Ассистент

Зарегистрирован:
Вт, сен 26 2006, 06:57
Сообщения: 47
Galka написала:
попробуйте как раз в ascii загрузить. У меня такая проблема была. Сейчас смоделировала - действительно, в нумце в конце строки #, в асции таких символов нет

Вылетает с ошибкой: CONVT_CODEPAGE, при преобразовании from codepage 4110 (UTF-8) to codepage 4102 (UTF-16BE).. Записи по обеим кодовым страницам присутствуют в таблице TCP00.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Глюк READ DATASET?
СообщениеДобавлено: Ср, мар 21 2007, 14:20 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
linker написал(а):
где-то читал, что для UTF-8 это по идее два 0x0.


Чушь, в utf-8 символы до 127 идентичны ASCII.
Для того эту кодировку и придумали, чтобы не было проблем
на переходом этапе на 16 бит.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re:
СообщениеДобавлено: Пн, май 20 2013, 11:11 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Чт, июл 09 2009, 15:15
Сообщения: 14
Пол: Мужской
Galka написала:
А убрать символ # в конце строки можно и не зависеть от форматов:
Code:
  REPLACE ALL OCCURRENCES OF
    cl_abap_char_utilities=>cr_lf(1)   IN buf_str WITH ''.
  REPLACE ALL OCCURRENCES OF
    cl_abap_char_utilities=>cr_lf+1(1) IN buf_str WITH ''.


Можно пояснить этот код? Использую его в трансформации для удаления непечатных символов в строке. Но не только в конце строки, а и внутри строки. Непонятно для чего нужен сдвиг при втором вызове класса? Не работает.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Глюк READ DATASET?
СообщениеДобавлено: Пн, май 20 2013, 11:29 
Специалист
Специалист

Зарегистрирован:
Чт, мар 25 2010, 09:02
Сообщения: 207
Цитата:
If the file was opened as a binary file or as a legacy-binary file, as much data is read that fits into the data object dobj. If the data object dobj is longer than the number of exported characters, it is filled with hexadecimal 0 on the right.


А у вас случайно не этот случай?

Как вы открываете файл?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Глюк READ DATASET?
СообщениеДобавлено: Пн, май 20 2013, 11:41 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Чт, июл 09 2009, 15:15
Сообщения: 14
Пол: Мужской
Источником данных считывается значение поля char40 из прозрачной таблицы.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re:
СообщениеДобавлено: Пн, май 20 2013, 13:45 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Reddy написал:
Непонятно для чего нужен сдвиг при втором вызове класса? Не работает.

А вы посмотрите размерность константы cl_abap_char_utilities=>cr_lf :wink:

Reddy написал:
Использую его в трансформации для удаления непечатных символов в строке.

Это неправильно. CRLF - это только перевод строки. Непечатных сиволов намного больше.
Для проверки нужно использовать сравнение с массивом 'A'..'Z', 'a'..'z', 'А'..'Я', 'а'..'я', '0'..'9', знаки препинания.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re:
СообщениеДобавлено: Пн, май 20 2013, 19:06 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, окт 22 2009, 12:41
Сообщения: 473
Удав написал(а):
Непечатных сиволов намного больше.
Для проверки нужно использовать сравнение с массивом 'A'..'Z', 'a'..'z', 'А'..'Я', 'а'..'я', '0'..'9', знаки препинания.
Но ведь может получиться, что в этом массиве будет слишком много символов, начиная от @ и заканчивая заковыристыми иероглифами? Не окажется ли в таком случае разумной альтернавивой использование спецсимволов для регекспов типа "[ [:print:] ]"?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re:
СообщениеДобавлено: Вт, май 21 2013, 00:42 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
weise написал(а):
Но ведь может получиться, что в этом массиве будет слишком много символов, начиная от @ и заканчивая заковыристыми иероглифами? Не окажется ли в таком случае разумной альтернавивой использование спецсимволов для регекспов типа "[ [:print:] ]"?

Может, в общем случае. И использование регулярных выражений естественно лучше, но только в рамках NetWeaver.
Но здесь
Reddy написал:
Источником данных считывается значение поля char40 из прозрачной таблицы.

_________________
С уважением,
Удав.


Последний раз редактировалось Удав Вт, май 21 2013, 20:44, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Глюк READ DATASET?
СообщениеДобавлено: Вт, май 21 2013, 09:48 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
возможно это возврат каретки виндовый, попробуйте как выше писали:
Code:
replace all occurrences of cl_abap_char_utilities=>cr_lf(1) in buf1 with ``.
-или-
replace all occurrences of `\r` in buf1 with ``.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB