首页 > 解决方案 > Pascal 基本读写文件处理

问题描述

我目前遇到这些错误的问题,似乎无法通过它们,我已在我的错误和代码下方附上,谢谢。

错误:

Free Pascal Compiler version 2.6.4 [2014/02/26] for i386 Copyright (c) 1993-2014 by Florian Klaempfl and others Target OS: Darwin for i386 Compiling BasicReadWrite.pas BasicReadWrite.pas(22,30) Error: Incompatible types :得到“personArray”预期“LongInt”BasicReadWrite.pas(25,8)错误:没有可用的默认属性BasicReadWrite.pas(25,8)致命:语法错误,“;” 预期但发现“[” 致命:编译中止错误:/usr/local/bin/ppc386 返回错误退出代码(如果您没有指定要编译的源文件,则正常)

program BasicReadWrite;

type

  Person = record
        name: String;
        age: String;  // Should this be an integer? Why/Why not?
  end;

 personArray = array of Person;

procedure WriteLinesToFile(var myFile: TextFile; const pe: Person);
begin
    WriteLn(myFile, pe.age);
    WriteLn(myFile, pe.name);
end;

procedure PrintRecords(const ArrayOfPersons: personArray; count: Integer);
var
  p: Person;
begin
  setLength(p, ArrayOfPersons);
  for count:= 0 to high(ArrayOfPersons) do 
    begin
         p[count] := WriteLinesToFile();
    end;
end;

procedure ReadLinesFromFile(var myFile: TextFile);
var 
  p: Person;
  number: Integer;
  ArrayOfPersons: personArray;
begin
  for number:= 0 to 20 do 
    begin
       PrintRecords([number]);
    end;
end;

procedure Main();
var 
myFile: TextFile;
begin
  AssignFile(myFile, 'mytestfile.dat');
  ReWrite(myFile);  // Use ReWrite to open a file for writing 
  WriteLinesToFile(myFile);
  Close(myFile); // We need to close the file and re-open it, as Pascal
                // will not let you Read and write from a file at the same time.

  AssignFile(myFile, 'mytestfile.dat');
  Reset(myFile); // Open the file for reading.
  ReadLinesFromFile(myFile);
  Close(myFile);
end;

begin
  Main();
end.

标签: pascal

解决方案


通常第一个错误是首先要关注的错误。以下错误可能只是第一个错误的后果。我将帮助您从第一个错误开始,但剩下的留给您解决。您可能想与您的导师讨论这些错误。

所以,首先关注

BasicReadWrite.pas(22,30) 错误:不兼容的类型:得到“personArray”预期“LongInt”

22号线在

procedure PrintRecords(const ArrayOfPersons: personArray; count: Integer);
var
  p: Person;
begin
  setLength(p, ArrayOfPersons); // line 22

那条线是错误的,因为:

  1. pPerson类型记录。您不能设置 a 的长度record
  2. to 的第二个参数SetLength()必须是 an integerArrayOfPersons不是整数。

我认为没有任何理由在该过程中设置任何内容的长度。


推荐阅读