[Back to DATATYPE SWAG index] [Back to Main SWAG index] [Original]

    {
    >Is is Possible to have a File of Two different Record Types?
    >How would one do this? I have seen it done..

    First, don't Declare the Type of the File, just use a Type or File.

    Declare Pointer Variables For each Type that the Record can be.   if you want
    the Record to hold a Value that says what the Record Type is, then device an
    ID scheme, and make sure the ID Variables are physically located at the same
    Position in both Records.

    Read that data into a buffer Record With BlockRead.  Assign the Typed
    Pointers to that buffer, and process away....
    }

    Type
      onerec = Record  { Record size is 98 Bytes }
        id : Byte;   { We will set ID = 1 For onerec }
        Username : String[80];
        Phone : String[15];
      end;
      anotherrec = Record  { Length is 163 Bytes }
        id : Byte; {We will set ID = 2 For anotherrec }
        ADDRESS1 : String[80];
        ADDRESS2 : String[80];
      end;

    Var
      ONE : ^ONEREC;
      AnotHER : ^AnotHERREC;
      Buffer : Array[1..163] of Char;   { The size of the largest Record }
      F : File;
      NumRead : Word;
      ID : Byte Absolute Buffer;   { ID points to the first Char begin}
    begin
      Assign(F,'FileNAME');
      Reset(F,SizeOf(Buffer));
      One := @BUFFER;
      AnotHER := @BUFFER;
      BlockRead(F,BUFFER,SIZEof(BUFFER),NUMRead);
      While NumRead > 0 Do
      begin
        Case ID of
          1 :
            begin
              WriteLn('Record is of Type ONE');
              WriteLn('USERNAME: ',ONE^.USERNAME);
              WriteLn('Phone: ',ONE^.Phone);
            end;
          2 :
            begin
              WriteLn('Record is of Type AnotHER');
              WriteLn('Address Line 1 = ',AnotHER^.ADDRESS1);
              WriteLn('Address Line 2 = ',AnotHER^.ADDRESS2);
            end;
          else
            WriteLn('Unidentified Record Type');
        end; { of Case }
        BlockRead(F,BUFFER,SIZEof(BUFFER),NUMRead);
      end;
      Close(F);
    end.

[Back to DATATYPE SWAG index] [Back to Main SWAG index] [Original]