запись требует доработки - не допускается в файле

Я новичок в delphi и застрял с ошибкой финализации e2155. Я использую RAD 10 и пытаюсь запустить свою программу на мобильных устройствах. Он отлично работает на моем компьютере с Windows, но когда я перехожу на Android или IOS, он дает мне эту ошибку финализации.

Код:

    type
    TRaumparameter = record
      ID : string;
      Länge: string;
      Breite: string;
      Höhe: string;
      Fläche: string;
      Raumvolumen: string;
      Wände: string;
      Decke: string;
      Boden: string;
      Baujahr: string;
      Heizlast: string;
  end;
  var Aufstellraum: Traumparameter;
    { Public declarations }

  end;

var
  Form1: TForm1;

implementation
{$R *.fmx}
{$R *.iPad.fmx IOS}

procedure TForm1.speichernClick(Sender: TObject);
  var F: File of Traumparameter;
  begin
    Aufstellraum.Länge:=form2.Länge.Text;
    Aufstellraum.Breite:=form2.Breite.Text;
    Aufstellraum.Höhe:=form2.Höhe.Text;
    Aufstellraum.Fläche:=form2.Fläche.Text;
    Aufstellraum.Raumvolumen:=form2.ErgebnisRaumVol.Text;
    Aufstellraum.Wände:=form2.Wände.Text;
    Aufstellraum.Decke:=form2.Decke.Text;
    Aufstellraum.Baujahr:=form2.Baujahr.Selected.Text;
    Aufstellraum.Heizlast:=form2.Heizlast.Text;

    try
      AssignFile(F,'D:\test\1.txt');
      ReWrite(F);
      Write(F,Aufstellraum);
    finally
      CloseFile(F);
    end;
  end;

Я уже пытался ограничить длину строк с помощью [], но потом он говорит мне: ';' ожидалось, но найдено "[". Надеюсь, я смогу получить некоторые ответы, потому что какое-то время я молчал, но безуспешно. Заранее спасибо!!


person D. Flo    schedule 01.01.2016    source источник
comment
Устаревший ввод-вывод Pascal использовать не следует. Хранить как JSON.   -  person David Heffernan    schedule 02.01.2016
comment
Ваш код, показанный здесь, не будет работать даже в Windows, если вы не используете ShortString вместо String. Автобусы, как сказал LU RD в своем ответе ShortStrings, не поддерживаются на мобильных платформах.   -  person SilverWarior    schedule 02.01.2016


Ответы (2)


Когда вы пытаетесь записать файл записи, содержащий String типов, это не разрешено компилятором:

E2155 Тип '% s' требует доработки - не разрешен в типе файла (Delphi) / а>

Строка - это один из тех типов данных, которые требуют доработки, и поэтому они не могут быть сохранены в типе файла.

В любом случае нет смысла писать запись с полем String с использованием двоичного типа файла, поскольку вы будете писать адрес вместо текста (строка - это ссылочный тип).


Когда вы объявляете строки с выделенной длиной, они называются ShortString (тип значения). ShortString не поддерживается мобильными компиляторами.

Я предлагаю вам использовать другие методы для хранения текста. Посмотрите, например, как преобразовать запись в текст с помощью json.

person LU RD    schedule 02.01.2016

просто сделай это:

TRaumparameter = record
    ID : string[255];
    Länge: string[255];
    Breite: string[255];
    Höhe: string[255];
    Fläche: string[255];
    Raumvolumen: string[255];
    Wände: string[255];
    Decke: string[255];
    Boden: string[255];
    Baujahr: string[255];
    Heizlast: string[255];
 end;
person Ivan    schedule 31.10.2020
comment
Это не сработает для мобильных целей, так как короткие строки там не поддерживаются. Используя вместо этого ARRAY [0..255] OF CHAR, вы можете это сделать (но вам придется иметь дело с упаковкой / распаковкой из ARRAY OF CHAR в STRING). Но кроме этого, как указано в других ответах, вы не должны использовать FILE OF в современных программах - используйте потоковый ввод-вывод файлов и / или JSON / XML для хранения ваших данных. - person HeartWare; 31.10.2020