Pascal CloseФайл не найден

Я делаю программу в Delphi, и я пытаюсь настроить игру с помощью «файла сохранения». Я делаю это в Delphi, а не когда приношу код домой. Я просто использую компилятор pascal и не могу запустить свою программу, так как получаю следующие ошибки.

Free Pascal Compiler version 2.6.2-8 [2014/01/22] for x86_64                                                                                                     
Copyright (c) 1993-2012 by Florian Klaempfl and others                                                                                                           
Target OS: Linux for x86-64                                                                                                                                      
Compiling control.p                                                                                                                                              
control.p(44,12) Error: Identifier not found "CloseFile"                                                                                                         
control.p(116,14) Error: Identifier not found "closeFile"                                                                                                        
control.p(127,13) Error: Identifier not found "assignFile"                                                                                                       
control.p(143,4) Fatal: There were 3 errors compiling module, stopping                                                                                           
Fatal: Compilation aborted                                                                                                                                       
Error: /usr/bin/ppcx64 returned an error exitcode (normal if you did not specify a source file to be compiled)

Извините, если это глупый вопрос, но я новичок в файлах, и я действительно хочу, чтобы это работало. Ниже приведен весь мой текущий код на всякий случай, если он вам понадобится, извините, если он запутал его черновик, и спасибо за помощь.

program Task3;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils;

Type
  gameRec = record
    name: string[30];
    skill: integer;
    str: integer;
    modif: integer;
    sskill: string[3];
    sstr: string[3];
    smodif: string[3];
    sf: integer;
    ssf : string[1];
  end;

var
  gameFile : file of gameRec;
  p1, p2 : gameRec;

