[fpc-pascal] Partially initializing array of records

2011-07-19 Thread Clay Stuart
Hello Everyone:

I've got an array of records that looks something like this:

type
  node = record
foo : array[1..10] of integer;
bar : array[1..10] of integer;
  end

var
 graph : array[1..5] of node;

begin...


However, the arrays hold different amounts of numbers.  So node[1].foo might
hold 5 numbers while node[2].foo might hold only 2.

My Question...
Is there a way to initialize these numbers somehow.  It seems the compiler
won't allow me to partly fill the arrays.  If I use them, it appears I have
to use them all the way.

Thank you in advance,
Clay
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] Partially initializing array of records

2011-07-19 Thread ik
You are talking about dynamic array:

type
  node = record
foo : array of integer;
bar : array of integer;
  end

var
 graph : array of node;


SetLength(graph, 5); // Gives you 0..4 elements
SetLength(graph.foo, 10); //Gives you 0..9 elements
...

Ido
On Tue, Jul 19, 2011 at 20:44, Clay Stuart clay.stu...@gmail.com wrote:

 Hello Everyone:

 I've got an array of records that looks something like this:

 type
   node = record
 foo : array[1..10] of integer;
 bar : array[1..10] of integer;
   end

 var
  graph : array[1..5] of node;

 begin...


 However, the arrays hold different amounts of numbers.  So node[1].foo
 might hold 5 numbers while node[2].foo might hold only 2.

 My Question...
 Is there a way to initialize these numbers somehow.  It seems the compiler
 won't allow me to partly fill the arrays.  If I use them, it appears I have
 to use them all the way.

 Thank you in advance,
 Clay

 ___
 fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
 http://lists.freepascal.org/mailman/listinfo/fpc-pascal

___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] Partially initializing array of records

2011-07-19 Thread Rainer Stratmann
Am Tuesday 19 July 2011 19:44:17 schrieb Clay Stuart:
 Hello Everyone:

 I've got an array of records that looks something like this:

 type
   node = record
 foo : array[1..10] of integer;
 bar : array[1..10] of integer;
   end

 var
  graph : array[1..5] of node;

 begin...


 However, the arrays hold different amounts of numbers.  So node[1].foo
 might hold 5 numbers while node[2].foo might hold only 2.

 My Question...
 Is there a way to initialize these numbers somehow.  It seems the compiler
 won't allow me to partly fill the arrays.  If I use them, it appears I have
 to use them all the way.

 Thank you in advance,
 Clay

I would do it like this.

const cntmax = 5;
var cnt : longint;

procedure init_counter;
begin
 cnt := 0;
end;

procedure init( v1 , v2 , v3 , v4 , v5 , v6 , v7 , v8 , v9 , v10 : integer );
begin
 if cnt  cntmax then begin
  with graph[ cnt ] do begin
   foo[ 1 ] := v1;
   foo[ 2 ] := v2;
...
   foo[ 10 ] := v10;
  end;
  inc( cnt );
 end;
end;

init_counter;
init_arr( 34 , 56 , 33 , 44, 44, 56, .. , .. , .., 77 );
init_arr( 34 , 56 , 33 , 44, 44, 56, .. , .. , .., 77 );
init_arr( 34 , 56 , 33 , 44, 44, 56, .. , .. , .., 77 );
init_arr( 34 , 56 , 33 , 0,0,0,0,0,0,0 );
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Partially initializing array of records

2011-07-19 Thread Clay Stuart
How do people initialize large amounts of information in practice?  Do they
just read in files and convert them over dynamically?

