Record 형으로 저장된 파일을 읽고 쓸려고 합니다.
헌데 문제는 Record type이 혼용되어 있는 파일입니다.
예를들어
Type
TRec1 = record
AA : string[50];
AB : string[4];
end;
TRec2 = record
SA : integer;
SA : integer;
end;
이라는 Type이 정의되어 있고 디스크에 있는 파일은
TRec1 형식의 data가 한번 써여져 있고, TRec2 형식이 500번
반복되어 있습니다.
이것을 읽어들이는 방법을 알고자 합니다. 가능하면 상세하게..
또한 위와 같은 형식으로 저장하는 방법도... 가능하다면.
나름대로 해볼려고 아래와 같이 해보았습니다만 잘안되는군요.
먼저 변수로 아래를 선언하고
Var
FHandle1 : File of TRec1;
DRec1 : TRec1;
FHandle2 : File of TRec2;
DRec2 : TRec2;
....
....
프로시져로
AssignFile(FHandle1 ,'c:테스트파일.tst');
Reset(FHandle1);
Read(FHandle1,DRec1);
이런식으로 읽을려고 하니까, 첫번째 형식은 읽은것 같은데
두번째 형식을 읽기 위해서 어떤식으로 coding해야 할지
모르겠군요.
아니면 방법이 애초부터 틀렸는지 ....
> Record 형으로 저장된 파일을 읽고 쓸려고 합니다.
> 헌데 문제는 Record type이 혼용되어 있는 파일입니다.
>
> 예를들어
> Type
> TRec1 = record
> AA : string[50];
> AB : string[4];
> end;
>
> TRec2 = record
> SA : integer;
> SA : integer;
> end;
>
> 이라는 Type이 정의되어 있고 디스크에 있는 파일은
>
> TRec1 형식의 data가 한번 써여져 있고, TRec2 형식이 500번
> 반복되어 있습니다.
>
> 이것을 읽어들이는 방법을 알고자 합니다. 가능하면 상세하게..
> 또한 위와 같은 형식으로 저장하는 방법도... 가능하다면.
>
>
> 나름대로 해볼려고 아래와 같이 해보았습니다만 잘안되는군요.
> 먼저 변수로 아래를 선언하고
> Var
> FHandle1 : File of TRec1;
> DRec1 : TRec1;
>
> FHandle2 : File of TRec2;
> DRec2 : TRec2;
>
> ....
> ....
>
> 프로시져로
> AssignFile(FHandle1 ,'c:테스트파일.tst');
> Reset(FHandle1);
>
> Read(FHandle1,DRec1);
>
> 이런식으로 읽을려고 하니까, 첫번째 형식은 읽은것 같은데
> 두번째 형식을 읽기 위해서 어떤식으로 coding해야 할지
> 모르겠군요.
> 아니면 방법이 애초부터 틀렸는지 ....
>
>
안녕하세요 김영대입니다
record 로 파일을 핸들링 한다는건 이진 처리가 되기 때문에
레코드의 형태가 어떻든 파일 포인터의 증가에만 신경쓰면 됩니다
근데 문제는 TRec1과 TRec2 의 두가지를 Read() 로 읽어야 하는데
Read() 로 읽으려면 하나의 파일에 대해 하나의 record 형태만
지원되는 문제입니다
FHandle1, FHandle2 의 두개의 파일 포인터를 만드시면 두개의
포인터는 완전히 따로 동작하므로 원하시는 목적을 얻기는 힘들고
파일 포인터(file of Byte 형태)를 하나만 만들고 BlockRead() 을
사용하여 뒤의 size 를 TRec1과 TRec2 의 크기만큼 변경해가면서
읽으시면 될듯합니다
그리고 또하나는 TRec1 한번 TRec2 500 번이라는 순서가 꼭 일치하지
않을 수 도 있는 문제입니다
그래서 대부분은 각 record 타입에 flag 를 두어서 다음에 어떤
형태의 record 타입이 오는지등의 정보를 넣어두시면 좋을듯 합니다