procedure showStats;
begin
  FileMode := fmOpenRead;
  Reset(gameFile);
  read(gameFile, p1);
  read(gameFile, p2);

  writeln;
  writeln(p1.name, '''s stats');
  writeln('Skill: ', p1.skill);
  writeln('Strenght: ', p1.str);
  writeln('Modifier: ', p1.modif);
  writeln;
  writeln(p2.name, '''s stats');
  writeln('Skill: ', p2.skill);
  writeln('Strenght: ', p2.str);
  writeln('Modifier: ', p2.modif);
  writeln;
  CloseFile(gameFile);
end;

procedure resetsf;
var
  ran12, ran4, namelen: integer;
  namepass: boolean;
  name: string;
begin
  writeln('No save file detected, generating new stats');
  namelen := 0;

    namepass := false;
    repeat
      write('What is player 1''s name: ');
      readln(name);
      namelen := length(name);
      if (namelen > 2) and (namelen < 30) then
      begin
        p1.name := name;
        namepass := true;
      end
      else
        writeln('You name must be between 3 and 30 characters');
    until namepass = true;
    namepass := false;
    repeat
      write('What is player 2''s name: ');
      readln(name);
      namelen := length(name);
      if (namelen > 2) and (namelen < 30) then
      begin
        p2.name := name;
        namepass := true;
      end
      else
        writeln('You name must be between 3 and 30 characters');
    until namepass = true;


    ran12 := random(12) + 1;
    ran4 := random(4) + 1;
    p1.skill := 10 + (ran12 div ran4);

    ran12 := random(12) + 1;
    ran4 := random(4) + 1;
    p1.str := 10 + (ran12 div ran4);

    ran12 := random(12) + 1;
    ran4 := random(4) + 1;
    p2.skill := 10 + (ran12 div ran4);

    ran12 := random(12) + 1;
    ran4 := random(4) + 1;
    p2.str := 10 + (ran12 div ran4);


    reWrite(gameFile);
    p1.sskill := inttostr(p1.skill);   //debug
    p1.sstr := inttostr(p1.str);
    p1.smodif := inttostr(p1.modif);
    //write(gameFile,p1);

    p2.sskill := inttostr(p2.skill);
    p2.sstr := inttostr(p2.str);
    p2.smodif := inttostr(p2.modif);   //debug
    write(gameFile,p2);

    p1.sf := 1;
    p1.ssf := inttostr(p1.sf);
    write(gameFile,p1);   //debug

    closeFile(gameFile);
    FileMode := fmOpenRead;
  Reset(gameFile);
  read(gameFile, p1);
  read(gameFile, p2);



end;

begin
  assignFile(gameFile, 'N:\gamerec.dat');
  randomize;
  writeln('Game :)');
  writeln('By Sam Collins');
  writeln;

  FileMode := fmOpenRead;
  Reset(gameFile);
  read(gameFile, p1);
  writeln(p1.sf);
  if p1.sf = 0 then
    resetsf
  else
    writeln('Save file detected using old stats');
  showStats;
  readln;
end.

person Sam Collins    schedule 24.10.2014    source источник
comment
Вы просите помочь заставить этот код работать с FPC, а не с Delphi, поэтому я изменил ваши теги. Имейте в виду, что существуют некоторые различия между тем, как ведут себя разные реализации Pascal.   -  person    schedule 24.10.2014
comment
Спасибо за это, я исправил это с помощью {$mode objfpc }, но теперь моя проблема в том, что он завершается с кодом ошибки 217.   -  person Sam Collins    schedule 25.10.2014
comment
инструкция, которую я научился использовать в Pascal FPC для закрытия файлов, просто close(gameFile), а также для назначения это assign(gameFile) Не могу увидеть полную информацию о коде ошибки 217, чтобы дать вам более подробное решение.   -  person sir psycho sexy    schedule 25.10.2014
comment
Вроде пока все исправил, пробовал совсем по другому   -  person Sam Collins    schedule 25.10.2014
comment
Почему вы сочли необходимым не только опубликовать кучу нерелевантного кода, но и опубликовать тот же самый код еще раз? Задавая здесь вопросы, указывайте только тот код, который имеет отношение к вашему вопросу, чтобы нам не пришлось просеивать весь посторонний шум, чтобы выяснить, о чем вы спрашиваете. См. Как создать минимальный, полный проверяемый ответ, чтобы узнать, как это сделать.   -  person Ken White    schedule 26.10.2014
comment
Я не хотел иметь код дважды, я не знаю, почему он дублируется   -  person Sam Collins    schedule 26.10.2014
comment
@KenWhite: я думаю, что Сэму каким-то образом удалось дважды вставить вопрос целиком при редактировании. Дублирующаяся часть теперь удалена, но, Сэм, было бы неплохо, если бы ты попытался удалить ненужные части из того, что осталось.   -  person Andriy M    schedule 07.11.2014


Ответы (2)


Если вам нужна совместимость с Delphi, переведите компилятор в режим Delphi либо путем компиляции с параметром -Sd, либо путем добавления {$mode Delphi} в исходный код (где-то вверху, например, рядом с $apptype).

Затем будут приняты методы closefile() и assignfile(). Диалект по умолчанию — турбо паскаль. Lazarus по умолчанию помещает FPC в objfpc (который также похож на delphi).

Closefile находится в модуле (objpas) с усовершенствованиями системного модуля, которые доступны только в Delphi или objfpc modi.

Использование пространств имен (SYSTEM.sysutils вместо sysutils) также может быть опасным. Лучше упростить до sysutils. Пространства имен — это расширение Delphi, которое получило широкое распространение только в Delphi XE2.

Я тестировал и удалял {$R *.res}, удаляя system. до того, как sysutils и -Sd заставят код скомпилироваться

person Marco van de Voort    schedule 27.10.2014

Если я правильно понял вопрос, вы хотите портировать кусок кода с Delphi на Free Pascal и у вас проблемы с файловыми операциями.

В Free (и Turbo) Pascal работа с файлами намного проще, чем в Delphi: в Pascal у нас есть Assign вместо AssignFile и Close вместо этого. из CloseFile . Синтаксис этих двух процедур можно найти в справочной системе.

person Bogdan Doicin    schedule 26.10.2014
comment
Как указал Марко, вы можете использовать обработку файлов в стиле TP с помощью .CloseFile/.AssignFile, если вы установите режим ObjFPC или Delphi... Это все еще обработка файлов в старом стиле. - person reiniero; 14.11.2014