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 |
Иван Кузьмицкий писал(а): Александр Ильин писал(а): Неужели из ББ? И на Марсе бывает жизнь! :)))Подскажите, где наиболее актуальная версия подсистемы находится. Я слышал, там были доработки касательно положения маркеров ошибок в тексте и т.п. |
Автор: | 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/ |