Q&A

  • untyped file중 file of record에서 string형이 255자이상 가지게 하려면
안녕하세용~~ ^^;;;

가르쳐 주세용~~

untyped file중 file of record에서 레코드의 string형 인자가 255자이상

가지게 하려면 어떻게 하나요?? 불가능 한건가요??

TCar = record
   name: string;
end;

var
  MyFile: File of TCar

에서여...^^;; 그냥 컴파일 하면 에러가 나고 'Huge String' 옵션을 빼주면

에러는 안나지만 name값은 255자 이상 들어가면 에러가 나네여..ㅡㅡ;;

고수님들의 손길을 기다리고 있겠습니닷~~
4  COMMENTS
  • Profile
    최용일 2002.04.09 04:32
    안녕하세요. 최용일입니다.

    PChar형을 쓰세요... 파일레코드에는 string(long string), pointer, 동적배열등과 같은 비정형 데이터를 쓸 수 없습니다.

    TCar = record
        name: array[0..8192] of Char;
    end;

    var
        MyFile: File of TCar;

    ^^ 항상 즐코하세요...

  • Profile
    김세형 2002.04.09 05:03


    최용일 님의 답변을 잘 보았습니다. 관심을 가져주셔서 감사해용~~

    그런데 위와 같은 방법에서는 레코드형의 인자가 짧다는 가정하에는 상관이 없

    겠지만, 크기가 들쭉날쭉하다면 어쩔수 없이 배열의 크기를 크게 잡아야

    겠지요..그렇게 되면 파일의 낭비가 심할텐데여..혹시 다른 방법은 없을까요??

    초보가 참 배부른 소리하는거 같네여...^^;;..아무튼 답변해주신 최용일님께

    감사드립니당~~ ^^;; 저녁 맛나게 드세여~
  • Profile
    최용일 2002.04.09 05:34
    님께서 쓰시는 파일은 형태화파일(typed file)로 가변적인 레코드를 사용하지 않습니다. 읽기/쓰기 단위는 레코드 크기가 되구요...

    크기가 들쭉날쭉 변한다면 비형태화파일을 사용하여 가변적으로 읽으세요...

    var
        MyFile: File;
        P: PChar;
    begin
        AssignFile(MyFile, FileName);
        Reset(MyFile, 1);
        GetMem(P, 1024);
        BlockRead(MyFile, P^, 1024);
        ...
        FreeMem(P);

        GetMem(P, 2048);
        BlockRead(MyFile, P^, 2048);
        ...
        FreeMem(P);

        CloseFile(MyFile);
    end;

    ^^ 항상 즐코하세요...

  • Profile
    김세형 2002.04.09 05:43


    아..곧바로 답변해주신 최용일님께 감사드립니다.

    그렇군여..역시 레코드 파일로는 크기가 들쭉날쭉한 문자열 인자를

    관리하기가 쉽지 않겠군여.. 감사합니다.~  ^-^