(Sorry for the potentially stupid questions.  I'm just coming to Pascal.)

Clay

On Tue, Jul 19, 2011 at 1:54 PM, Rainer Stratmann 
rainerstratm...@t-online.de wrote:

 Am Tuesday 19 July 2011 19:44:17 schrieb Clay Stuart:
  Hello Everyone:
 
  I've got an array of records that looks something like this:
 
  type
node = record
  foo : array[1..10] of integer;
  bar : array[1..10] of integer;
end
 
  var
   graph : array[1..5] of node;
 
  begin...
 
 
  However, the arrays hold different amounts of numbers.  So node[1].foo
  might hold 5 numbers while node[2].foo might hold only 2.
 
  My Question...
  Is there a way to initialize these numbers somehow.  It seems the
 compiler
  won't allow me to partly fill the arrays.  If I use them, it appears I
 have
  to use them all the way.
 
  Thank you in advance,
  Clay

 I would do it like this.

 const cntmax = 5;
 var cnt : longint;

 procedure init_counter;
 begin
  cnt := 0;
 end;

 procedure init( v1 , v2 , v3 , v4 , v5 , v6 , v7 , v8 , v9 , v10 : integer
 );
 begin
  if cnt  cntmax then begin
  with graph[ cnt ] do begin
   foo[ 1 ] := v1;
   foo[ 2 ] := v2;
...
   foo[ 10 ] := v10;
  end;
  inc( cnt );
  end;
 end;

 init_counter;
 init_arr( 34 , 56 , 33 , 44, 44, 56, .. , .. , .., 77 );
 init_arr( 34 , 56 , 33 , 44, 44, 56, .. , .. , .., 77 );
 init_arr( 34 , 56 , 33 , 44, 44, 56, .. , .. , .., 77 );
 init_arr( 34 , 56 , 33 , 0,0,0,0,0,0,0 );
 ___
 fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
 http://lists.freepascal.org/mailman/listinfo/fpc-pascal

___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] Partially initializing array of records

2011-07-19 Thread Flávio Etrusco
On Tue, Jul 19, 2011 at 2:44 PM, Clay Stuart clay.stu...@gmail.com wrote:
 Hello Everyone:
 I've got an array of records that looks something like this:
 type
       node = record
             foo : array[1..10] of integer;
             bar : array[1..10] of integer;
       end
 var
      graph : array[1..5] of node;
 begin...

 However, the arrays hold different amounts of numbers.  So node[1].foo might
 hold 5 numbers while node[2].foo might hold only 2.
 My Question...
 Is there a way to initialize these numbers somehow.  It seems the compiler
 won't allow me to partly fill the arrays.  If I use them, it appears I have
 to use them all the way.
 Thank you in advance,
 Clay

AFAIK no. You'll have to explicitly initialize them with '0'.

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Partially initializing array of records

2011-07-19 Thread Martin

On 19/07/2011 19:05, Clay Stuart wrote:
How do people initialize large amounts of information in practice?  Do 
they just read in files and convert them over dynamically?


There is an example for pre-initialized variable length arrays in  
ide\editoroptions.pp line 550 and before.


EditorOptionsFoldDefaults: array[TLazSyntaxHighlighter] of
TEditorOptionsFoldRecord =
( (Count:  0; Info: nil), // none
  (Count:  0; Info: nil), // text
  (Count: 23; Info: {$IFDEF 
FPC}@{$ENDIF}EditorOptionsFoldInfoPas[0]), // Freepas
  (Count: 23; Info: {$IFDEF 
FPC}@{$ENDIF}EditorOptionsFoldInfoPas[0]), // pas
  (Count:  3; Info: {$IFDEF 
FPC}@{$ENDIF}EditorOptionsFoldInfoLFM[0]), // lfm



it uses pointers though

  TEditorOptionsFoldInfoList = Array [0..999] of TEditorOptionsFoldInfo;
  PEditorOptionsFoldInfoList = ^TEditorOptionsFoldInfoList;

  TEditorOptionsFoldRecord = record
Count: Integer;
Info: PEditorOptionsFoldInfoList;
  end;


The pointer does not care, that it points to an array defined with a 
different length
of course, you must ensure not to access elements outside the 
boundaries, as all the nice things like range-checks will no longer work


Afaik the array declaration isn't even needed, just using pointers would 
already do the trick




___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal