
简单文件编辑。压缩包。
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
文本编辑程序是计算机进行文字处理的基础软件工具,它能够实现对文本文件的插入、删除以及其他修改操作。将限制这些操作仅限于逐行进行的编辑的程序称为行编辑程序。被编辑的文本文件可能具有庞大的规模,将整个文件加载到编辑程序的内存空间(RAM)中既不经济,也可能无法完全实现。因此,一种常见的解决方法是采用逐段进行编辑的方法。在任何时刻,只保留待编辑文件的一小段内容存储在内存中,这一小段区域被称为活区。请按照这种方法来实现一个简单的行编辑程序。假设文件中每行的长度不超过 320 个字符,通常情况下不会超过 80 个字符。
[基本要求]需要实现以下四条基本的编辑命令:(1) 行插入。格式为:`i<行号><回车><文本>.<回车>`,该命令会将`<文本>`插入到活区中第`<行号>`行之后。(2) 行删除。格式为:`d<行号 1>[ <行号 2>]<回车>`,该命令会删除活区中从第`<行号 1>`行到第`<行号 2>`行的内容(包括这两行)。例如,“`d10<回车>`”和“`d10 14<回车>`”都是有效的格式示例。(3) 活区切换。格式为:`n<回车>`,该命令会将当前活区的内容写入输出文件,并从输入文件中读取下一段作为新的活区。(4) 活区显示。格式为:`p<回车>`,该命令会逐页地(每页包含 20 行)显示活区的当前内容。每显示一页内容之后,系统会询问用户是否继续显示后续各页(如果存在),并以每行前置一个固定的四位行号和一个空格符的方式打印输出每一行。各条命令中的“行号”均需确保在活区中的所有行的实际编号范围内有效;只有在执行“行插入”命令时,插入点可以等于活区第一行的实际编号减一(表示在当前屏幕的第一行之前插入),否则该命令参数将被判定为非法。[测试数据] 此处省略。[实现提示] (1) 使用一个变量来描述活区的当前大小,以“activemaxlen”来表示(可配置)。考虑到文本文档的字符长度通常遵循正态分布,其峰值位于 60 到 70 之间,如果使用一个大小为 `320 * activemaxlen` 的字符数组来存储即将要处理的文本块可能会造成巨大的内存浪费。因此建议采用标准行的概念来为每一行的存储分配空间;每个标准行块可以容纳最多 81 个字符。这些标准行块可以组织成一个数组或使用动态链表进行连接的方式管理它们。一行文字可能跨越多个标准行块进行存储。在每一行的末尾可以使用一个特殊的 ASCII 控制字符(例如 `[012]`)来标记其结束位置。此外, 还应记录下活区的起始实际编号。(2)初始化过程包括:首先请用户提供输入文件名(如果输入文件名为空字符串则表示没有输入文件),以及输出文件名;两者不能相同. 然后尽可能多地从输入文件中读取各行为单位的内容, 但读取的数量不能超过 `activemaxlen - x.x` 的值, 其中 `x.x` 是一个可自定义的参数, 例如设置为20。(3)当执行“行插入”命令时, 每接收到一行数据时都需要检查当前的活区大小是否已经达到了预设的最大容量 `activemaxlen` 。如果达到最大容量, 则应该将插入点之前的部分激活区域中的第一行为写入到输出文件中; 如果插入点位于第一行为前, 则只需要将新插入的一行为写入输出文件。(4)如果输入文件尚未被完全读取完毕, 执行“活区切换”命令可以保留原激活区域中最后几行的内容并将其放置在激活区域的顶部, 以保持阅读连续性;否则, 这意味着结束当前的编辑过程或开始对另一个文件进行编辑。(5) 可以设置前三条指令执行完毕后自动调用“活区显示”功能。[选作内容] (1) 对所有无效的命令格式等情况进行严格的错误检查和相应的处理机制。(2) 增加更复杂的编辑操作功能, 例如对某一行进行字符串替换; 在激活区域内执行模式匹配等操作. 命令格式可以为: `S<行号>@<串 1>@<串 2><回车>`, 和 `m<串><回车>` 。
全部评论 (0)


