On Tue, 7 Mar 2017, Sven Barth via fpc-pascal wrote:

Am 07.03.2017 13:49 schrieb "fredvs" <fi...@hotmail.com>:

To access a file stored as a resource you need to use TResourceStream.

Ho my Dog, I did not know this one.
More than perfect, many thanks Sven.

PS: About array of float into TFileStream, after Googling a while, it s
not
possible to do directly like fpc does for C compilers.
You need a conversion (like explained by Lukasz Sokol).
And it is the reason why I am (once again) very impressed by fpc.

Huh? Of course you can do that rather similary in C as well.

Indeed. You can do exactly the same. You can do this:

{$mode objfpc}
uses classes;


Type
  Float = Double;
  TFloatArray = Array of Float;

Procedure TestRW(X : TFloatArray);

Var
  F : TFileStream;
  Y : TFloatArray;
  I : Integer;

begin
  // Write
  F:=TFileStream.Create('float.dat',fmCreate);
  try
    F.WriteBuffer(X[0],Length(X)*SizeOf(Float));
  finally
    F.Free;
  end;
  // Read
  F:=TFileStream.Create('float.dat',fmOpenRead);
  try
    SetLength(Y,F.Size div SizeOf(Float));
    F.ReadBuffer(Y[0],F.Size);
  finally
    F.Free;
  end;
  // Check
  If Length(Y)<>Length(X) then
    Writeln('Wrong length')
  else For I:=0 to Length(X)-1 do
    if (X[i]<>Y[i]) then
      Writeln('Wrong element at pos ',i,': ',X[i]<>Y[i]);
end;

var
  X : TFloatArray;
  I : Integer;

begin
  SetLength(X,10);
  Writeln('Floats');
  For I:=0 to Length(X)-1 do
     X[i]:=10+(1/(1+I));
  TestRW(X);
  Writeln('integers');
  For I:=0 to Length(X)-1 do
     X[i]:=10+I;
  TestRW(X);
end.

Michael.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to