Q&A

  • 김영석님 봐주세요 소스를 올립니다...
변수정의시

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번째 레코드

....

이런식으로 만들고 싶습니다.



1  COMMENTS
  • Profile
    고길동 2001.01.03 13:02
    아래 보니까 일단 AssignFile(FromF,... ) 가 빠졌네요.

    실수라 빠뜨린 건지..



    그리고 파일이 계속 써지는 것은 당연한 이야기가 아닌지요??

    그리고 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번째 레코드

    > ....

    > 이런식으로 만들고 싶습니다.

    >