변수정의시
var F: TextFile; 와
var F: File; 의 차이점이 알고 싶습니다
여기 소스를 올립니다
procedure TIS611F.save;
var
//...........선언부분
FromF, ToF : file;
BufLen,NumRead, NumWritten,full,NameInt,n,Sno : Integer;
Buf: array[1..650] of Char;
RecBuf: array[1..650] of Char;
//...........
begin
While Not Vins0001.Eof Do
Begin
FormatBuf(RecBuf , SizeOf(RecBuf) ,
'A20%3s%8s%1s%6s%-10s%-40s%13s%-30s%-15s%5s%3s%1s%1s%511s'
,Length('A20%3s%8s%1s%6s%-10s%-40s%13s%-30s%-15s%5s%3s%1s%1s%511s')
,[A[1],a[2],a[3],a[4],a[5],a[6],CharDelete(a[7],'-'),a[8]
,a[11],a[12],a[13],a[14],' ',' ']);
AssignFile(ToF,Config.ApplPath + 'backup' + FName);
Rewrite(ToF, 1);
BlockWrite(ToF, recBuf, SizeOf(RecBuf), NumWritten);
Vins0001.next;
End;
CloseFile(Tof);
AssignFile(ToF, Copy(Path.Text,1,2) + FName);
ReWrite(Tof,1);
Repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToF, Buf, NumRead, NumWritten);
until (NumRead = 0) or (NumWritten <> NumRead);
CloseFile(FromF);
CloseFile(Tof);
end;
결과파일을 보면은 650바이트씩은 가져오는데 계속이어서 자료가 생성이됩니다
1...........끝까지
제가 원하는 자료형태는
1............650 - 1번째 레코드
1............650 - 2번째 레코드
....
이런식으로 만들고 싶습니다.
실수라 빠뜨린 건지..
그리고 파일이 계속 써지는 것은 당연한 이야기가 아닌지요??
그리고 TextFile 는 텍스트파일에서만 쓰는 변수고
File 은 아무파일(바이너리, 텍스트)에서 쓸 수 있습니다.
원래 레코드란 것은 그걸 읽은 프로그램이 인식하기에 달린거죠.
파일에는 그냥 연속된 바이트값이 써질 뿐이기 때문에
1..650
1..650 이렇게 나눠져서 써지지는 않습니다.
그냥 그렇게 써진 바이트값들을 프로그램이 읽어서 그걸
650 바이트씩을 한 레코드로 묶어줘서 처리할 수 있도록
해야죠. 파일에 끝없이 써지는 건 당연한 얘기고..
파일은 Array 처럼 일차원이나 2차원 배열이 아니고 그냥
연속된 바이트값일 뿐입니다. 프로그램에서 인식하도록
하셔요.
서영택 wrote:
> 변수정의시
> var F: TextFile; 와
> var F: File; 의 차이점이 알고 싶습니다
>
> 여기 소스를 올립니다
> procedure TIS611F.save;
> var
> //...........선언부분
> FromF, ToF : file;
> BufLen,NumRead, NumWritten,full,NameInt,n,Sno : Integer;
> Buf: array[1..650] of Char;
> RecBuf: array[1..650] of Char;
> //...........
> begin
> While Not Vins0001.Eof Do
> Begin
> FormatBuf(RecBuf , SizeOf(RecBuf) ,
> 'A20%3s%8s%1s%6s%-10s%-40s%13s%-30s%-15s%5s%3s%1s%1s%511s'
> ,Length('A20%3s%8s%1s%6s%-10s%-40s%13s%-30s%-15s%5s%3s%1s%1s%511s')
> ,[A[1],a[2],a[3],a[4],a[5],a[6],CharDelete(a[7],'-'),a[8]
> ,a[11],a[12],a[13],a[14],' ',' ']);
>
> AssignFile(ToF,Config.ApplPath + 'backup' + FName);
> Rewrite(ToF, 1);
> BlockWrite(ToF, recBuf, SizeOf(RecBuf), NumWritten);
>
> Vins0001.next;
> End;
> CloseFile(Tof);
>
> AssignFile(ToF, Copy(Path.Text,1,2) + FName);
> ReWrite(Tof,1);
> Repeat
> BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
> BlockWrite(ToF, Buf, NumRead, NumWritten);
> until (NumRead = 0) or (NumWritten <> NumRead);
> CloseFile(FromF);
> CloseFile(Tof);
> end;
>
> 결과파일을 보면은 650바이트씩은 가져오는데 계속이어서 자료가 생성이됩니다
> 1...........끝까지
>
> 제가 원하는 자료형태는
> 1............650 - 1번째 레코드
> 1............650 - 2번째 레코드
> ....
> 이런식으로 만들고 싶습니다.
>