有很多数据存储在由换行符分隔的记录组成的纯ascii文本文件中,每个记录由多个字段组成,有一个函数库来处理这些数据很有用。本练习介绍一些读取数据的函数;下一个练习将研究处理数据的一些函数。

我们将考虑四种常见类型的文本文件数据库。具有固定长度数据字段的文件具有固定字符数的记录,每个记录包含类似地位于固定位置的字段;数据前面可以是固定长度的报头。具有字符分隔字段的文件具有可变长度的记录,每个记录的字段由一个单字符分隔符分隔;分隔符通常是一个选项卡或垂直条。一种特殊类型的可变长度分隔的文本数据库称为逗号分隔值,其中分隔符是逗号,字段可能由双引号字符包围,因此引号字段中的逗号失去了作为字段分隔符的意义;在这种情况下,文字双引号字符可能会在引用字段中连续出现两个双引号字符。我们将考虑的第四种类型是名称值记录,其中每个记录由多个字段组成,每行一个字段,由空行分隔,每个字段由类型名称和由分隔符分隔的值组成;这种格式通常用于具有许多可选字段的数据库,例如书目数据库。

我们希望每个文件格式的读取器函数在每次调用时都返回一条记录,或者在输入耗尽时返回文件结束标记,并将文件指针前进到下一条记录的开头。返回值应该是一个列表或数组(以方便的为准),其中包含每个元素中一个字段的值,但名称值记录除外,该记录应该返回名称/值对的列表。

不同的操作系统具有不同的发送线路末端信号的方法。为了实现最大的可移植性,函数应该接受由回车符、换行符或两个字符按任意顺序指示的行尾。您应该准备接受任何类型的线标记,因为数据可能来自任何来源;例如,运行带有CRLF行标记的MS Windows的计算机可能会从带有空LF作为行标记的Linux计算机中获取数据。您还应该接受文件中的最后一行,无论它是否有尾随行标记。

您的任务是编写函数,从上述四种文件类型中的每一种中读取一条记录。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页码:1 2