Pascal基本读写文件处理

时间:2018-05-29 06:12:02

标签: pascal

我目前无法解决这些错误,似乎无法解决这些问题,我已将错误附加到我的错误以及代码中,谢谢。

错误:

  

i386免费Pascal编译器版本2.6.4 [2014/02/26]版权所有(c)   1993至2014年由Florian Klaempfl和其他目标操作系统:Darwin for i386   编译BasicReadWrite.pas BasicReadWrite.pas(22,30)错误:   不兼容的类型:得到“personArray”预期“LongInt”   BasicReadWrite.pas(25,8)错误:没有可用的默认属性   BasicReadWrite.pas(25,8)致命:语法错误,“;”预期但“[”   发现致命:编译中止错误:/ usr / local / bin / ppc386返回   错误exitcode(如果您没有指定源文件,则为正常)   编译)

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.

2 个答案:

答案 0 :(得分:3)

通常第一个错误是首先关注的错误。以下错误可能只是第一个错误的结果。我将帮助您开始解决第一个错误,但剩下的就让您解决了。您可能想与导师讨论错误。

所以,首先关注

  

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类型记录。您无法设置record
  2. 的长度
  3. SetLength()的第二个参数需要是integerArrayOfPersons不是整数。
  4. 我没有理由在该程序中设定任何长度。

答案 1 :(得分:0)

如果你需要一些解释,当你宣布:

personArray = array of Person;

这意味着personArray是一个动态数组。首先,您需要在使用前指定此动态数组的长度,例如:

setlength(personArray,20);

其中20是要存储在personArray中的索引量(不要忘记第一个索引是0!)。 e.g:

personArray[0].name:= 'John';
  

age:String; //这应该是一个整数吗?为什么/为什么不呢?

肯定是的,年龄应该是一个整数。您可以在String中存储年龄,但是整数占用的内存较少,您可以对整数使用数学运算(如果需要添加或减去年龄,该怎么办?您不能使用字符串进行数学运算)。只有在需要存储字母数字数据时才应使用字符串。

祝你好运!