在 ISO/IEC 7185:1990(E) Standard Pascal 规范中,第 6.9.1 条中的程序read,“a)”小节内容如下:
a) 对于 n>=1,read(f,v1,...,vn) 应访问文本文件并建立 对该文本文件的引用以用于剩余的执行 陈述;每个 v1,...,vn 应是一个变量访问,拥有 类型是真实类型,是string-type,或者是兼容的 与字符类型或整数类型。对于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 条中提及它呢?
这是规范中的错误,还是我读错了?
我相信这是由于同时编写 ISO 10206 而产生的勘误(尽管 10206 后来获得批准)。 ISO 10206 Extended Pascal 的前言说:
技术发展
扩展 Pascal 融合了 ANSI/IEEE770X3.97-1983 的功能以及以下新功能:[...]
- 过程 read 已扩展为从文本文件中读取字符串。
强调这是一个新功能表明ISO 7185:1983没有上述功能。
此外,Kathleen Jensen 和 Niklaus Wirth 在 Pascal – 用户手册和报告(第 4 版修订版)(10.1007/978-1-4612-4450-9) 中写道,第 12.1 节阅读Pascal 报告部分:
在文本文件上使用
时,适用以下规则。 令Read
表示文本文件,并令f
, ...,v1
表示具有 Char 或 Integer(或其子范围)或 Real 类型的变量。vn
未提及从
text
文件读取字符串变量。
最后,无可否认这是一个弱点,但是GNU Pascal Compiler拒绝在
‑‑standard‑pascal
模式下读入字符串变量。
GPC 的开发人员已经尽可能地遵守 ISO 标准,因此我相信他们也正确地解释了上述部分。