Стандартный Pascal 7185 молчит при чтении строк из текстовых файлов

В спецификации ISO/IEC 7185:1990(E) Standard Pascal в пункте 6.9.1 для процедуры прочтения подраздел «a)» читается следующим образом:

a) Для n>=1 функция read(f,v1,...,vn) должна получить доступ к текстовому файлу и установить ссылка на этот текстовый файл для оставшегося выполнения заявление; каждый из v1,...,vn должен быть переменным доступом, имеющим тип, который является действительным типом, является строковым типом или совместим с типом char или с целочисленным типом. При n>=2 выполнение read(f,v1,...,vn) должно быть эквивалентно

начать чтение (ff, v1); читать(ff,v2,...,vn) конец

где ff обозначает указанный текстовый файл.

В нем перечислены допустимые типы переменных параметров: вещественные, строковые и типы, совместимые с символьными или целыми числами.

Однако оставшаяся часть предложения не определяет поведение строковых типов. В подразделе «b)» рассматривается тип char, в подразделе «c)» — целое число, в подразделе «d)» — тип real, но о строках больше не упоминается.

Я нахожу это странным, поскольку соответствующая процедура write определяет поведение строк в пункте 6.9.3.6 при описании того, что делают ее параметры. Судя по всему, цель состоит в том, чтобы позволить читать строки из текстовых файлов непосредственно в переменную доступа, имеющую строковый тип, иначе зачем вообще упоминать об этом в пункте 6.9.1?

Это ошибка в спецификации или я неправильно прочитал?

В чем разница между методом "==" и equals()
В чем разница между методом "==" и equals()
Это один из наиболее часто задаваемых вопросов новичкам на собеседовании. Давайте обсудим его на примере.
Замена символа по определенному индексу в JavaScript
Замена символа по определенному индексу в JavaScript
В JavaScript существует несколько способов заменить символ в строке по определенному индексу.
1
0
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я считаю, что это ошибка, возникшая в результате одновременной разработки ISO 10206 (хотя стандарт 10206 был утвержден позже). В предисловии ISO 10206 Extended Pascal говорится:

Техническое развитие

Расширенный Паскаль включает в себя функции ANSI/IEEE770X3.97-1983 и следующие новые возможности: […]

  • Процедура read была расширена для чтения строк из текстовых файлов.

Выделение этого как новой функции предполагает, что ISO 7185:1983 не имеет такой возможности.

Кроме того, Кэтлин Дженсен и Никлаус Вирт пишут на Паскале — руководство пользователя и отчет (4-е исправленное издание) (10.1007/978-1-4612-4450-9), § 12.1 Прочтите часть отчета на Паскале:

При использовании Read в текстовом файле применяются следующие правила. Пусть f обозначает текстовый файл, а v1, …, vn обозначают переменные типа Char или Integer (или поддиапазона любого из них) или Real.

Ни слова о чтении из файла text в строковую переменную. ПУМАР 4th изд. повторяет ISO 7185:1990.

Наконец, следует признать, что это слабое место, но компилятор GNU Pascal отказывается считывать строковую переменную в режиме ‑‑standard‑pascal. Разработчики GPC проделали большую работу по максимальному соблюдению стандартов ISO, поэтому я уверен, что они также правильно интерпретировали указанный раздел.

Другие вопросы по теме