OberonCore
https://forum.oberoncore.ru/

Выдача Unix-ового перевода строки в XDS
https://forum.oberoncore.ru/viewtopic.php?f=30&t=3691
Страница 1 из 1

Автор:  Александр Ильин [ Пятница, 25 Ноябрь, 2011 14:05 ]
Заголовок сообщения:  Выдача Unix-ового перевода строки в XDS

Задумал написать консольную утилитку, преобразующую входной текстовый файл. Взялся за XDS, поскольку это самый простой на сегодня консольный инструмент среди Оберонов. Требование такое: на выходе могут быть файлы с Unix-овыми переводами строк (одиночный символ LF = 0AX).

Out.Ln выдаёт CRLF, это понятно. Настройки, чтобы задать LF - нету, это ладно.
Out.Char(0AX) выдаёт последовательность CRLF. Это уже странно.
Ладно, модуль Out - это надстройка над стандартной подсистемой работы с каналами ввода-вывода, написанной на Modula. Полезем в эту подсистему.

RawIO.Write(StdChans.OutChan(), 0AX); - выдаёт CRLF.
ch := 0AX; IOChan.RawWrite(StdChans.OutChan(), SYSTEM.ADR(ch), 1); - выдаёт CRLF.

Чувствую себя идиотом.

Автор:  Александр Ильин [ Пятница, 25 Ноябрь, 2011 14:31 ]
Заголовок сообщения:  Re: Выдача Unix-ового перевода строки в XDS

Думаю, из чего мне теперь мою утилитку собирать. Неужели из ББ?

Автор:  Александр Ильин [ Пятница, 25 Ноябрь, 2011 14:43 ]
Заголовок сообщения:  Re: Выдача Unix-ового перевода строки в XDS

А ещё выяснилось, что символ 09X (горизонтальная табуляция) при компиляции заменяется на восемь пробелов.
Вот так.
В исходнике символ табуляции, а в объектном файле - уже восемь пробелов. Безо всяких предупреждений, внезапно.

Автор:  Иван Кузьмицкий [ Пятница, 25 Ноябрь, 2011 15:03 ]
Заголовок сообщения:  Re: Выдача Unix-ового перевода строки в XDS

Александр Ильин писал(а):
Неужели из ББ?
И на Марсе бывает жизнь! :)))

Автор:  Александр Ильин [ Пятница, 25 Ноябрь, 2011 15:39 ]
Заголовок сообщения:  Re: Выдача Unix-ового перевода строки в XDS

Иван Кузьмицкий писал(а):
Александр Ильин писал(а):
Неужели из ББ?
И на Марсе бывает жизнь! :)))
Попробовал воспользоваться консольным олимпиадным компилятором (подсистема Info21olimp). Всё работает, кроме одного: если в строковой константе встречается символ табуляции (09X), то в процессе работы компилятора этот символ заменяется на пять символов: " 09X ".
Подскажите, где наиболее актуальная версия подсистемы находится. Я слышал, там были доработки касательно положения маркеров ошибок в тексте и т.п.

Автор:  igor [ Пятница, 25 Ноябрь, 2011 16:23 ]
Заголовок сообщения:  Re: Выдача Unix-ового перевода строки в XDS

Александр Ильин писал(а):
Out.Char(0AX) выдаёт последовательность CRLF. Это уже странно.
Модуль Out очень простой. Лучше его самому написать, без всяких странностей.

Автор:  Info21 [ Суббота, 26 Ноябрь, 2011 06:35 ]
Заголовок сообщения:  Re: Выдача Unix-ового перевода строки в XDS

Александр Ильин писал(а):
Попробовал воспользоваться консольным олимпиадным компилятором (подсистема Info21olimp).
Всё работает, кроме одного: если в строковой константе встречается символ табуляции (09X), то в процессе работы компилятора этот символ заменяется на пять символов: " 09X ".
Подскажите, где наиболее актуальная версия подсистемы находится.
Я слышал, там были доработки касательно положения маркеров ошибок в тексте и т.п.
Версия не менялась.

Вставка маркеров ошибок -- в школьной и базовой сборках для обеспечения перевода русских слов на английские и обратно, i21sysLanguage и т.д.

Но сама проблема непонятна.
Был текстовый файл. Во что он преобразуется? Откуда взялась цепочка литер? Зачем компилятор?
Всё это непонятно.

Автор:  Александр Ильин [ Суббота, 26 Ноябрь, 2011 10:15 ]
Заголовок сообщения:  Re: Выдача Unix-ового перевода строки в XDS

Info21 писал(а):
Был текстовый файл. Во что он преобразуется? Откуда взялась цепочка литер? Зачем компилятор?
Текстовый файл превращается в исходный текст модуля на Обероне, который при запуске выдаёт этот текст. Затем для проверки модуль компилируется, запускается, и выдача сравнивается с первоначальным файлом. Вылезают отличия в переводах строк и табуляциях.

Автор:  Info21 [ Суббота, 26 Ноябрь, 2011 15:16 ]
Заголовок сообщения:  Re: Выдача Unix-ового перевода строки в XDS

Александр Ильин писал(а):
Info21 писал(а):
Был текстовый файл. Во что он преобразуется? Откуда взялась цепочка литер? Зачем компилятор?
Текстовый файл превращается в исходный текст модуля на Обероне, который при запуске выдаёт этот текст. Затем для проверки модуль компилируется, запускается, и выдача сравнивается с первоначальным файлом. Вылезают отличия в переводах строк и табуляциях.
То есть нужно, чтобы модуль на Обероне выдавал плёвывал в точности этот текст?
Куда он его должен выдавать?

Если нужно зашить текст в виде цепочек литер, то опять же непонятно, в чем проблема: читая исходный тхт-файл мы же способны отфильтровать все спецсимволы, и зашить их в программу на Обероне соотв. образом. Не обязательно в виде литерных цепочек.

Автор:  Александр Ильин [ Суббота, 26 Ноябрь, 2011 15:50 ]
Заголовок сообщения:  Re: Выдача Unix-ового перевода строки в XDS

Info21 писал(а):
То есть нужно, чтобы модуль на Обероне выдавал в точности этот текст?
Куда он его должен выдавать?
Вы правильно поняли.
Выдавать должен либо в файл, либо на стандартный вывод.
Info21 писал(а):
Если нужно зашить текст в виде цепочек литер, то опять же непонятно, в чем проблема: читая исходный тхт-файл мы же способны отфильтровать все спецсимволы, и зашить их в программу на Обероне соотв. образом. Не обязательно в виде литерных цепочек.
Тема была в связи с тем, что стандартный вывод на консоль в XDS работает неправильно.

Изначально был простой sed-скрипт, который читал файл и выдавал все строки с префиксом "Out.String(" и суффиксом ");". Плюс заголовок и хвост модуля. Оказалось, что отличается конец строк. Написал модуль-обёртку, в котором Out.Ln выдавал нужные символы. Выяснилось, что XDS вообще не дружит с LF. Тогда переориентировал на олимпиадный компилятор. Выяснилось, что требуется специальная обработка символов табуляции.

Вернулся на XDS и решил проблему написанием собственного модуля выдачи на консоль по совету igor. Всего 54 строчки.

Автор:  igor [ Воскресенье, 27 Ноябрь, 2011 07:27 ]
Заголовок сообщения:  Re: Выдача Unix-ового перевода строки в XDS

Александр Ильин писал(а):
решил проблему написанием собственного модуля выдачи на консоль
Я и сам так поступал. Считаю, что для небольшой утилиты, выполняющей простые вобщем-то действия, такой путь вполне оправдан. Это к вопросу об эффективности повторного использования кода.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/