Чтение текста - Символ.ВК #103
то при встрече в тексте Символ.ВК будет считана ещё одна пустая строка.
Например, 1С вернёт:
Процедура ПриЗаписи(Отказ) Если Не КонтрольID(ЭтотОбъект) Тогда Отказ = Истина; Возврат; КонецЕсли;
а OneScrip вернёт:
- Bitbucket: https://bitbucket.org/EvilBeaver/1script/issue/103
The text was updated successfully, but these errors were encountered:
EvilBeaver commented Dec 29, 2014Original comment by Pr-Mex (Bitbucket: Pr-Mex, GitHub: Pr-Mex):
Файл, в котором встречаются Символы.ВК.
EvilBeaver commented Apr 7, 2015Original comment by artbear (Bitbucket: artbear, GitHub: artbear):
Код ниже выдает разные результаты в 1С и 1Скрипт для указанного файла
1С возвращает длину 125 (СтрЧислоСтрок 6)
1Скрипт возвращает длину 131 :(
EvilBeaver commented Apr 7, 2015Original comment by artbear (Bitbucket: artbear, GitHub: artbear):
Приложил тест (пока помечен как пропущенный) see #103
n-dimens commented Jun 16, 2016 •Вопрос к 1С-никам: А почему 1С выдает такую маленькую длину строки? Получается, он\она\оно игнорирует какие-то символы (ВК\ПС)? Потому что 131 - это как раз полный набор символов, с учетом непечатных символов (считал вручную, в notepad++ :))
P.S.: С количеством строк все понятно - используемая функция .NET воспринимает единичный Символ.ВК как конец строки, отсюда "набегают" лишние строки в .net.
EvilBeaver commented Jun 16, 2016Собственно issue как раз о том, что 1С считает переводом строки \n, а CLR - любую из комбинаций \r \n \r\n. Причем в 1С есть еще и override перевода строки. Можешь сказать, что строки разделены подстрокой "ТутНоваяСтрока". Я не стал реализовывать эту логику из-за низкой востребованности.
n-dimens commented Jun 16, 2016 •Так с переводом строки-то понятно, но при подсчете общей длины текста\файла 1С игнорирует символы '\n' что ли? И получается, тогда либо ЧтениеТекста.Прочитать должно возвращать текст без символов '\n' (что мне кажется слегка диким), либо СтрДлина должна игнорировать символы '\n'?
P.S.: Я взялся за эту задачу из-за пометки "bug", привычка в первую очередь стараться фиксить баги. В github вообще кроме меток приоритет задача как-то можно обозначить? Не очень привычный интерфейс баг-трекера ((
dmpas commented Jun 16, 2016при подсчете общей длины текста\файла 1С игнорирует символы '\n' что ли?
@svgorbunov нет, просто в строчке Стр = Текст.Прочитать(); в случае с 1С все ВК исчезают, потому что внутри 1С для переводов строк используются только ПС.
n-dimens commented Jun 16, 2016ааа, понял, он при чтении файла автоматически переводы строк корректирует.. ок, спасибо за разъяснение =)
n-dimens commented Jun 16, 2016гм. но тогда получается противоречие с тестами text-document.os ТестДолжен_ПроверитьЗаписьДокумента , ТестДолжен_ПроверитьЗаписьДокументаВКодировкеПоУмолчанию
а) ТекстовыйДокумент по умолчанию вставляет \r\n б) Тесты для ТекстовогоДокумента ожидают, что после записи и прочтения с помощью ЧтениеТекста.Прочитать, символы новой строки останутся неизменными = \r\n
Это такое противоречивое API у 1С, или поведение ТекстовыйДокумент в рамках OneScript так же не соответствует 1С, а тесты фиксируют ошибочное поведение? Мне тут видится проблема посолиднее, чем изначальная ошибка вычисление длины содержимого файла.
dmpas commented Jun 16, 2016@svgorbunov Односкрипт тут тоже не соответствует 1С. "\r" появляется/исчезает на границе 1С-файл. Внутри 1С \r не используется, если, конечно, явно не заставить.
EvilBeaver commented Jun 16, 2016Проблема в следующем: 1С считает "переводом строки" в файле некую комбинацию символов (на винде это \r\n, на линуксе не проверял). При считывании она конвертирует это во внутренний "перевод строки", который всегда \n
В 1Скрипте я сделал "в лоб" - использовал StreamReader.ReadLine.Однако у него совсем другая логика определения переводов строк. Нужно реализовывать собственное построчное чтение, аналогичное 1С. Причем, выявить дефолтное поведение в разных ОС.
И да, поведение ЧтениеТекста и ТекстовыйДокумент может отличаться и в самой 1С.
artbear commented Jun 17, 2016Предлагаю обозначить сценарии проверки, а затем проверить на Вин и Линукс. Что именно нужно проверить? (многабукв, все не прочел)
n-dimens commented Jun 17, 2016@artbear Суть проблемы: противоречие между тестами
- ТестДолжен_ПроверитьЗаписьДокумента
- ТестДолжен_ПроверитьЗаписьДокументаВКодировкеПоУмолчанию
(работают, потому что ЧтениеТекста обрабатывает концы строк \r\n как есть)
- ТестДолжен_ПрочитатьИзФайлаСРазнымиПереводамиСтрок
(НЕ работает, потому что ЧтениеТекста обрабатывает концы строк '\r\n' как есть)
Либо какой-то из тестов определяет поведение, не соответствующее требованиям, либо тесты text-document не должны зависеть от поведения ЧтениеТекста.
Задача: определить корректное поведение ЧтениеТекста и ТекстовыйДокумент, как под Linux, так и под Windows, и сформулировать требования к поведению в OneScript.