Pascal Basic для чтения и записи файлов - PullRequest
0 голосов
/ 29 мая 2018

У меня в настоящее время проблемы с этими ошибками, и я не могу их устранить, я приложил ниже свои ошибки, а также мой код, спасибо.

Ошибки:

Бесплатный компилятор Pascal версии 2.6.4 [2014/02/26] для i386 Авторские права (c) 1993-2014 годы: Florian Klaempfl и другие. Целевая ОС: Darwin для i386 Компиляция BasicReadWrite.pas BasicReadWrite.pas (22,30) Ошибка: несовместимые типы: получено «personArray» ожидается «LongInt» BasicReadWrite.pas (25,8) Ошибка: свойство по умолчанию недоступно BasicReadWrite.pas (25,8) Fatal: синтаксическая ошибка, ";"ожидается, но "[" найден Фатально: Компиляция прервана Ошибка: / 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.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

На всякий случай, если вам нужны некоторые объяснения, когда вы объявляете:

personArray = array of Person;

, это означает, что personArray является динамическим массивом.Сначала вам нужно указать длину этого динамического массива перед использованием , например:

setlength(personArray,20);

, где 20 - это количество индексов, которые будут храниться в personArray (не забудьтепервый индекс 0!).например:

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

возраст: строка;// Должно ли это быть целое число?Почему / почему нет?

Определенно, да, возраст ДОЛЖЕН быть целым числом.Вы можете хранить возраст в строке, но целое число занимает меньше памяти, и вы можете использовать математические операции с целыми числами (Что делать, если вам нужно добавить или вычесть возраст? Вы не можете выполнять математические операции со строками).Строка должна использоваться только тогда, когда вам нужно хранить буквенно-цифровые данные.

Удачи!

0 голосов
/ 29 мая 2018

Обычно первая ошибка - это первая.Следующие ошибки могут быть просто последствия первой.Я помогу вам начать работу с первой ошибкой, а остальное оставим на ваше усмотрение.Возможно, вы захотите обсудить с вашим наставником ошибки.

Итак, сначала сосредоточьтесь на

BasicReadWrite.pas (22,30) Ошибка: несовместимые типы: ожидается "personArray""LongInt"

Строка 22 в

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

Эта строка ошибочна, потому что:

  1. p относится к типу Personзапись.Вы не можете установить длину record.
  2. Второй аргумент SetLength() должен быть integer.ArrayOfPersons не является целым числом.

Я не вижу причин устанавливать длину чего-либо в этой процедуре.

...