循环与数组理解困惑:如何修改Pascal文件读取过程实现循环与记录数组
帮你修改Pascal文件读取过程:循环控制+记录数组存储
嘿,刚接触Pascal时,循环和数组确实容易让人犯懵,我来帮你把这个过程改得符合需求,顺便给你讲清楚每个关键点~
首先,咱们得先明确Person类型的定义(你可能已经有了,但为了代码完整我补上),然后定义一个固定大小的记录数组来存储读取到的每一条Person记录。接下来用文件开头的数字控制循环次数,代替原来重复的ReadLn语句。
修改后的完整代码
// 先定义Person类型(如果你的代码里已经有了可以忽略这部分) type Person = record name: string; age: Integer; end; // 定义固定大小的Person数组,这里设最大存储100条记录,你可以根据需求调整 const MAX_PERSONS = 100; type PersonArray = array[1..MAX_PERSONS] of Person; procedure ReadLinesFromFile(var myFile: TextFile; var people: PersonArray; var count: Integer); var p: Person; number: Integer; i: Integer; begin // 读取文件开头的数字,这个数字表示要读取的记录条数 ReadLn(myFile, number); // 做个边界检查,避免读取的记录数超过数组最大容量 if number > MAX_PERSONS then number := MAX_PERSONS; count := number; // 把实际要存储的记录数返回给调用者 // 用数字控制循环,读取每条Person记录并存入数组 for i := 1 to number do begin ReadLn(myFile, p.name); ReadLn(myFile, p.age); people[i] := p; // 将读取的记录存入数组对应位置 end; end;
关键部分解释
- 固定大小数组定义:用
const MAX_PERSONS = 100设定数组最大长度,然后定义PersonArray类型,这样就能批量存储多条Person记录了。 - 循环控制:用
for i := 1 to number do循环,次数完全由文件开头的number决定,代替了原来重复写的ReadLn,代码更简洁也更灵活。 - 边界检查:加了
if number > MAX_PERSONS then number := MAX_PERSONS,防止文件里的数字太大导致数组越界报错,这是新手容易忽略的细节哦。 - 数组存储:每次循环读取完一条
Person记录后,用people[i] := p把记录存入数组的第i个位置,这样后续你就能通过数组索引访问任意一条记录了。
调用示例(供你参考)
var inputFile: TextFile; peopleList: PersonArray; personCount: Integer; i: Integer; begin Assign(inputFile, 'people.txt'); Reset(inputFile); ReadLinesFromFile(inputFile, peopleList, personCount); // 输出数组里的所有记录,验证是否读取正确 for i := 1 to personCount do begin Writeln('第', i, '个人:姓名=', peopleList[i].name, ',年龄=', peopleList[i].age); end; Close(inputFile); end.
内容的提问来源于stack exchange,提问作者Bill Patters
相关产品推荐
相关产品推荐

