You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

循环与数组理解困惑:如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:16:10