Чтение текста - Символ.ВК #103

Чтение текста - Символ.ВК #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, 2014

Original comment by Pr-Mex (Bitbucket: Pr-Mex, GitHub: Pr-Mex):

Файл, в котором встречаются Символы.ВК.

EvilBeaver commented Apr 7, 2015

Original comment by artbear (Bitbucket: artbear, GitHub: artbear):

Код ниже выдает разные результаты в 1С и 1Скрипт для указанного файла

1С возвращает длину 125 (СтрЧислоСтрок 6)

1Скрипт возвращает длину 131 :(

EvilBeaver commented Apr 7, 2015

Original 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.

📎📎📎📎📎📎📎📎📎📎