관심을 보여주셔서 대단히 고맙습니다.
다음은 터보 파스칼로 작성된 레코드 구조입니다.
type work_record = record
code : string[5];
Sname : string[24];
Spec : string[12];
Unt : string[5];
CP : LongInt;
GB1 : byte;
GB2 : byte;
BIGO : string[10];
end;
var w_R : Work_record;
위 구조로 작성된 터보파스칼화일(binary)을 델파이에서 똑같은
레코드구조로 읽어 보았지만 첫번째레코드 이상하더군요!
위 w_R의 size를 검사해보면
TURBO PASCAL 에서는 : SizeOf(w_R) = 67
델파이 에서는 : SizeOf(w_R) = 72
위와 같이 값이 차이가 있던데 변수의 size가 영향이 아닐지
그래서 아래와 같이 델파이로 작성해보았더니
procedure TForm1.BitBtn1Click(Sender: TObject);
VAR FROMFILE :FILE;
NUMREAD :integer;
BUFFER :WORK_RECORD;
j : Word;
begin
ASSIGNfile(FROMFILE,'DATA.DAT');
RESET(FROMFILE,67);
// ------------------------------------------------------
//
// 여기서 67은 레코드size : Sizeof(buffer)를 하면 72가
// 되어 원래 터보에서 작성된 레코드길이와 틀려서...
//
//-------------------------------------------------------
if IORESULT = 0 then
begin
Repeat
BlockRead(FROMFILE,BUFFER,1,NUMREAD);
Memo1.Lines.Add(Buffer.code+' === '+
Buffer.Sname+' === '+
Buffer.Spec +' === '+
IntToStr(Buffer.Cp) +' ==== '+
IntToStr(Buffer.GB1)+' === '+
IntToStr(Buffer.Gb2));
UNTIL NUMREAD = 0;
CLOSEfile(FROMFILE);
end;
end;
위 source의 실행결과 모든레코드가 정상적으로 loading이 되는데
String변수외 LongInt와 Byte로 선언된 변수는 이상이 값이 출력
되더군요,
다시한번 관심 부탁드립니다. 고맙습니다.
|