Ada 编程/输入输出
标准 Ada 库提供了多种输入/输出功能,每种功能都适应于特定的需求。具体来说,该语言定义了以下专用包
- Text_IO
- Sequential_IO
- Direct_IO
- Stream_IO
程序员必须根据应用程序需求选择合适的包。例如,应该考虑应用程序处理的数据的以下属性
- 数据内容:纯文本还是二进制数据?
- 访问数据:随机访问还是顺序访问?
- 介质:数据文件、控制台、网络/数据总线?
- 数据结构:同构文件(相同数据字段的序列),异构文件(不同的数据字段)?
- 数据格式:是否符合现有的数据格式,或者应用程序可以自由选择新的格式?
例如,Stream_IO 功能强大,可以处理复杂的数据结构,但可能比其他包更重;Sequential_IO 轻巧易用,但不能被需要随机数据访问的应用程序使用;Text_IO 只能处理文本数据,但足以处理命令行控制台。
下表提供了一些关于如何选择最合适的包的建议
数据访问 | 纯文本 | 二进制数据 | |
---|---|---|---|
同构 | 异构 | ||
顺序 | Text_IO | Sequential_IO | Stream_IO |
随机 | Stream_IO | Direct_IO | Stream_IO |
因此,最重要的教训是要选择正确的包。本章将更详细地描述这些标准包,解释如何有效地使用它们。除了这些 Ada 定义的一般 I/O 操作包外,每个 Ada 编译器通常都有其他实现定义的输入输出功能,还有其他 用于专门 I/O 需求的外部库,例如 XML 处理或与数据库接口。
文本 I/O 可能是最常用的输入输出包。文件中的所有数据都以人类可读的文本形式表示。文本 I/O 提供对行和页面布局的支持,但标准是自由格式文本。
with
Ada.Text_IO;procedure
Mainis
Str : String (1 .. 80); Last : Natural;begin
Ada.Text_IO.Get_Line (Str, Last); Ada.Text_IO.Put_Line (Str (1 .. Last));end
;
此示例将文本从标准输入复制到标准输出,前提是所有行都小于 80 个字符(字符串长度)。请参见包 文本 I/O 如何处理更长的行。
该包还包含几个用于将数值和枚举类型转换为字符字符串的泛型包;有用于处理有界和无界字符串的子包,允许程序员轻松地在同一个文件中读取和写入不同的数据类型(对于 Integer、Float 和 Complex 类型,这些泛型包有一些现成的实例)。最后,针对类型 Wide_Character 和 Wide_Wide_Character 的相同 Ada.Text_IO 包族(包括几个子包和实例化包)。
值得注意的是,Text_IO 包族提供了一些自动文本处理。例如,数值和枚举类型的 Get 过程会忽略一行开头的空格(String 的 Get_Line 没有这种行为),或者在关闭文件时添加行和页面终止符。因此,这适用于处理简单文本数据的应用程序,但需要直接管理文本(例如,对字符编码的原始访问)的用户必须考虑其他包,例如 Sequential_IO。
请参见 本教程,以获取在 Ada 中使用文本 I/O 的更长示例。
直接 I/O 用于随机访问文件,这些文件只包含一种特定类型元素。使用 Direct_IO,您可以将文件指针定位到该类型的任何元素(随机访问),但是您不能随意选择元素类型,元素类型必须是 确定的子类型。
直接 I/O 用于随机访问文件,这些文件只包含一种特定类型元素。使用 Sequential_IO,情况正好相反:您可以选择 确定 和 不确定 元素类型,但是您必须一个接一个地读取和写入元素。
流式 I/O 是 Ada 提供的最强大的输入输出包。流式 I/O 允许您在一个顺序文件中混合来自不同元素类型的对象。为了从流中读取/写入,每个类型都提供了一个 'Read 和 'Write 属性,以及一个 'Input 和 'Output 属性。这些属性是为您声明的每个类型自动生成的。
'Read 和 'Write 属性将元素视为原始数据。它们适合于低级输入/输出,以及与其他编程语言的接口。
'Input 和 'Output 属性会向文件添加额外的控制信息,例如,数组的 'First 和 'Last 属性。
在面向对象的编程中,您还可以使用 'Class'Input 和 'Class'Output 属性 - 它们将存储和恢复实际的对象类型。
流式 I/O 也是最灵活的输入输出包。所有 I/O 属性都可以使用表示子句替换为用户定义的函数或过程,您可以使用灵活的面向对象技术提供您自己的流式 I/O 类型。
- Ada 编程
- Ada 编程/库/Ada.Direct_IO
- Ada 编程/库/Ada.Sequential_IO
- Ada 编程/库/Ada.Streams
- Ada 编程/库/Ada.Text_IO
- Ada 编程/库/Ada.Text_IO.Enumeration_IO(嵌套包)
- Ada 编程/库/Ada.Text_IO.Integer_IO(嵌套包)
- Ada 编程/库/Ada.Text_IO.Modular_IO(嵌套包)
- Ada 编程/库/Ada.Text_IO.Float_IO(嵌套包)
- Ada 编程/库/Ada.Text_IO.Fixed_IO(嵌套包)
- Ada 编程/库/Ada.Text_IO.Decimal_IO(嵌套包)
- Ada 编程/库/Ada.Text_IO.Bounded_IO
- Ada 编程/库/Ada.Text_IO.Unbounded_IO
- Ada 编程/库/Ada.Text_IO.Complex_IO(专门需求附件)
- Ada 编程/库/Ada.Text_IO.Editing(专门需求附件)
- Ada 编程/库/Ada.Integer_Text_IO
- Ada 编程/库/Ada.Float_Text_IO
- Ada 编程/库/Ada.Complex_Text_IO(专门需求附件)
- Ada 编程/库/Ada.Storage_IO(不是通用 I/O 包)
- Ada 编程/库/Ada.IO_Exceptions
- Ada 编程/库/Ada.Command_Line
- Ada 编程/库/Ada.Directories
- Ada 编程/库/Ada.Environment_Variables
- Ada 编程/库/GNAT.IO(实现定义)
- Ada 编程/库/GNAT.IO_Aux(实现定义)
- Ada 编程/库/GNAT.Calendar.Time_IO (实现定义)
- Ada 编程/库/System.IO (实现定义)
- Ada 编程/库
- Ada 编程/平台
- Ada 编程/平台/Linux
- Ada 编程/平台/Windows